大学编译原理与技术课件.pptxVIP

  • 3
  • 0
  • 约1.43千字
  • 约 42页
  • 2023-10-26 发布于江苏
  • 举报
中间代码生成;布尔表达式的翻译;布尔表达式的翻译;布尔表达式的翻译;布尔表达式的翻译;id1 relop id2 (关系表达式);布尔表达式的翻译;id(布尔变量);e.g.16 ab or c=d and not ef 的三地址码:;e.g.16 ab or c=d and not ef 的三地址码:;;布尔表达式的翻译;短路计算;短路计算;短路计算;回填技术 -相关符号属性及语义函数: E.truelist :布尔表达式代码中所有转向真出口的代码语句链; E.falselist :所有转向假出口的代码语句链; backpatch( code-list, target-code ) //将目标地址target-code填回code-list中每条语句 merge( code-list1, code-list2 ) //合并链code-list1和code-list2(它们包含的语句转移目标相同) makelist( code-No ) , makelist()-建立含语句编号为code-No 的链或空链 M?? { M.code := nextcode } // 获取下一三地址代码(语句)的编号(作为转移目标来回填);短路计算及回填的翻译方案;E?not E1 { E.truelist := E1.falselist; E.falselist := E1.truelist; } E?( E1 ) { E.truelist := E1.truelist; E.falselist := E1.falselist; } E? id1 relop id2 { E.truelist:=makelist(nextcode); emit( “if” id1.place relop.op id2.place “goto” -); E.falselist := makelist( nextcode ); emit( “goto” -); };(6) E? true { E.truelist := makelist( nextcode ); emit( “goto” -); E.falselist := makelist(); } (7) E? false { E.falselist := makelist( nextcode ); emit( “goto” -); E.truelist := makelist(); };控制流语句的翻译;条件语句的翻译(1);条件语句的翻译(1);条件语句的翻译(2);条件语句的翻译(2);循环语句的翻译(1);循环语句的翻译(1);循环语句的翻译(2);循环语句的翻译(2);循环语句的翻译(3);文法G4中其它语句的翻译;CASE/SWITCH语句的翻译(0);E.code t: goto test ( 待回填);CASE/SWITCH语句的翻译(1);CASE/SWITCH语句的翻译(2);e.g.17 控制流语句的翻译;e.g.17 控制流语句的翻译;e.g.17 控制流语句的翻译;e.g.17 控制流语句的翻译;e.g.17 控制流语句的翻译;e.g.17 控制流语句的翻译;if ab goto 106 goto 102 if cd goto 104 goto 111 if ef goto 106 goto 111;e.g.18 Linux下C语言控制流语句的翻译

文档评论(0)

1亿VIP精品文档

相关文档