- 1、本文档共122页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理第七章课件(精品)
第七章语法制导翻译和中间代码生成;概述 语义处理;;属性文法和语法制导翻译 ;属性文法;;在一个属性文法中,对应于每个产生式A??都有一套与之相关联的语义规则,每条规则的形式为b:=f(c1,c2…ck)
这里,f是一个函数,b和c1,c2…ck是该产生式文法符号的属性。
(1)如果b是A的一个属性,并且c1,c2…ck是产生式右边文法符号的属性或A的其他属性,则称b是A的综合属性;
(2)如果b是产生式右边某个文法符号X的一个属性,并且c1,c2…ck是A或产生式右边任何文法符号的属性,则称b是文法符号X的继承属性。
在两种情况下,我们都说属性b依赖于属性c1,c2…ck。
简单地说,综合属性用于“自下而上”传递信息,而继承属性用于“自上而下”传递信息。;; ;设表达式为3*5+4,则语义动作是什么?;设表达式为3*5+4,则语义动作打印数值19;继承属性; ;;;依赖图;;;;;; 属性计算方法; ;用一遍扫描的编译程序模型来理解语法制导的翻译方法:
为文法中每个产生式配上一组语义规则,并且在语法分析的同时执行这些语义规则。在自上而下的语法分析中,若一个产生式匹配输入串成功(对非终结符推导一次),或者,在自下而上分析中,当一个产生式被用于进行归约时,此产生式相应的语义规则就被计算,完成相关的语义分析和代码产生等工作。在这种情况下,语法分析工作和语义规则的计算是穿插进行的。;S-属性文法的自下而上计算;产生式 语义规则
0)L→E print(E.val)
1)E→E1+T E.val∶=E1.val+T.val
2)E→T E.val∶=T.val
3)T→T1*F T.val∶=T1.val×F.v al
4)T→F T.val∶=F.val
5)F→(E) F.val∶=E.val
6)F→digit F.val:=digit.lexval
LR分析器可以改造为一个翻译器,在对输入串进行语法分析的同时对属性进行计算。
LR分析器增加语义栈
;2+3*5的分析和计值过程;L-属性文法和自顶向下翻译;例(中缀表达式翻译成相应的后缀表达式)E→TRR→addop T {print(addop. Lexeme)} R1|εT→num {print(num.val)};输入串9-5 + 2的语法树,每个语义动作都作为相应产生式左部符号的结点的儿子,按深度优先次序执行图中的动作后,打印输出95-2+。;例题与习题解答;;;;语义分析和中间代码的产生属性文法和语法制导翻译方法和技术应用于语义分析中;;;例 : A + B * ( C - D ) + E / ( C - D ) ^N
分别用逆波兰、三元式、四元式表示。;例 : A + B * ( C - D ) + E / ( C - D ) ^N;例: A:=B+C*D/E
F:=C*D;三地址语句中可以带有符号标号(代表存放中间代码的数组中三地址代码语句的下标)
P170列出本书所使用的三地址语句的种类。; 图表示法
抽象语法树,有向非循环图
可以表示源程序的自然层次结构,例如:
a:=b * - c+b * -c;assign;assign;7.2 说明语句
◆说明语句的翻译:对每个局部名字,在符
号表中建立相应的表项,填写有关的信息
如类型、嵌套深度、相对地址等。
◆相对地址:相对静态数据区基址或活动记
录中局部数据区基址的一个偏移值。
7.2.1 过程中的说明语句
◆一个过程中的所有说明语句作为一个类集
来处理。用一个全程变量Offset来记录下
一个数椐在活动记录中的位置。;P→ {offset:=0} D
D→D; D
D→id :T {enter(id.name,T.type,offset); offset:=offset+T.width}
T→integer {T.type :=integer; T.width:= 4}
T→real {T.type:=real; T.width :=8}
T→array[num]of T1
{T.type:=array(num.val, T1.type ); T.width: =num.val *T1.width}
T→ ↑T1 {T.type:=pointer(T1.type); T.width
您可能关注的文档
最近下载
- 吻合器应用的有关问题.ppt
- 2024秋国开《法律职业伦理》形考任务一至三答案.docx VIP
- 《党政机关厉行节约反对浪费条例》详细内容学习(PPT+文稿).pptx VIP
- 油库DCS控制系统.pptx VIP
- 世界职业院校技能大赛「参赛项目介绍内容」模拟示例参考—项目名称:生命之桥.docx VIP
- (新平台)国家开放大学《幼儿园教育质量评价》形考任务1-3参考答案.pdf VIP
- 上海交通大学网络护理管理学习题册答案.pdf VIP
- 液化气公司(燃气站)安全生产三项制度完整版.doc VIP
- 生物质发电锅炉设备原理方案.doc
- 2025年《党政机关厉行节约反对浪费条例》PPT学习课件.pptx VIP
文档评论(0)