编译原理——中间代码生成的一个小问题

Yunhe_Feng 2010-05-28 04:45:39
各位大牛,请问S.code:=C.code||gen(C.true':')||S1.code||gen('goto'S.next)||gen(C.false':')||S2.code
这句话是对if C then S1 else S2 的翻译。如何理解这段代码? 对于♢||△,♢和△的位置能调换么?谢谢!
...全文
216 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
pandazhong 2010-05-31
  • 打赏
  • 举报
回复
这些都是啥玩意了,你自己换一下试试看不久行了。
大熊猫侯佩 2010-05-31
  • 打赏
  • 举报
回复
同意楼上
  • 打赏
  • 举报
回复
这是语法分析的产生式描述(语义规则),不过楼主写的不完整。

多说一句:陈火旺的《编译原理》属于较差的版本。:)
编译原理教材的经典是《Compilers - Principles, Techniques, and Tools》,另外Kenneth的《Programming Languages: Principles and Practice》也是顶级著作。二者皆有中文版。
Boover 2010-05-31
  • 打赏
  • 举报
回复
[Quote=引用楼主 vernice 的回复:]
各位大牛,请问S.code:=C.code||gen(C.true':')||S1.code||gen('goto'S.next)||gen(C.false':')||S2.code
这句话是对if C then S1 else S2 的翻译。如何理解这段代码? 对于♢||△,♢和△的位置能调换么?谢谢!
[/Quote]
楼主好!
我也正在学习编译原理呀!

C.code:是产生相对于条件语句C的代码;
gen(C.true':'):生成C.true标号(留待C.code执行完后跳转用,因为C.code会生成gen('goto' C.true)或gen('goto' C.false)),即如C语言代码
goto loop;
loop:c=a+b;
中的loop;
S1.code:相应的then代码段的中间代码;
gen('goto'S.next):生成一个跳出if(then部分执行了,else部分跳出)的语句;
gen(C.false':'):同gen(C.true':');
S2.code:同S2.code。

具体可以参考国防工业出版社《编译原理》(陈火旺等编著)188页的表7.7,解释的很好

||两边的位置不能调换!

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