- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
2025/7/171编译原理与技术语法制导翻译
语法制导翻译2025/7/172属性文法S-属性定义L-属性定义语法制导定义与翻译方案自底向上翻译S-属性定义自底向上计算自底向上计算继承属性自顶向下翻译
属性文法(AttributedGrammar)上下文无关文法+属性+属性计算规则属性-用来描述文法符号的语义特征,如常量的“值”、变量的类型和存储位置等。e.g.二义性表达式文法G,非终结符E有属性E.val(表达式的值)E?E‘+’E|E‘*’E|‘(‘E‘)’|number属性计算规则(语义规则)与产生式相关联的反映文法符号属性之间关系的“规则”
属性文法语法制导定义(文法+属性+语义规则)语义规则仅表明属性间“抽象”关系,不涉及具体翻译实现细节,如计算次序等。翻译方案(文法+属性+语义动作)语义规则-即语义动作,可体现若干实现的细节。
产生式 语法制导定义E?E1‘+’E2E.val:=E1.val+E2.valE?E1‘*’E2E.val:=E1.val*E2.valE?’(‘E1‘)’E.val:=E1.valE?numberE.val:=number.lex_val
E?E1‘+’E2{E.val:=E1.val+E2.val}1E?’(‘E1‘)’{E.val:=E1.val}3E?E1‘*’E2{E.val:=E1.val*E2.val}2E?number{E.val:=number.lex_val}4产生式 翻译方案
若产生式A?X1X2…Xn,与之相关的属性计算规则如果属性b是产生式左部符号A的属性则称其为A的综合属性;c1,c2,…一般是产生式右部其它符号的(综合)属性或A的继承属性;b:=f(c1,c2,…)如果属性b是产生式右部符号Xi的属性则称其为Xi的继承属性;固有属性:终结符仅有的属性。如number.lex_val。通常由词法程序提供。属性的分类
属性依赖图2025/7/178bX1.c1X2.c2Xn.cn…综合属性A.b的计算A的继承属性AX1.c1X2.c2…继承属性Xk.b的计算A的继承属性Xk.bXn.cn
val=231E.val=32+3val=204number.lex_val=35val=46×7val=58number.lex_val=49number.lex_val=510
为输入串建立分析树由语义规则建立属性依赖图(没有属性循环依赖的)对依赖图进行拓扑排序,得到属性计算次序依次计算属性,得到“翻译”结果分析树方法构造编译器时,事先对产生式的语义规则进行分析,得到属性计算次序基于规则的方法属性计算次序仅由分析方法限定。如S-属性定义可以在自下而上分析时,在归约前计算。如YACC中的语义动作。忽略规则的方法
val=23val=3+val=20number.lex_val=3val=4×val=5number.lex_val=4number.lex_val=5
0102030405语义规则仅包含综合属性计算(可以有固有属性出现)。适合自底向上计算e.g.语法树语法树与分析树语法树可看作分析树的浓缩。也称抽象语法树。而分析树可看成具体语法树。
S?ifB-exprthenS1elseS2 语法树 分析树if-then-elseB-exprS1S2SifB-exprthenS1elseS2
a:=b*-c+b*-c 语法树分析树 assigna+*b@c*b@cassignEEE+E*EbE@Ea赋值语句cE*EbE@c算符
DAG(去除了公共子表达式的无环有向图) a:=b*-c+b*-c assigna+*b@c*b@cassigna+*b@c语法树DAG
产生式 语义规则E?E1+E2E.nptr:=mknode(‘+’,E1.nptr,E2.nptr)E?E1-E2E.nptr:=mknode(‘-’,E1.nptr,E2.nptr)E?E1*E2E.nptr:=mknode(‘*’,E1.nptr,E2.nptr)E?E1/E
文档评论(0)