- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(2) 作为条件转移的E,把E翻译成的代码 是一串条件转或无条件转的四元式 对于E为 a rop b 的形式生成代码为: if a rop b goto 真出口 goto 假出口 布尔表达式到四元式的翻译 (q) 例如语句 if a b∨c d then S(1) else S(2) 的四元式为: 100 if a b goto 104 101 goto 102 102 if c d goto 104 103 goto ( p+1) 104 ( 关于 S(1) 的四元式) …… (p) goto (q) (p+1) ( 关于 S(2) 的四元式) E(1)的真出口为104, E(1)的假出口为102 E(2)的真出口为104, E(2)的假出口为(p+1) E的真出口为104, E的假出口为(p+1) …… 布尔表达式到四元式的翻译 布尔表达式到四元式的翻译 布尔表达式的真、假出口不能在产生其四元式的同时得知 例如 E(1)的真出口为104需分析到S(1)时才能得知,因此 E.tr: 记录表达式 E 所对应的四元式需回填真出口的四元式的地址所构成的链 E.fa: 记录表达式 E 所对应的四元式需回 填假出口的四元式的地址所构成的链 (3) 设置两个语义变量: (q) 例如语句 if a b∨c d then S(1) else S(2) 的四元式为: 100 if a b goto 104 101 goto 102 102 if c d goto 104 103 goto ( p+1) 104 ( 关于 S(1) 的四元式) …… (p) goto (q) (p+1) ( 关于 S(2) 的四元式) …… 布尔表达式到四元式的翻译 E(1).tr=100, E(1).fa=101 E(2).tr=102, E(2).fa=103 布尔表达式到四元式的翻译 E.fa=103; E.tr=100和102所构成的链 E(1) ∨ E(2)归约E时, 布尔表达式到四元式的翻译 把以 p1, p2为链首的两条链合并为一, 返回合并后的链首 (4) 链结函数和回填函数: ● merg (p1, p2) : 布尔表达式到四元式的翻译 } merg (int p1, int p2) { if p2=0 return( p1 ) ; else { p= p2 ; while ( 四元式p的第四分量内容不为0) p=四元式p的第四分量内容; 把p1填进四元式p的第四分量; return( p2 ) ;} 布尔表达式到四元式的翻译 r1 ( × × × 0 ) q1 ( × × × r1 ) q2 ( × × × r2 ) p1 ( × × × q1 ) r2 ( × × × 0 ) p2 ( × × × q2 ) p1 布尔表达式到四元式的翻译 } merg (int p1, int p2) { if p2=0 return( p1 ) ; else { p= p2 ; while ( 四元式p的第四分量内容不为0) p=四元式p的第四分量内容; 把p1填进四元式p的第四分量; return( p2 ) ;} 100 102 102 (q) 例如语句 if a b∨c d then S(1) else S(2) 的四元式为: 100 if a b goto 0 101 goto 102 102 if c d goto 100 103 goto ( p+1) 104 ( 关于 S(1) 的四元式) …… (p) goto (q) (p+1) ( 关于 S(2) 的四元式) …… 布尔表达式到四元式的翻译 布尔表达式到四元式的翻译 ● bp ( int p, int t ) : 将 p 所链结的每个四元式的第四区分量都回填 t ; 布尔表达式到四元式的翻译 } bp ( int p, int t ) { q=p; while (q != 0 ) { r = 四元式 q 的第四分量内容; 把 t 填进四元式 q 的第四分量; q=r ;} 102 104 100 0 102 100 (q) 例如语句 if a b∨c d then S(1) else S(2) 的四元式为: 100 if a b goto 104 101
文档评论(0)