编译原理练习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编译原理练习题
一、选择题
1.编译的各阶段工作都涉及()。
A.符号表管理B.词法分析C.语法分析D.语义分析
2.一个上下文无关文法消除了左递归,提取了左公共因子后是该文法满足LL(1)文法的
( )。
A.充分条件 B.必要条件 C.充要条件 D.没有关系
3.一个LR(1)文法合并同心集后若不是LALR(1)文法()。
A.则只可能存在移进/归约冲突 B.则只可能存在归约/归约冲突C.则可能同时存在移进/规约冲突和归约/归约冲突D.则没有冲突存在
4.设有文法G[S]:S→S1|S0|Sa|Sc|a|b|c,下列符号串中哪个不是该文法的句子?
()。
A. bc10
B. a0c01
C. aaa
D. ab0
5.下列哪一项不是活动记录的组成部分()。
A.返回值
B.控制链
C.代码段
D.访问链
6.词法分析器加工的对象是()。
A.源程序 B.中间代码 C. 目标代码 D. 记号流
7.正规式是()型文法。
A.0 B.1 C.2 D.3
8.文法S→aaS|abc 定义的语言是()。
A.{a2k bc|k>0} B.{a k bc|k>0}
C.{a2k-1bc|k>0} D.{a k a k bc|k>0}
9.若B为非终结符,则A→α·Bβ为()。
A.移进项目B.归约项目C.接受项目D.待约项目
10.()和代码优化部分不是每个编译程序都必需的。
A.语法分析B.中间代码生成
C.词法分析D.目标代码生成
二、填空题
1.语法分析最常用的两类方法是__ _____和____ ____分析法。
2.文法符号的属性有两种,一种称为__ ___,另一种称为__ ___。
3.三种常用的存储分配办法是分配、分配和分配。
4.像Pascal这样的语言,允许过程嵌套,并使用静态作用域,运行时访问非局部名字的时
候,可以利用来确定该非局部名字被绑定到的活动记录。
5.指令SUB *R0, *12(R1)的代价为,*R0所代表的地址为。
三、画出能被3整除的二进制串的DFA。
四、已知文法G[S]: S→SaA|bB
A→aB|c
B→Bb|d
(1)消除G[S]中的左递归为等价的文法G’[S]。
(2)构造消除左递归后的G’[S]的FIRST集和FOLLOW集,并判断G’[S]是否是LL(1)文法。
五、设有字母表{a, b}上的正规式R=(ab|a)*。
(1)构造R的NFA。
(2)构造R的DFA。
六、对于以下类C语言程序:
void exchange( x,y) { t = x; x=y; y=t;}
int x, A[10];
main()
{
x=2; A[2]=3; A[3]=5;
exchange(x, A[x]);
printf("%d %d", x, A[x]);
}
分别采用值调用,引用调用两种调用方式,请写出打印的结果。
七、对文法G[S]: S-> AB
A->+|-|ε
B->BD|D
D ->0|1
请写出对应的翻译方案,使文法输出二进制串所对应的十进制整数。
八、下面是求阶乘的Pascal程序。画出程序第3次进入函数factor时,栈中都包括哪
些过程的活动记录,并画出每个活动记录的控制链和访问链(用箭头标出,其他记
录的内容可省略)。
program fact (input, output);
var f,n: integer;
function factor(n:integer):integer;
begin
if n=0 then factor:=1
else factor:=n*factor(n-1)
end;
begin n:=5;f:=factor(n);write(f);
end.
注:program fact为主程序;function factor为在主程序中定义的函数;最后的第8行到第9行为主程序中的可执行语句。
九、文法G[S]:
S → A a | b A c | d c | b d a
A → d
请构造该文法的SLR(1)分析表,并说明该文法是不是SLR(1)文法。