- 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)