编译原理练习题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)文法。

相关文档
最新文档