编译原理复习题

158、文法G(A)如下
A→BaC | CbB
B→Ac | c
C→Bb | b
请消除其左递归。

答案:
解:令文法G(A)的非终结符排序为A,B,C
对于A,不存在直接左递归,将A带入B,代换后的B的规则为:
B→BaCc | CbBc | c
B存在直接左递归,消除B的直接左递归
B→CbBcB’ | c B’
B’ →aCcB’ | ε
将B代入C,代换后C的规则变为:
C→CbBcB’b | cB’b | b
C存在直接左递归,消除C的直接左递归
C→cB’bC’ | bC’
C’ →bBcB’b C’ | ε
所以消除G(A)的左递归后的文法为:
A→BaC | CbB
B→CbBcB’ | c B’
B’ →aCcB’ | ε
C→cB’bC’ | bC’
C’ →bBcB’b C’ | ε

159、编译过程中使用的符号表( )。
A、 必须唯一
B、 应当按符号的种属分为若干个
C、 可以唯一也可按符号的种属分为若干个
D、 不确定
答案: C
160、对编译程序所用到的符号表,涉及到的操作有( )。
A、 填写或更新信息栏内容
B、 填入新名
C、 给定名字,访问它的有关信息
D、 以上三项均有
答案: D
161、符号表由词法分析程序建立,由语法分析程序使用。
答案: 错误
162、符号表的内容在词法分析阶段填入并在以后各个阶段得到使用。
答案: 错误
163、在编译的各个阶段都要涉及到对符号表的操作。
答案: 正确
164、对一般的程序设计语言而言,其编译程序的符号表应包含哪些内容及何时填入这些信息不能一概而论。
答案: 正确
165、编译工作的相当一大部分时间是花费在查填符号表上。
答案: 正确
166、由于不用种属相应的信息不同,所以按不用种属建立不用符号表在处理上比较方便。
答案: 正确

170、堆式动态分配申请和释放存储空间遵守( )原则。
A、 先申请先释放
B、 先申请后释放
C、 后申请先释放
D、 任意
答案: D
171、动态存储分配可采用的分配方案是( )
A、 队式存储分配
B、 栈式存储分配
C、 线性存储分配
D、 链式存储分配
答案: B
172、静态存储分配允许程序出现( )
A、 递归过程
B、 可变体积的数据项
C、 静态变量
D、 待定性质的名字
答案: C
173、编译方法中,动态存储分配的含义是( )
A、 在编译阶段为源程序中的量进行分配
B、 在编译阶段为源程序中的量进行分配,运行时可动态调整
C、 在运行阶段为源程序中的量进行分配
D、 都不正确
答案: C
174、活动记录中的老SP地址是( )
A、 返回地址
B、 DISPLAY表首地址
C、 0层活动记录地址
D、 上一个活动记录地址
答案: D
175、运行阶段的存储组织与管理的目的是( )
A、 提高编译程序的运行速度
B、 为运行阶段的存储分配做准备及提高目标程序的运行速度
C、 优化运行空间的管理
D、 节省内存空间
答案: B
176、程序所需的数据空间在程序运行前就可确定,称为( )管理技术。
A、 动态存储
B、 栈式存储
C、 静态存储
D、 堆式存储
答案: C
177、程序所需的数据空间在程序运行时才能确定,称为( )管理技术。
A、 动态存储
B、 栈式存储
C、 静态存储
D、 堆式存储
答案: A
178、编译程序使用( )区分标识符的作用域。
A、 说明标识符的过程或函数名
B、 说明标识符的过程或函数的静态层次
C、 说明标识符的过程或函数的动态层次
D、 标识符的行号
答案: B
179、运行阶段的存储组织与管理的目的是( )
① 提高编译程序的运行速度 ② 节省编译程序的存储空间
③ 提高目标程序的运行速度 ④ 为运行阶段的存储分配做准备
可选项有:
A、 ①②
B、 ②③
C、 ③④
D、 ④②
答案: C
180、动态数组的存储空间在编译时就可完全确定。
答案: 错误
181、静态数组的存储空间在编译时就可完全确定。
答案: 正确
182、中间代码是介于源语言和( )之间的一种代码。
A、 源代码
B、 机器语言
C、 汇编语言
D、 目标代码
答案: D
183、中间代码生成时所依据的是( )。
A、 语法规则
B、 语义规则
C、 词法规则
D、 等价变换规则
答案: B
184、引入中间代码的目的是( )
A、 便于目标代码优化
B、 便于编译程序的移植
C、 便于目标代码的移植
D、 便于提高目标代码的质量
答案: B
185、对于任何一个编译程序而言,中间代码阶段是必不可少的。
答案: 错误
解析:可以没有中间代码生成阶段。
186、逆波兰式表示法表示表达式时无须使用括号。
答案: 正确
187、树形表示和四元式不便于优化,而三元式和间接三元式则便于优化。
答案: 错误
解析:树形表示和三元式不便于优化,而四元式和间接三元式则便于优化。
188、在编译阶段只对可执行语句进行翻译。
答案: 错误
解析:对说明语句进行翻译。
189、无论是三元式表示还是间接三元式表示的中间代码,其三元式在三元式表中的位置一旦确定就很难改变。
答案: 错误
解析:间接三元式易于改变的只是间接码表,而三元式表不易改变。

