编译原理教程课后习题答案
【篇一:编译原理教程课后习题答案——第一章】
完成下列选择题:
(1) 构造编译程序应掌握 a. 源程序 b. 目标语言
c. 编译方法 d. 以上三项都是
(2) 编译程序绝大多数时间花在上。 a. 出错处理 b. 词法分析
c. 目标代码生成 d. 表格管理 (3) 编译程序是对。
a. 汇编程序的翻译 b. 高级语言程序的解释执行 c. 机器语言的执行 d. 高级语言的翻译 【解答】
(1) d (2) d(3) d
1.2 计算机执行用高级语言编写的程序有哪些途径?它们之间的主要区别是什么?
【解答】计算机执行用高级语言编写的程序主要有两种途径:解释和编译。
在解释方式下,翻译程序事先并不采用将高级语言程序全部翻译成机器代码程序,然后执行这个机器代码程序的方法,而是每读入一条源程序的语句,就将其解释(翻译)成对应其功能的机器代码语句串并执行,而所翻译的机器代码语句串在该语句执行后并不保留,最后再读入下一条源程序语句,并解释执行。这种方法是按源程序中语句的动态执行顺序逐句解释(翻译)执行的,如果一语句处于一循环体中,则每次循环执行到该语句时,都要将其翻译成机器代码后再执行。
在编译方式下,高级语言程序的执行是分两步进行的:第一步首先将高级语言程序全部翻译成机器代码程序,第二步才是执行这个机器代码程序。因此,编译对源程序的处理是先翻译,后执行。
从执行速度上看,编译型的高级语言比解释型的高级语言要快,但解释方式下的人机界面比编译型好,便于程序调试。
这两种途径的主要区别在于:解释方式下不生成目标代码程序,而编译方式下生成目标代码程序。
1.3 请画出编译程序的总框图。如果你是一个编译程序的总设计师,设计编译程序时应当考虑哪些问题?
【解答】 编译程序总框图如图1-1所示。
作为一个编译程序的总设计师,首先要深刻理解被编译的源语言其语法及语义;其次,要充分掌握目标指令的功能及特点,如果目标语言是机器指令,还要搞清楚机器的硬件结构以及操作系统的功能;第三,对编译的方法及使用的软件工具也必须准确化。总之,总设计师在设计编译程序时必须估量系统功能要求、硬件设备及软件工具等诸因素对编译程序构造的影响等。 程序
子程序或分程序 语句 表达式 数据引用
算符函数调用
【篇二:编译原理教程课后习题答案——第四章】
txt>4.1 完成下列选择题:
(1) 四元式之间的联系是通过实现的。 a. 指示器 b. 临时变量 c. 符号表 d. 程序变量
(2) 间接三元式表示法的优点为。 a. 采用间接码表,便于优化处理 b. 节省存储空间,不便于表的修改 c. 便于优化处理,节省存储空间 d. 节省存储空间,不便于优化处理
(3) 表达式(┐a∨b)∧(c∨d)的逆波兰表示为 a. ┐ab∨∧cd∨ b. a┐b∨cd∨∧ c. ab∨┐cd∨∧ d. a┐b∨∧cd∨ (4) 有一语法制导翻译如下所示: s→bab{print″1″} a→(b {print″2″} a→a {print″3″} b→aa){print″4″}
若输入序列为b(((aa)a)a)b,且采用自下而上的分析方法,则输出序列为
a. 32224441b. 34242421 c. 12424243 d. 34442212 【解答】
(1) b (2) a (3) b (4) b
4.2 何谓“语法制导翻译”?试给出用语法制导翻译生成中间代码的要点,并用一 简例予以说明。
【解答】 语法制导翻译(sdts)直观上说就是为每个产生式配上一个翻译子程序
(称语义动作或语义子程序),并且在语法分析的同时执行这些子程序。也即在语法分析过程
中,当一个产生式获得匹配(对于自上而下分析)或用于归约(对于自下而上分析)时,此产生
式相应的语义子程序进入工作,完成既定的翻译任务。 用语法制导翻译(sdts)生成中间代码的要点如下:
(1) 按语法成分的实际处理顺序生成,即按语义要求生成中间代码。 (2) 注意地址返填问题。
(3) 不要遗漏必要的处理,如无条件跳转等。 例如下面的程序段:
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的中间代码,最后才产生“-”运算的中间代码,这种顺序不能颠倒。
4.3 令s.val为文法g[s]生成的二进制数的值,例如对输入串101.101,则s.val=5.625。按
照语法制导翻译方法的思想,给出计算s.val的相应的语义规则,g(s)如下:
g[s]: s→l.l|l l→lb|b b→0|1
【解答】 计算s.val的文法g′[s]及语义动作如下: 产生式语义动作
g′[s]:s′→s {print(s.val)} s→l { s.val:=l.val }
l→l1b {l.val:=l1.val*2 + b.val l.length:=l1.length +1} l→b{l.val:=b.val l.length:=2} b→1{b.val:=1} b→0 {b.val:=0}
4.4 下面的文法生成变量的类型说明: d→id l l→,id l|:t
t→integer|real
试构造一个翻译方案,仅使用综合属性,把每个标识符的类型填入符号表中(对所
用到的过程,仅说明功能即可,不必具体写出)。
【解答】 此题只需要对说明语句进行语义分析而不需要产生代码,但要求把每个标识符的
类型填入符号表中。对d、l、t,为其设置综合属性type,而过程enter(name,type)用来把
名字name填入到符号表中,并且给出此名字的类型type。翻译方案如下: d→id l
{enter (id.name, l.type);} l→,id l(1)
{enter (id.name, l(1).type); l.type=l(1).type;} l→:t
{l.type=t.type;} t→integer
{t.type=integer;} t→real
{t.type=real;}
过程调用语句的语义子程序。在所生成的四元式序列中,要求在转
相关推荐: