编译原理习题及答案(整理后) 联系客服

发布时间 : 星期四 文章编译原理习题及答案(整理后)更新完毕开始阅读ddf7e3777fd5360cba1adb58

2、

①表达式的四元式序列: ②表达式的三元式序列 ③间接三元式序列 (1)(-,C,D,T1) (1)(-,C,D) ⑴ (1)(-,C,D) (2)(*,B,T1,T2) (2)(*,B,(1)) ⑵ (2)(*,B,(1)) (3)(+,A,T2,T3) (3)(+,A,(2)) ⑶ (3)(+,A,(2)) (4)(-,C,D,T4) (4)(-,C,D) ⑴ ⑷ (↑,(1),N) (5)(↑,T4,N,T5) (5)(↑,(4),N) ⑷ ⑸ (/,E,(4)) ⑹ (/,E,T5,T6) ⑹ (/,E,(5)) ⑸ ⑹ (+,(3),(5)) ⑺ (+,T3,T6,T7) ⑺ (+,(3),(6)) ⑹

第八章

一、单项选择题

1、编译程序使用 区别标识符的作用域。 a. 说明标识符的过程或函数名 b. 说明标识符的过程或函数的静态层次 c. 说明标识符的过程或函数的动态层次 d. 标识符的行号 2、在目标代码生成阶段,符号表用于 。 a. 目标代码生成 b. 语义检查 c. 语法检查 d. 地址分配 3、过程信息表不包含 。

a. 过程入口地址 b. 过程的静态层次 c. 过程名 d. 过程参数信息 4、下列关于标识符和名字叙述中,正确的是 。 a. 标识符有一定的含义 b. 名字是一个没有意义的字符序列 c. 名字有确切的属性 d. a~c都不正确

二、多项选择题

1、符号表的每一项均包含 。 a. 名字栏 b. 类型栏 c. 信息栏 d. 值栏 e. a~d均包含 2、对编译程序所用到的符号表,涉及的操作有 。 a. 填写或更新信息栏内容 b. 填入新名 c.给定名字,访问它的有关信息 d. 杂凑技术 e.线性表和排序二叉树 3、源程序中的错误一般有 。 a. 词法错误 b. 语法错误 c. 语义错误 d. 编译错误 e. 违反环境限制的错误

三、填空题

1、符号表中名字栏内容有两种填写方式,它们是 填写和 填写。 2、词法分析阶段的错误主要是 ,可通过 的办法纠正错误。 3、符号表中名字的有关信息在 和 过程中陆续填入。 4、在目标代码生成阶段,符号表是 的依据。 四、问答题:

1、在编译过程中为什么要建立符号表? 单选解答:1、b 2、d 3、b 4、c

多选解答:1、a 、c 2、a、b、c 3、a、b、c、e

填空解答:1、标识符 标识符地址及长度2、拼写错误 最小距离匹配 3、词法分析 语法语义分析

4、地址分配 问答题解答:

在编译过程中始终要涉及到对一些语法符号的处理,这就需要用到语法符号的相关属性。为了在需要时能找到这些语法成分及其相关属性,就必须使用一些表格来保存这些语法成分及其属性,这些表格就是符号表。

第九章

一、单项选择题

1、程序所需的数据空间在程序运行前可确定,称为 管理技术。 a. 动态存储 b. 栈式存储 c. 静态存储 d. 堆式存储

2、堆式动态分配申请和释放存储空间遵守 原则。 a. 先请先放 b. 先请后放 c. 后请先放 d. 任意 3、静态分配允许程序出现 。

a. 递归过程 b. 可变体积的数据项目 c. 静态变量 d. 待定性质的名字 4、在编译方法中,动态存储分配的含义是 。

a. 在运行阶段对源程序中的数组、变量、参数等进行分配 b. 在编译阶段对源程序中的数组、变量、参数进行分配

c. 在编译阶段对源程序中的数组、变量、参数等进行分配,在运行时这些数组、变量、参数的地址可根据需要改变 d. 以上都不正确

5、在编译时有传名功能的高级程序语言是 。 a. Fortran b. Basic c. Pascal d. ALGOL

6、栈式动态分配与管理在过程返回时应做的工作有 。 a. 保护SP b. 恢复SP c.保护TOP d. 恢复TOP 二、多项选择题

1、下面 需要在运行阶段分配存储空间。 a. 数组 b. 指针变量 c.动态数组 d. 静态变量 e. 动态变量 2、栈式动态分配允许 。 a. 递归过程 b. 分程序结构 c. 动态变量 d. 动态数组 e. 静态数组

3、动态存储分配可采用的分配方案有 。 a. 队式存储分配 b.栈式存储分配 c.链式存储分配 d. 堆式存储分配 e.线性存储分配

