- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理课后部分答案
第二章问答第1题 PL/0语言允许过程嵌套定义和递归调用,它的编译程序在运行时采用了栈式动态存储管理。(数组CODE存放的只读目标程序,它在运行时不改变。)运行时的数据区S是由解释程序定义的一维整型数组,解释执行时对数据空间S的管理遵循后进先出规则,当每个过程(包括主程序)被调用时,才分配数据空间,退出过程时,则所分配的数据空间被释放。应用动态链和静态链的方式分别解决递归调用和非局部变量的引用问题问答第2题 程序执行到赋值语句b=10时运行栈的布局示意图为:
问答第3题 题2中当程序编译到r的过程体时的名字表table的内容为:
name kind level/val adr size x variable 0 dx ? y variable 0 dx+1 ? p procedure 0 过程p的入口(待填) 5 a variable 1 dx ? q procedure 1 过程q的入口 4 s procedure 1 过程s的入口(待填) 5 c variable 2 dx ? d variable 2 dx ? r procedure 2 过程r的入口 5 e variable 3 dx ? f variable 3 dx+1 ? 注意:q和s是并列的过程,所以q定义的变量b被覆盖。问答第4题 栈顶指针T,最新活动记录基地址指针B,动态链指针DL,静态链指针SL与返回地址RA的用途说明如下: T: 栈顶寄存器T指出了当前栈中最新分配的单元(T也是数组S的下标)。 B:基址寄存器,指向每个过程被调用时,在数据区S中给它分配的数据段起 始 地址,也称基地址。 SL: 静态链,指向定义该过程的直接外过程(或主程序)运行时最新数据段的基地址,用以引用非局部(包围它的过程)变量时,寻找该变量的地址。 DL: 动态链,指向调用该过程前正在运行过程的数据段基地址,用以过程执行结束释放数据空间时,恢复调用该过程前运行栈的状态。 RA: 返回地址,记录调用该过程时目标程序的断点,即调用过程指令的下一条指令的地址,用以过程执行结束后返回调用过程时的下一条指令继续执行。 在每个过程被调用时在栈顶分配3个联系单元,用以存放SL,DL, RA。 问答第5题 PL/0编译程序所产生的目标代码中有3条非常重要的特殊指令,这3条指令在code中的位置和功能以及所完成的操作说明如下: INT 0 A 在过程目标程序的入口处,开辟A个单元的数据段。A为局部变量的个数+3。 OPR 0 0 在过程目标程序的出口处,释放数据段(退栈),恢复调用该过程前正在运行的过程的数据段基址寄存器B和栈顶寄存器T的值,并将返回地址送到指令地址寄存器P中,以使调用前的程序从断点开始继续执行。 CAL L A 调用过程,完成填写静态链、动态链、返回地址,给出被调用过程的基地址值,送入基址寄存器B中,目标程序的入口地址A的值送指令地址寄存器P中,使指令从A开始执行。问答第6题 对PL/0语言作如下功能扩充时的语法图和EBNF的语法描述如下: () 扩充条件语句的语法图为: EBNF的语法描述为: 〈条件语句〉::= if〈条件〉then〈语句〉[else〈语句〉] () 扩充repeat语句的语法图为: EBNF的语法描述为: 〈 重复语句〉::= repeat〈语句〉{;〈语句〉}until〈条件〉 }
(1) G5: N→DN | E
E→0|2|4|6|8
D→E|1|3|5|7|9
(2) G5: N→AB|E
B→DB|E
A→1|2|3|4|5|6|7|8|9
E→0|2|4|6|8
D→A|0
(1) E(T E (5) E( E+T E (6) E( E+T E
(F T ( T+T E + T ( T+T E + T
(i F ( F+T T F ( F+T T T * F
i ( i+T F ( E ) ( i+T F F i
( i+F i E + T ( i+T*F i i
( i+(E) T F ( i+F*F
( i+(E+T) F i ( i+
文档评论(0)