- 1、本文档共74页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理实践及应用PPT教学课件-第5章 中间代码生成
语义分析和中间代码生成;本章要求;语义分析和中间代码生成所处的位置:;1. 语义分析和中间代码生成在编译器中的位置:;;1、逆波兰式:
运算对象写在前,运算符写在后(后缀表示形式)
例:a+b ? ab+
(a+b)*c ? ab+c*
a+b*c ? abc*+
a:=b*c+b*d ? abc*bd*+:=;练习;后缀式的推广;;;练习;到目前为止,已知 输入的语法单位,又知道 要翻译的结果的形式,翻译的方法是什么?;5.3 属性文法与语法指导的翻译;;;digit?lexval:=3;C语言中变量定义:
int id1,id2,id3;语义规则描述的工作:
属性计算、静态语义检查、符号表的操作、代码生成等,通常写成过程和函数调用,称为语义子程序。
语义翻译常用的方法:
语法制导翻译:定义翻译所必须的语义属性和语义规则,一般不涉及计算顺序。;语法制导翻译技术;语法制导翻译的处理方法;;语义子程序的一般形式
语义子程序写在该产生式后面的花括号内:
(1) X?… { 语义子程序1 }
(2) Y?… { 语义子程序2 }
(3) A?XY { 语义子程序3 }
例:台式计算器程序的语义子程序描述:
产生式 语义子程序
(0) S’?E {PRINT E.VAL}
(1) E?E(1)+E(2) {E.VAL:=E(1).VAL+E(2).VAL}
(2) E?E(1)*E(2) {E.VAL:=E(1).VAL*E(2).VAL}
(3) E?(E(1)) {E.VAL:= E(1).VAL}
(4) E?i {E.VAL:=LEXVAL};常见的语法制导翻译类型:
语法分析采用自下而上方法时,使用与语法分析栈同步操作的语义栈进行语法制导翻译。
语法分析采用递归下降分析方法时,利用隐含堆栈存储各递归子程序中的局部变量所表示的语义信息
语法分析采用LL(1)分析法时,利用翻译文法进行语法制导的翻译。翻译文法是在描述语言的文法中加入语义动作的符号。
利用属性文法进行翻译。属性文法也是一种翻译文法,它的文法符号和动作符号都带有语义属性和同一产生式中各属性间的运算规则。;自下而上的语法制导翻译举例;自下而上翻译的特点;例1:下面是一个算术表达式文法,每个产生式右边是它的语义动作,对输入串2* 3 + 2的规范归约的分析过程如下:;;;;例2:在3*5+4的LR分析过程中增加了语义栈后的语法制导的实现过程。;;结论;5.4 常见语句的语法制导的翻译;说明语句的翻译;变量说明语句的??译;3. 翻译的语义动作;VAR id1,id2,id3:integer;的归约过程;常量说明语句的翻译;Constant A=123;可执行语句的翻译;简单赋值语句的翻译;3. 简单赋值语句的翻译
此处只假定是整数运算;例:赋值句A:=B+C*(-D)的自底向上分析 设:翻译此赋值句之前四元式的最大编号为K;;因此,四元式表中增加了4条四元式:;布尔表达式的翻译;布尔量翻译为两条四元式:
(jnz, A,_,P): 真出口,当A为真时跳转到四元式P
(j, _,_,q) : 假出口,无条件跳转到四元式q
关系表达式也翻译为两条四元式:
(jrop, i1, i2, P) : 真出口,当i1 rop i2为真时转四元式P
(j, _,_,q) : 假出口,无条件跳转到四元式q;解决方法是:回填技术
已知就直接填入;不知时先填0,等知道后再返填
若多个因子的转移去向相同,但又不知道具体位置,应该用链将这些未知且出口相同的四元式链在一起。
布尔表达式: A and B and CD 的四元式为: ;将P1,P2为链首两个四元式链合并在一起,可以用下述过程,返回合并后的四元式链首:;假出口链上的四元式应转向相同的位置,所以一旦知道转向的真实位置,就应返填,返填是将已知位置填入链上的所有四元式的第四个分量。
用backpatch,把已知位置t填入以P为链首的四元式中:;;;5. 翻译布尔表达式时,当读到not, and, or时,要进行归约,因此应对文法进行改造,改造前后的文法为:; 6. 总结前面的分析,各产生式的翻译为:;;控制语句的翻译;IF语句的翻译;2. IF语句的目标结构及其翻译
无else的结构;2. IF语句的目标结构及其翻译
有else的结构;例:将下面的IF语句翻译为四元式序列;练习:将下面的语句翻译为四元式序列;REPEAT语句的翻译;;将下面的语句翻译为四元式序列;FOR语句的翻译;FOR语句的翻译;将下面的语句翻译为四元式序列;5.5 Sample语言语法制导翻译程序的设计;举例:为IF语句添加语义处理;;;Sample语
文档评论(0)