编译原理与技术01
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编译原理与技术模拟试题一
一、填空题(20分)
1.1编译程序的工作过程可划分为词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成等
阶段,一般在语义分析阶段对表达式中运算对象的类型进行检查。
1.2 递归下降法和预测分析法是自上而下的语法分析方法。
1.3常用日的存储分配策略有静态存储分配和动态存储分配,其中,动态存储分配策略包括栈分配和堆分配。
1.4移进、归约是自下而上或LR 分析中的典型操作。
1.5对于数组M[1..6, 1..8],如果每个元素占k个存储单元,且起始地址为a,则以行为主序存放时元素M[4,4]的地址是__ a+27*k __,以列为主序存放时元素M[4,4]的地址是__ a+21k __。
二、单选题(20分)
2.1词法分析器不能 D 。
A. 识别出数值常量
B. 过滤源程序中的注释
C. 扫描源程序并识别记号
D. 发现括号不匹配
2.2给定文法A→bA|ca, C 是该文法的句子。
A. bba
B. cab
C. bca
D. cba
2.3一个句型中的最左 B 称为该句型的句柄。
A. 短语
B. 直接短语
C. 非终结符号
D. 终结符号
2.4已知文法G[S]:S→A1A→A1|S0|0。与G等价的正规式是 C 。
A. 0(0|1)*
B. 1*|0*1
C. 0(1|10)*1
D. 1(10|01)*0
2.5源程序是句子的集合, B 可以较好地反映句子的结构。
A. 线性表
B. 树
C. 完全图
D. 堆栈
2.6与逆波兰式ab+c*d+对应的中缀表达式是 B 。
A. a+b+c*d
B. (a+b)* c+d
C. (a+b)* (c+d)
D. a+b*c+d
2.7识别上下文无关语言的自动机是 A 。
A. 下推自动机
B. NFA
C. DFA
D. 图灵机
2.8 B 是与规范归约(最左归约)互逆的一个过程。
A. 最左推导
B. 最右推导
C. 词法分析
D. 语义分析
2.9文法G产生的 A 的全体是该文法描述的语言,
A. 句子
B. 短语
C. 终结符
D. 非终结符
2.10在表达式x:=y+1中, A 作为左值出现(其中,“:=”表示赋值)。
A. x
B. y
C. 1
D. y+1
三、简答题(30分)
3.1 (5分)请分别写出传值调用、引用调用方式下,下面代码的输出结果。
program main(input,output)
procedure f(a,b)
begin
a :=
b - a;
b := a * b + 1;
end;
begin
x := 5; y := 10;
f(y,x);
print(x,y);
end.
3.1
传值调用方式:5 10 引用调用方式:-24 -5
3.2 (10分)请计算下面文法G(E)中各非终结符的FIRST 和FOLLOW 集合。请说明该文法为什么不是LL(1)文法。
G(E):E →E
* T | T T →T - F | F F →(E) | id 3.2
FIRST(F) = FIRST(T) = FIRST(E) = { (,id }
FOLLOW(E) = {#,*,)} FOLLOW(T) = {-, *, #,) } FOLLOW(F) = {-, *, #,) }
3.3(10分)下图所示的分析树用到了某个上下文无关文法的所有产生式。 (a) 给出该文法的所有非终结符号集合N 和终结符号集合T 。 (b) 给出该文法的产生式集合。
S
ε
A a
B b S c A c b B d c
3.3
N = {S, A, B} T = {a, b, c, d}
S → aAcB | Bd A → AaB | c B → bScA | b | ε
3.4(5分)某程序执行到某一时刻时控制栈中的内容如下所示(其中M 是主程序,P 、Q 、R 、S 均是过程),给出所有在生存期的活动的调用关系(提示:若A 调用B ,则记为A →B)。
3.4
M → P → R → Q → S → S
四、综合题(40分)
4.1(15分)设有正规式r=1(0|1)*
1,试给出: (a )(5
分)识别该正规集的NFA ;
(b )(10分)识别该正规集的DFA (要有计算过程);
4.1 (a)NFA 如下图所示
(b) s0 = {A}
ε_闭包(s0) = s0 初态
ε_闭包(smove(s0,1)) = {B} 记为s1
ε_闭包(smove(s1,0)) = {B} = s1
ε_闭包(smove(s1,1)) = {B,C} 记为s2,终态
ε_闭包(smove(s2,0)) = {B} = s1
ε_闭包(smove(s2,1)) = {B,C } = s2
DFA如下图所示
4.2(15分)设有上下文无关无法G及其语法制导翻译如下(注:G中终结符id仅由单个英文字母组成,如a, b等):
E→E1*T {E.place=newtemp; emit(*, E1.place, T.place, E.place;}
| T {E.place=T.place;}
T→T1-F {T.place=newtemp; emit(-, T1.place, F.place, T.place;}
| F {T.place=F.place;}
F→(E) {F.place=E.place;}
| id {F.place=;}
(a)(4分)画出句子a-b*c的分析树;
(b)(3分)写出当a=1、b=2、c=3时的计算结果;(*表示算术乘、-表示算术减)
(c)(8分)将文法G简化为:E→E*T|T,T→T-F|F,F→id,给出其识别活前缀的DFA,该DFA的项目集中有冲突吗?若有,是哪种类型的冲突。
4.2(a)
E
E*T
T-F
T
F a b
F
c
(b) -3
(c)拓广文法,增加产生式:S→E,识别活前缀的DFA如下图所示
存在移进-归约冲突