- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理教程课后习题答案
【篇一:编译原理教程课后习题答案——第一章】
完成下列选择题:
构造编译程序应掌握
a. 源程序 b. 目标语言
c. 编译方法 d. 以上三项都是
编译程序绝大多数时间花在上。
a. 出错处理 b. 词法分析
c. 目标代码生成 d. 表格管理
编译程序是对。
a. 汇编程序的翻译 b. 高级语言程序的解释执行
c. 机器语言的执行 d. 高级语言的翻译
【解答】
(1) d (2) d(3) d
计算机执行用高级语言编写的程序有哪些途径?它们之间的主要 区别是什么?
【解答】计算机执行用高级语言编写的程序主要有两种途径:解释 和编译。
在解释方式下,翻译程序事先并不采用将高级语言程序全部翻译成机器代码程序,然后执行这个机器代码程序的方法,而是每读入一条源程序的语句,就将其解释(翻译)成对应其功能的机器代码语句串 并执行,而所翻译的机器代码语句串在该语句执行后并不保留,最后再读入下一条源程序语句,并解释执行。这种方法是按源程序中语句的动态执行顺序逐句解释(翻译)执行的,如果一语句处于一循环 体中,则每次循环执行到该语句时,都要将其翻译成机器代码后再执行。
在编译方式下,高级语言程序的执行是分两步进行的:第一步首先 将高级语言程序全部翻译成机器代码程序,第二步才是执行这个机器代码程序。因此,编译对源程序的处理是先翻译,后执行。
从执行速度上看,编译型的高级语言比解释型的高级语言要快,但 解释方式下的人机界面比编译型好,便于程序调试。
这两种途径的主要区别在于:解释方式下不生成目标代码程序,而 编译方式下生成目标代码程序。
请画出编译程序的总框图。如果你是一个编译程序的总设计师, 设计编译程序时应当考虑哪些问题?
【解答】 编译程序总框图如图 1-1 所示。
作为一个编译程序的总设计师,首先要深刻理解被编译的源语言其语法及语义;其次,要充分掌握目标指令的功能及特点,如果目标语言是机器指令,还要搞清楚机器的硬件结构以及操作系统的功能; 第三,对编译的方法及使用的软件工具也必须准确化。总之,总设计师在设计编译程序时必须估量系统功能要求、硬件设备及软件工具等诸因素对编译程序构造的影响等。
程序
子程序或分程序语句
表达式 数据引用
算符函数调用
【篇二:编译原理教程课后习题答案——第四章】
txt4.1 完成下列选择题:
四元式之间的联系是通过实现的。
a. 指示器 b. 临时变量
c. 符号表 d. 程序变量
间接三元式表示法的优点为。
采用间接码表,便于优化处理
节省存储空间,不便于表的修改
便于优化处理,节省存储空间
节省存储空间,不便于优化处理
表达式(┐a∨ b)∧ (c∨ d)的逆波兰表示为
a. ┐ab∨ ∧ cd∨ b. a┐b∨ cd∨ ∧
c. ab∨ ┐cd∨ ∧ d. a┐b∨ ∧ cd∨
有一语法制导翻译如下所示:
s→bab{print″1″} a→(b {print″2″} a→a {print″3″} b→aa){print″4″}
若输入序列为 b(((aa)a)a)b,且采用自下而上的分析方法,则输出序列为
a..c.d.【解答】
(1) b (2) a (3) b (4) b
何谓“语法制导翻译”?试给出用语法制导翻译生成中间代码的 要点,并用一
简例予以说明。
【解答】 语法制导翻译(sdts)直观上说就是为每个产生式配上一个翻译子程序
(称语义动作或语义子程序),并且在语法分析的同时执行这些子程序。 也即在语法分析过程
中,当一个产生式获得匹配(对于自上而下分析)或用于归约(对于自 下而上分析)时,此产生
式相应的语义子程序进入工作,完成既定的翻译任务。 用语法制导翻译(sdts)生成中间代码的要点如下:
按语法成分的实际处理顺序生成,即按语义要求生成中间代码。
注意地址返填问题。
不要遗漏必要的处理,如无条件跳转等。例如下面的程序段:
if (i0) a=i+e-b*d; else a=0;
在生成中间代码时,条件“i0”为假的转移地址无法确定,而要等到 处理“else”时方可确
定,这时就存在一个地址返填问题。此外,按语义要求,当处理完
(i0)后的语句(即“i0”为
真时执行的语句)时,则应转出当前的 if 语句,也即此时应加入一条无条件跳转指令,并且
这个转移地址也需要待处理完 else 之后的语句后方可获得,就是说同样存在着地址返填问
题。对于赋值语句 a=i+e-b*d,其处理顺序(也即生成中间代码顺序)
是先生成 i+e 的代码,再
生成 b*d 的中间代码,最后才产生“-”运算的中间代码,这种顺序不能颠倒。
令s.val 为文法 g[s]生成的二进制数的值,例如对输入串1
文档评论(0)