编译原理A
一、不定项选择题(每题5分,共8题,计40分)
1. 下面说法错误的有(CD)。
A、编译前端完成对源程序的分析
B、编译后端对源程序进行综合
C、编译器等同于解释器
D、编译器可以发现源程序的全部语法错误和全部语义错误
2. 下面(ACD )是编译程序的组成部分。
A、词法分析程序
B、设备管理程序
C、语法分析程序
D、代码生成程序
3. 不属于下面正规式定义的语言集合的元素有( C  )。这里,id是字母开头,后跟字母或数字的,长度不超过10的字符串形式。
( int | float | double ) id (, id )* ;
A、int a;
B、int a,b,d;
C、float xyz abc;
D、double m;
4. C语言编译中的存储分配策略是(  B  )。
A、静态存储分配策略
B、动态存储分配策略
C、最佳分配策略
D、时钟分配策略
5. Java编译器生成的是(  BCD  )。
A、Javac
B、.class文件
C、Bytecode
D、字节码
6. 文法G(E): E → i | E+E | E*E | (E)  不可以产生的句子是( CD  )。
A、(i)
B、i*(i+i)+(i*i)
C、i++
D、(i+())
7. 常用的中间代码表示形式有(  ABC  )。
A、后缀表示
B、图形表示
C、三地址码
D、中缀表示
8. 在编译过程中,符号表的主要作用有(  CD  )。
A、帮助错误处理
B、辅助语法错误的检查
C、辅助语义的正确性检查
D、辅助代码生成
E、辅助对目标程序的优化
二、判断题(每题2分,共10题,计20分,写对或错)
1. 编译的整个过程都要包括符号表管理和出错管理两个部分。(对)
2. 文法E → E + id | id是SLR(1)文法也是LR(1)文法。(对)
3. 对任何一个编译程序来说,产生中间代码是不可缺少的一部分。( 错  )
4. 如果一种程序语言允许数据对象能够自由地分配和释放,就需要采用堆式存储分配方法。(对)
5. 正规文法、正规式、确定有限自动机和非确定有限自动机在接收语言的能力上是互相等价的。(对)
6. 正规式能用于描述配对或嵌套的结构。(错)
7. 算符作用于不相容的运算对象,这属于语法错误。(错)
8. LR分析中四个文法的关系是LR(1)⊃ LALR(1)⊃ SLR(0)⊃ LR(0)。(对)
9. 后缀表示的优点是便于计算机处理表达式。(对)
10. 基本块是连续的语句序列,控制流从它的开始进入,从它的末尾离开。(对)
三、填空题(每题10分,共4题,计40分)
1. 为下面文法写一个语法制导的定义,它完成一个句子的while-do最大嵌套层次的计
算并输出这个计算结果。在括号处填上每句文法对应的方案。
S → E                    ({ print(S.loop);})
E → while E do E          ({ E.loop := max(E1.loop, E2.loop) +1;} )
| id := E            ({ E.loop := E1.loop;} )
| E + E              ({ E.loop := max(E1.loop, E2.loop);} )
| id                  ({ E.loop := 0;} )
| (E)                    此句文法不写
2. 正规式的三个基本运算符是( | ),( . )和(*),优先级最高的运算符是( *),优先级最低的运算符是( |)。
3. 对下面的文法G(S),若对句子 *i1=i2进行规范归约,其符号栈的操作步骤是(移入*,移入i1,i1归约为V,V归约为E,*E归约为V,移入=,移入i2,i2归约为V,V归约为E,V=E 归约为S。)。
S →V=E | E
V → *E | i
E → V
4. 对于下面C语言文件,某编译器编译时对函数f1有警告错误,提示内容是warning:  declaration of ‘x’ shadows a parameter。对函数f2没有类似的警告错误的原因是(对于函数f1,局部变量x声明的作用域是整个函数体,导致在函数体中不可能访问形式参数x,由于这是一个合法的C语言函数,因此编译器给出警告错误;对于函数f2,由于局部变量x 的作用域只是函数体的一部分,不会出现上述问题,因而编译器不报错。)。
f1(int x)
{
long x;
x = 1;
}
f2(int x)
{
{
long x;
x = 1;
}
}
编译原理B
一、不定项选择题(每题5分,共8题,计40分)
1. 属于正规式(a|b)(0|1|2)*(a|b)定义的语言集合的元素有(ABD)。
A、a0a
B、aa
C、abda
D、a012b
2. 用l代表字母,d代表数字,定义标识符单词的正规式有(  C )。
A、ld*
B、ll
C、l(l|d)*
D、ll*|d*
3. 编译器生成的目标代码的主要形式有(ABC)。
A、可立即执行的机器语言代码
B、汇编语言程序
C、待装配的机器语言代码模块
D、抽象语法树程序
4. LR语法分析栈中存放的状态是识别(  B )的DFA状态。
A、前缀
B、活前缀
C、项目
D、句柄
5. 已知文法G(S)如下,该文法是(CD )。
S → LaR|R
编译器错误
L → bR|c
R → L
A、LR(0)文法
B、SLR(1)文法
C、LR(1)文法
D、LALR(1)文法
6. 编译过程中,以下属于语法分析器的任务的有(BCD)。
A、分析单词是怎样构成的
B、分析单词串是如何构成语句和说明的
C、分析语句和说明是如何构成程序的
D、分析程序的结构
7. 影响编译器存储分配策略的语言特征有(ABCD)。
A、过程能否递归
B、过程能否访问非局部变量
C、存储块是否必须显式地释放
D、存储块是否在程序控制下动态地分配
8. 一般程序设计语言都涉及(ABC)几个方面。
A、语法
B、语义
C、语用
D、程序基本符号的确定
二、判断题(每题2分,共10题,计20分,写对或错)
1. 自上向下语法分析遇到的主要困难是左递归带来的无限循环和回溯。(对)
2. 下面所示的文法是LALR(1)文法。(对)
S → V = E | E
V → E | id
E → V
3. 通常程序设计语言的中的单词符号都能用正规式描述。(对)
4. 因为名字都是用标识符表示的,故名字与标识符没有区别。(错)
5. 现今的程序语言一般用上下文无关文法来描述。(对)
6. 算术表达式的括号不匹配属于语法错误。(对)
7. LALR分析中,同心集的和并不会引起新的移进-归约冲突。(对)
8. (8-4)+2的后缀表示是8 4 – 2 + 。(对)
9. 代码优化环节中,代码变换可以改变程序的含义。(错)
10. 句柄的右边仅含终结符。如果文法二义,那么句柄可能不唯一。(对)
三、填空题(每题10分,共4题,计40分)