编译原理mooc结课考试及参考答案

本次考试仅有一次作答机会,共 26 道题,总分 100 分,需要在120分钟内完成。试题均为客观题(判断题、单选题、多选题)。考试截止前,请大家不要在讨论区讨论考试题目。谢谢!

1判断(3分)

在程序中,各种名字是用标识符表示的,所以名字和标识符没有本质区别。

  • A.√
  • B.×

2判断(3分)

一个句型的直接短语是唯一的。

  • A.√
  • B.×

3判断(3分)

文法的二义性和语言的二义性是两个不同的概念。

  • A.√
  • B.×

4判断(3分)

对任何正规集V,都存在一个NFA M,满足L(M)=V。

  • A.√
  • B.×

5判断(3分)

对于一个含有左递归的文法,存在与之等价的不含左递归的文法。

  • A.√
  • B.×

6判断(3分)

S-属性文法也是L-属性文法。

  • A.√
  • B.×

7判断(3分)

数组元素的地址计算代码的翻译与数组的存贮方式有关。

  • A.√
  • B.×

8判断(3分)

属性文法描述了语言的语义规则,翻译模式则给出了根据语义规则进行计算的实现细节。

  • A.√
  • B.×

9判断(3分)

活动记录的建立和撤销发生在编译阶段。

  • A.
  • B.

10判断(3分)

循环中的不变运算在优化时都可以被提到循环之外。

  • A.√
  • B.×

11单选(4分)

识别的字集为“包含奇数个1和奇数个0的二进制数串”的DFA是

  • A.
  • B.
  • C.
  • D.

12单选(4分)

下列文法中,生成的语言是

的是

  • A.G(S):         S → ABCD     A → aA | a        B → bB |b       C → cC |c                   D → dD | d
  • B.G(S):                   S → AC                   A → aAb | ab                   C → cCd | cd
  • C.G(S):                   S → aSd | A                   A → bAc | bc
  • D.G(S):                   S → aSb | A                   A → cAd | cd

13单选(4分)

对于文法G(S):

S → BA

A → BS | d

B → aA | bS | c

该文法非终结符A的 FIRST集合是

  • A.FIRST(A) = { d }
  • B.FIRST(A) = { c,d }
  • C.FIRST(A) = { b,c,d }
  • D.FIRST(A) = { a,b,c,d }

14单选(4分)

对于文法G(S):

S → BA

A → BS | d

B → aA | bS | c

该文法对应的预测分析表是

  • A. abcd#S     A   A → d BB → aAB → bSB → c  
  • B. abcd#S  S→ BA  A  A→ BSA → d BB → aAB → bSB → c  
  • C. abcd#S S → BAS→ BA  A A → BSA→ BSA → d BB → aAB → bSB → c  
  • D. abcd#SS → BAS → BAS→ BA  AA → BSA → BSA→ BSA → d BB → aAB → bSB → c  

15单选(4分)

文法G(S):

S → aTb | ,

T → R

R → R/S | S

的句型aR/aSb/aTb/,b 的最左素短语是

  • A.aTb
  • B.aSb
  • C.S
  • D.,

16单选(4分)

对于文法G(S’):

(0) S’ → S

(1) S → aS

(2) S → bS

(3) S → a

该文法的LR分析表如下:

下面是输入串aba#的LR分析过程的0~4步的格局,第5步的格局是

步骤状态栈符号栈输入串
00#aba#
101#aba#
2012#aba#
30121#aba#
40125#abS#
5   

17单选(4分)

考虑下面的属性文法G(S):

对于输入字符串aabbbc进行语法分析和属性计算,输出结果是

  • A.1    2    3
  • B.3    2    1
  • C.2    3    1
  • D.2    1    3

18单选(4分)

将语句

while  (A>B) Ú (B<C)   do

    if  (D>0)  then B:=C+D

else B:=C+1;

翻译成下面的四元式序列

100    (j>, A, B, 104)

101    (j, -, -, 102)

102    (j<, B, C, 104)

103    (j, -, -, 112)

104                     

105    (j, -, -, 109)

106    (+, C, D, T1)

107    (:=, T1, -, B)

108    (j, -, -, 100)

109    (+, C, 1, T2)

110    (:=, T2, -, B)

111     (j, -, -, 100)

112    

其中空白处应该填写:

  • A.(j>, D, 0, 102)
  • B.(j>, D, 0, 106)
  • C.(j>, D, 0, 108)
  • D.(j>, D, 0, 111)

19单选(4分)

考虑下面的类PASCAL的嵌套过程语言程序,对于过程调用序列 S →Q→E→P 的情况,过程P的活动记录中的 Display 表为:

Program S(input,output);

              var a,x:integer;

              Procedure E;

                   Function P: integer;

                                 var i,j:integer;

                                 begin …

                                        …

                                 end{P};

              begin

                       …

              end {E};

              Procedure Q;

              var k, v:integer;

              begin

                       …

              end{Q};

begin …

              …

end{S}.

20单选(4分)

假设H是基本块出口的活跃变量, R0和R1是可用寄存器,对下列四元式组成基本块:

A:=B*C

D:=E+A

G:=B+C

H:=G/D

生成目标代码如下:

LD               R0               B

MUL            R0               C

LD               R1               E

ADD            R1               R0

LD               R0               B

ADD            R0               C

ST               R0               H

其中空白处的代码为

  • A.DIV              R1               R0
  • B.DIV              R0               R1
  • C.DIV              R1               D
  • D.DIV              R0               D

21多选(5分)

下面哪些文法是无二义文法

  • A.LL(1)文法
  • B.算符文法
  • C.算符优先文法
  • D.LR文法

22多选(5分)

对于文法G(S’),该文法识别活前缀的DFA如下图,状态I2包含的项目有

G(S’):

(0)  S’ → S

(1)  S → Pa

(2)  S → Pb

(3)  S → c

(4)  P → Pd

(5)  P → Se

(6)  P → f

  • A.S → PŸa
  • B.S → PŸb
  • C.S → PŸc
  • D.S → PŸd

23多选(5分)

一个目标程序运行所需的存储空间包括

  • A.存放目标代码的空间
  • B.存放数据项目的空间
  • C.存放程序运行的控制或连接数据的空间
  • D.存放程序运行时动态申请的存储空间

24多选(5分)

对于下面程序段

program  test (input, output) ;

                    var  i, j: integer;

                    procedure  calculate(x, y: integer);

                    begin

                    y:=y*y;  x:=x-y;  y:=y-x

                    end;

          begin

                    i:=2;  j:=3;  calculate(i, j)

                    writeln(j)

          end.

若程序执行的输出结果为16,能够产生该结果的参数传递方法有

  • A.传值
  • B.传地址
  • C.得结果
  • D.传名

25多选(5分)

设有基本块如下:

T1:=A+B

T2:=3

M:=T2*4

T3:=C-D

T4:=M+T3

N:= C-D;

L:=T1*T3

T4:=A+B

N:=T4

假设L、M和N 是出基本块后的活跃变量,对于上述程序可以采取的局部优化措施有

  • A.删除公共子表达式
  • B.删除无用赋值
  • C.合并已知量
  • D.代码外提

26多选(5分)

对以下四元式程序,对其中循环进行优化,可采取的循环优化措施有

S := 0

K := 1

L1: A := J+100

C := A * K

S := S + C

if K = 100 goto L2

K := K + 1

goto L1

L2: …

  • A.合并已知量
  • B.代码外提
  • C.强度消弱
  • D.删除归纳变量
© 版权声明
THE END
喜欢就支持以下吧
点赞1赞赏
分享
评论 抢沙发

请登录后发表评论