190、三元式出现的先后顺序和表达式各部分的计值顺序并不一致。
答案: 错误
解析:一致
191、后缀式和中缀式中,运算对象排列的先后顺序不同。
答案: 错误
解析:运算对象排列的先后顺序完全相同。
192、对声明的处理要构造符号表,但不产生中间代码。
答案: 错误
解析:多数声明不产生中间代码,如常量和变量的声明等,但不是所有的声明都不产生中间代码,如过程和函数的声明需要产生中间代码。
193、三元式同间接三元式是等价的。
答案: 正确
194、表达式ab-c-d e e ef-g-hi中,运算符的优先级由高到低依次为-、 , 且 均 右 结 合 , 则 相 应 的 后 缀 式 为 ( ) A 、 a b ∗ c − d − e ,且均右结合,则相应的后缀式为( ) A、 ab*c-d-e ,,()Aabcdefg-h-i$
B、 ∗ a − b − c d *a-b-cd abcde*-f-ghi
C、 bc-aefgh– D 、 a b c d − − ∗ e f g h − i ∗ D、 abcd--*efgh-i* Dabcdefghi
答案: D
195、赋值语句X:=-(a+b)/(c-d)-(a+bc)的逆波兰表示为( )
A、 xab+cd-/-bc
a±:=
B、 xab+/cd-bca±-:=
C、 xab±cd-/abc
±:=
D、 xab+cd-/abc*±-:=
答案: C
196、表达式-a-(bc/(c-d)+(-b)a)的逆波兰式表示是( )
A、 abc
cd-b-a
+/–
B、 a-bccd-b-a+/-
C、 a-bccd-/b-a±
D、 a-bc*/cd-b-a*±
答案: C
197、表达式a+b+c+d的逆波兰式表示是( )
A、 abcd+++
B、 abc+d++
C、 ab+cd++
D、 ab+c+d+
答案: D
198、假设/的优先级高于-,则采用右结合规则时,a-b/c-d可解释为( )
A、 (a-(b/c))-d
B、 a-((b/c)-d)
C、 a-d-(b/c)
D、 (b-c)-a-d
答案: B
199、表达式(┓A∨B)∧(C∨D)的逆波兰表示为( )。
A、 ┓AB∨∧CD∨
B、 A┓B∨CD∨∧
C、 AB∨┓CD∨∧
D、 A┓B∨∧CD∨
答案: B
200、表达式-a+b*(-c+d)的逆波兰式是( )
A、 ab±cd±*
B、 a-b+c-d+*
C、 a-b+cd-+*
D、 a-bc-d+*+
答案: D

  • 204、三元式之间的联系是通过( )实现的。
    A、 指示器
    B、 临时变量
    C、 符号表
    D、 程序变量
    答案: A
    205、用( )可以把a:=b+c翻译成四元式序列。
    A、 语法规则
    B、 词法规则
    C、 语义规则
    D、 等价变换规则
    答案: C
    206、四元式之间的联系是通过( )实现的。
    A、 指示器
    B、 临时变量
    C、 符号表
    D、 程序变量
    答案: B
    207、间接三元式表示法的优点( )
    A、 采用间接码表,便于优化处理
    B、 节省存储空间,不便于表的修改
    C、 便于优化处理,节省存储空间
    D、 节省存储空间,不便于优化处理
    答案: A
    208、四元式表示法的优点( )
    A、 不便于优化处理,但便于表的的更动
    B、 不便于优化处理,但节省内存空间
    C、 便于优化处理,也便于表的更动
    D、 便于表的更动,也节省存储空间
    答案: C
    209、请将表达式-(a+b)(c+d)-(a+b+c)分别表示成三元式、间接三元式和四元式序列。
    答案:
    三元式序列为
    (1) (+,a,b)
    (2) (-,_,(1))
    (3) (+,c,d)
    (4) (
    ,(2),(3))
    (5) (+,a,b)
    (6) (+,(5),c)
    (7) (-,(4),(6))
    间接三元式序列为
    三元式序列 间接三元式
    (1) (+,a,b) (1)
    (2) (-,,(1)) (2)
    (3) (+,c,d) (3)
    (4) (*,(2),(3)) (4)
    (5) (+,(1),c) (1)
    (6) (-,(4),(5)) (5)
    (6)
    四元式序列为
    (1) (+,a,b,T1)
    (2) (-,
    ,T1,T2)
    (3) (+,c,d,T3)
    (4) (*,T2,T3,T4)
    (5) (+,a,b,T5)
    (6) (+,T5,c,T6)
    (7) (-,T4,T6,T7)

