- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第五章语法制导翻译和中间代码产生 * * 算术表达式a+b*c翻译到三地址语句的过程: 03 0 $ $a 01 $E 014 $E+ 0143 $E+b -a -a- -a-- 状态栈 符号栈 语义栈 输入串 a+b*c$ +b*c$ +b*c$ b*c$ *c$ - - - 第五章语法制导翻译和中间代码产生 * * *c$ c$ $ $ $ $ t1=b*c t2=a+t1 状态栈 符号栈 语义栈 输入串 01475 0147 $E+E $E+E* 014753 $E+E*c 014758 $E+E*E 0147 $E+E 01 $E -a-b- - -a-b-c -a-t1 -a-b- -a-b -t2 acc 第五章语法制导翻译和中间代码产生 * * 二、布尔表达式的翻译 1、E→E ∨ E 2、E→E ∧ E 3、E→ ? E 4、E→(E) 5、E→id rop id 6、E→id 第五章语法制导翻译和中间代码产生 * * 1、类似算术表达式的翻译方法 (求每个因子,再求表达式的值) 例如: 布尔表达式 : a ∨ b ∧ ? c 三地址序列: T1:= ? c T2:=b ∧ T1 T3:=a ∨ T2 第五章语法制导翻译和中间代码产生 * * 1. E→ E (1)∨ E (2) { E.place = newtemp( ); emit ( E.place’=’E(1).place’∨’E(2).place ) } 2. E→ E (1) ∧ E (2) { E.place = newtemp( ); emit ( E.place’=’E(1).place’∧’E(2).place ) } 3. E→ ? E (1) { E.place = newtemp( ); emit ( E.place’=’’?’ E(1).place} 4. E→ ( E (1) ) { E.place = E(1).place;} 5. E→ i (1) rop i (2) { E.place = newtemp( ); emit (‘if ’ i (1).place rop.op i (2).place ‘goto’ next+3); emit ( E.place’=’ ‘0’ ); emit ( goto next+2); emit ( E.place’=’ ‘1’ ); } 6. E→ i { E.place = i . place;} 第五章语法制导翻译和中间代码产生 * * E E ∨ E a b E ∧ E cd ef 第五章语法制导翻译和中间代码产生 * * 2、根据布尔表达式的特殊性采取某种优化措施 A ∨ B if A then trun else B A ∧ B if A then B else false ? A if A then false else true ①对非终结符E赋予两个出口 真出口:布尔表达式为真时,需转移的四元式地址。 假出口:布尔表达式为假时,需转移的四元式地址。 第五章语法制导翻译和中间代码产生 * * ②设置两个语义变量: E.ture : 用来记录表达式E对应的四元式需回填真出口的四元式的地址所构成的链。 E.false:用来记录表达式E对应的四元式需回填假出口的四元式的地址所构成的链。 ③定义三个函数: 第五章语法制导翻译和中间代码产生 * * 链接函数merge(P1 , P2):把以P1和P2为链首的两条链合并为一,返回合并后的链首(当P2=0时,返回P1 ; 当P2≠0时,返回P2)。 int merge(int P1 , int P2 ) { int P; if (! P2) return P1; else { P=P2 ; while (P.result 0) P=P.result; P.result=P1; return P2 ; } 第五章语法制导翻译和中间代码产生 * * 回填函数backpatch( p , t ):把p所链接的每个四元式的第四分量都回填为t。 void BP( int p , int t ) { int q=p ; while (q) { int q1
您可能关注的文档
最近下载
- 基础护理学试题及答案静脉输液和输血练习题.docx VIP
- DB13(J)_T234-2017:HC-1高性能混凝土胶凝材料应用技术规程.pdf VIP
- 绿色金融人才:培养路径与模式探索.docx VIP
- 成本与管理会计第四版孙茂竹课后习题答案解析.pdf
- Yamaha雅马哈键盘乐器 Tyros4 参考手册.pdf
- 论建设工程质量管理论文.docx VIP
- 亨斯迈聚醚胺JEFFAMINE EDR-176.pdf VIP
- 第五章 第三节 同龄林蓄积控制法计算采伐量.pdf
- 亨斯迈聚醚胺jeffamine_m_2070_us_5_08.pdf VIP
- 亨斯迈聚醚胺jeffamine_d_2000_us.pdf VIP
原创力文档


文档评论(0)