4、栈式动态分配与管理因调用而进入过程之后,要做的工作是 。 a. 定义新的活动记录的SP b. 保护返回地址 c. 传递参数值 d. 建立DISPLAY表 e. 定义新的活动记录的TOP 5、静态分配不允许程序出现 。 a.递归过程 b. 静态数组 c.可变体积的数据项目 d. 待定性质的名字 e. 静态变量 6、活动记录包括 。 a. 局部变量 b. 连接数据 c. 形式单元 d. 局部数组的内情变量 e. 临时工作单元

三、填空题

1、FORTRAN语言采用了 存储空间分配方案,其程序所需的存储空间在 时确定。 2、一个函数的活动记录体积在 时确定,数组内情向量表的体积在 时确定, 3、目标程序运行的动态分配策略中,含有 和 分配策略

4、在Pascal中,由于允许用户动态地申请与释放内存空间,所以必须采用 存储分配技术。 5、如果两个临时变量名 不相交,则它们可分配在同一单元中。 6、堆式动态分配策略允许用户动态的 和 存储空间。 单选解答1、c 2、d 3、c 4、a 5、d 6、b

多选解答 1、c e 2、a b d e 3、b d 4、abde 5、acd 6、abcde 填空解答

1、静态 编译 2、编译 编译 3、栈式 堆式 4、堆式 5、作用域 6、申请 释放

第十章

一、单项选择题

1、优化可生成 的目标代码。

a.运行时间较短 b.占用存储空间较小 c.运行时间短但占用内存空间大 d.运行时间短且占用存储空间小 2、下列 优化方法不是针对循优化进行的。 a.强度削弱 b.删除归纳变量 c.删除多余运算 d.代码外提 3、基本块内的优化为 。 a.代码外提,删除归纳变量 b.删除多余运算,删除无用赋值

c.强度削弱,代码外提 d.循环展开,循环合并 4、关于必经结点的二元关系,下列叙述中不正确的是 。 a.满足自反性 b.满足传递性 c.满足反对称性 d.满足对称性 5、对一个基本块来说, 是正确的。 a.只有一个入口语句和一个出口语句 b.有一个入口语句和多个出口语句

c.有多个入口语句和一个出口语句 d.有多个入口语句和多个出口语句 6、在程序流图中,我们称具有下述性质 的结点序列为一个循环。 a.它们是非连通的且只有一个入口结点 b.它们是强连通的但有多个入口结点

c.它们是非连通的但有多个入口结点 d.它们是强连通的且只有一个入口结点 7、 不可能是目标代码。 a.汇编指令代码 b.可重定位指令代码 c.绝对指令代码 d.中间代码 二、多项选择题

1、根据优化所涉及的范围,可将优化分为 。 a.局部优化 b.过程优化 c.全局优化

d.循环优化 e.四元式优化 2、下列优化中,属于循环优化的有 。 a.强度削弱 b.合并已知量 c.删除无用赋值

d.删除归纳变量 e.代码外提

3、如果a→b是程序流图中的一条边,则由这条回边构成的循环由 结点组成。 a.a b.b c.有通路到达b的结点

d.有通路到达a且该通路上不经过b的结点 e.有通路到达b且该通路上不经过a的结点 4、采用无环有向图(DAG),可以实现的优化有 。 a.合并已知量 b.删除公共子表达式 c.强度削弱

d.删除无用赋值 e.删除归纳变量

5、编译程序的输出结果可以是 。 a.目标代码 b.汇编语言代码 c.中间代码

d.优化后的中间代码 e.可重定位代码

三、填空题 1、局部优化是 范围内进行的一种优化。

2、在一个基本块内,可实行3种优化方法,即合并已知量、 、 。 3、优化就是对程序进行各种 变换,使之能生成更有效的 。 4、在优化中,可把循环中的 提到循环外面去,这种方法称为 。 单选[解答]

1、优化的目的是使目标程序运行时间短、占用存储空间小,故选d。

2、删除多余运算属基本块优化,故选c。

3、基本块优化包括:合并已知量、删除无用赋值及删除多余运算,故选b。 4、必经结点满足自反性、传递性和反对称性关系,故选d。 5、选a。 6、选d。 7、选d。 多选[解答] 1、选a、c、d。

2、循环优化包括:代码外提、强度削弱、删除归纳变量、循环展开和循环合并,故选a、b、e。

3、如果a→b是回边,则该回边的构成的循环由结点a、b和能够到达a但通路不经过b的结点组成;故选a、b、d。

4、DAG图可进行基本块范围内的优化,故选a、b、d。 5、选b、c、d、e。 填空[解答] 1、基本块

2、删除无用赋值 删除多余运算 3、等价 目标代码 4、不变运算 代码外提