解析:
三元式序列为
(1) (+,a,b)
(2) (-,,(1))
(3) (+,c,d)
(4) (*,(2),(3))
(5) (+,a,b)
(6) (+,(5),c)
(7) (-,(4),(6))
间接三元式序列为
三元式序列 间接三元式
(1) (+,a,b) (1)
(2) (-,
,(1)) (2)
(3) (+,c,d) (3)
(4) (,(2),(3)) (4)
(5) (+,(1),c) (1)
(6) (-,(4),(5)) (5)
(6)
四元式序列为
(1) (+,a,b,T1)
(2) (-,_,T1,T2)
(3) (+,c,d,T3)
(4) (
,T2,T3,T4)
(5) (+,a,b,T5)
(6) (+,T5,c,T6)
(7) (-,T4,T6,T7)

210、给出条件语句if a>b then x:=a+bc else x:=b-a;的四元式序列。
答案:
(1) if a>b goto (3)
(2) goto(7)
(3) t1:=b
c
(4) t2:=a+t1
(5) x:=t2
(6) goto(9)
(7) t3=b-a
(8) x:=t3
(9)

211、将赋值语句a:=a+bc(d+e)翻译成四元式。
答案:
① (,b,c,T1)
② (+,d,e,T2)
③ (
,T1,T2,T3)
④ (+,a,T3,T4)
⑤ (:=,T4,_,a)

解析:① (,b,c,T1)
② (+,d,e,T2)
③ (
,T1,T2,T3)
④ (+,a,T3,T4)
⑤ (:=,T4,_,a)
212、将下列语句翻译成四元式序列。
while x>y do
if x>0 then x:=x-1
else y:=y+1;
答案:
(1) if x>y goto(3)
(2) goto(11)
(3) if x>0 goto(5)
(4) goto(8)
(5) t1:=x-1
(6) x:=t1
(7) goto(1)
(8) t2:=y+1
(9) y:=t2
(10) goto(1)
(11)

解析:
213、“运算符与运算对象类型不符”属于语法错误。
答案: 错误
解析:属于语义错误
214、程序在运行时发现的错误能够反映它在源程序中的确切位置。
答案: 错误
215、算法逻辑上的错误属于静态语义错误。
答案: 错误

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值