编译原理测试及答案三
一、 单选题(每题2分,共20分)
1.在使用高级语言编程时,首先可通过编译程序发现源程序的全部______错误和部分语义
错误。
A.语法
B.语义
C. 语用
D.运行
2. 一个语言的文法是_____。
A .惟一的
B .不惟一的 C.个数有限的
3. 字母表是 {0, 1},写出以01 结尾的所有串的正规式是( )。 A. (0|1)*01 B .0*1*01 C.1*0*01 D. (01)*
4. 设有文法G[S]:S::=S*S|S+S|(S)|a ,该文法_______二义性文法。 A.是 B.不是 C.无法判断 D.可能
5. 一个句型的最左直接短语称为该句型的_______。 A.句型 B.短语 C.简单短语 D.句柄
6.在状态转换图中,结点代表____,用圆圈表示。
A.输入缓冲区
B.向前搜索
C.状态
D.字符串
7、正则式的“|”读作______。
A.并且 B 或者 C.连接 D.闭包
8、E->TE' E'->+TE'|ε T->FT' T'->*FT'|ε F-> (E)|id
FOLLOW(F)=______,FIRST(T')= {*,ε} A.{*,+} B. {#,)} C.{+,#,)} D.{*, +, #, )}
9、高级语言编译程序常用的语法分析方法中,递归下降分析法属于_____ 分析方法。 可选项有;
A. 自左至右
B.自上而下
C.自下而上
D.自右向左
10、连接编译器的前端和后端的接口是: ( )
A.TINY 语言
B. 中间语言
C.上下文无关语言
D. 中间语言
二、 判断题(每题2分,共10分,对的打√,错的打×)
1. 简单算术表达式文法中值是继承属性。
( ) 2、可识别语言}1|{ n c a n
n
的一个上下文无关文法G(S):S->aSc|ε (
)
3. LEX是用来生成词法分析程序的程序。()
4. LL(1)文法都不是二义性的。()
5. LR(0)文法不一定是SLR(1)文法。()
三、填空题(每空2分,共10分)
1、是编程语言结构的任意特性。其典型例子有:变量的数据类型和表达式的值。
2. 写出你所了解的两种中间语言表达:和。
3. 表达式-a+b*(c-d)对应的逆波兰式是。
4.标识符的正则表达式为。
四、简答题(每题6分,共30分)
1.简述编译的有哪几个阶段?各阶段的作用是什么?
2. 将正则表达式a b | a 翻译为N FA。
3. 已知表达式文法G(E):
E → E+T|T
T → T*F | F
F → (E) | i
试设计属性文法计算表达式的值。(设值属性为val)
4.将下面的算术表达式翻译成四元式。
2+(3+(4+5))
5. 程序的执行方式主要有哪两种?请各举1例。
五、综合题(每题15分,共30分)
1.对文法G[S]
S→a|∧|(T)
T→T,S|S
(1)对文法G进行改写消去左递归。
(2)经改写后的文法是否是LL(1)的?给出它的预测分析表。
2. 已知文法
A→aAd|aAb|ε
分别构造LR(0)分析表和SLR(1)分析,并判断该文法是否是LR(0)文法,是否SLR(1)文法。
编译原理答案
一、单选题(每题2分,共20分)
1 2 3 4 5 6 7 8 9 10
A B A A D C B D B B
二、判断题(每题2分,共10分,对的打√,错的打×)
1 2 3 4 5
××√√√
三、填空题(每空2分,共10分)
1.属性
2. 三地址码DAG
3. a-bcd*+
4. letter(letter|digit)*
四、简答题(每题6分,共30分)
1. 编译程序的工作一般分为五个阶段:
(1)词法分析:对源程序字符流进行扫描和分解,识别出一个个单词符号。
(2)语法分析:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位。
(3)语义分析和中间代码产生:检查源程序的语义错误(如:变量是否定义、类型是否正确等),并收集代码生成阶段要用到的类型信息。对各类不同语法范畴按
语言的语义进行初步翻译。
(4)优化:对于前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效的目标代码。
(5)目标代码产生:把中间代码变换成特定机器上的目标代码。
2. 将正则表达式a b | a 翻译为N FA。
3. 已知表达式文法G(E):
E → E+T|T
T → T*F | F
F → (E) | i
试设计属性文法计算表达式的值。(设值属性为val,i在词法分析的值存在其lexval属性中)
解:
语法规则语义规则
E → E1+T E.val=E1.val+T.val
E → T E.val=T.val
T → T1*F T.val=T1.val+F.val
T → F T.val=F.val
F → (E) F.val=E.val
F → i F.val=i.lexval