五套编译原理期末考试试卷及答案(2)

2020-06-16 21:42

A→a {print “3”}

B→Aa) {print “4”}

(3) 当输入序列为 b(((aa)a)a)b 时,打印的字符串是什么?(4) 写出移入-规约分析过程。

5. (12 分)翻译循环语句 while (x>y) do if (a=b) then x:=2*y+a 。要求:给出加注释的分析树、三地址码序列及相应的四元式序列。

参考以下部分翻译模式:

(1) S→if E then M S1 {backpatch(E.truelist,M.quad);

S.nextlist:=merge(E.falselist,S1 .nextlist)}

(2) S→while M1 E do M2 S1 {backpatch(S1.nextlist,M1,.quad);

backpatch(E.truelist,M2,.quad); S.nextlist:=E.falselist emit (‘j,-,-,’M1 .quad)} {S.nextlist:=makelist()} {L.nextlist:=S.nextlist} {M.quad:=nextquad}

{E.truelist:=makelist(nextquad); e.falselist:=makelist(nextquad+1);

(3) S→A (4) L→S (5) M→ε

(6) E→id1 relop id2

emit(‘j’relop.op,‘,’id1.place ‘,’id2.place‘,’‘0’);

emit(‘j,-,-,0’)}

(7) S→L:=E

{emit(:=,E.place,-,L.place)}

(8) E→E1+E2{E.place:=newtemp;

emit(+,E1.place,E2.place,E.place,)}

6. (8 分) Generate assembly code for the following sequence assuming that x,y and z are in

memory locations(noticing only two registers R1 and R2).

S=0

I=0

L1: if x>y goto L2

Z=s+a[i]

I=i+1 Goto L1

L2:

7. (6 分) Give out the all basic blocks of the following program fragment and construct the relevant flow graph(DAG).

read C A=0 B=1

L4: A=A+B

if B>C goto L2 B=B+1

goto L4

L2: write A

8. (8 分)Translate the assignment statement b[i]=b*c-b*d into

(1) A syntax tree.

(2) Three address instructions.

答案::

(1) 栈式动态存储分配

(2) 堆式动态存储分配

(3) 左

(4) 语法分析

(5) 目标代码生成

(6) 表格管理

(7) xyz*ab+/+

(8) 继承属性

(9) a+(i-1)*20+j-1 (10) 基本块

一、 选择题(每问 2 分,共 20 分)

1.C B 2.D 3.B 4.A 5.D 6.A,C

7.BCD,选对一个得 1 分且不超过满分,选错一个扣一分,扣完为止。 8.BCD,选对一个得 1 分且不超过满分,选错一个扣一分,扣完为止。 二、

解答题

1.(1)文法存在左递归,消除左递归后的文法为:

E→(E)E’|i E’(2 分) E’→TEE’|ε (2 分) T→*|+

(1 分)

(2)(5 分)没考虑#扣 0.5 分,其它错或少写一个扣 0.5 分

FIRST(E)={(,i} FIRST(E’)={*,+, ε} FIRST(T)={*,+} FOLLOW(E)={),*,+,#} FOWLLOW(E’)= {),*,+,#} FOLLOW(T)={(,i}

(3)每错一个扣 0.5 分,全错或不写不得分,扣完为止,共 5 分 ( ) i * + # E E→(E)E’ E→iE’ E’→TEE’ E’ →ε E’ E’→ ε E’→TEE’ E’ →ε E’ →ε T T→* T→+

2.(1)规范推导过程如下。写错推导符号扣 0.5 分,错写或少写一步推导扣 0.5 分,扣完为止,最左推导

扣 2 分,共 4 分。

S ? S(S) ? S(? ) ? S(S)() ? S(? )() ? S(S)()() ? S(S(S))()() ? S(S(? ))()() ? S(S(S)())()() ?

S(S(? )())()() ? S((? )())()() ? ? (()())()()

(2)(1)中加下划线的部分是句柄,标识如(1)。每少写一个句柄扣 0.5 分,扣完为止,共 4 分。 (3)每少写步扣 0.5 分,扣完为止,共 4 分。

S

S ( S )

S

( S ) ε

S

( S ) ε

ε S

( S )

S ( S )

ε

ε ε

3.(1)打印的字符串是:12020(错一个扣 0.5 分,共 3 分)

(2)归约过程中错一步扣 0.5 分,扣完为止。(共 5 分) 4.(1)每少写一步扣 0.5 分,扣完为止,共 5 分。

S

while M1.q=100 E1.t=102 E1.f=107

do M2.q=102 S1

ε

a

E2.f=103

S2

ε if E2.t=102 then M3.q=104

ε L.p=x :=

(E3.t=102) (E3.f=103)

E4.p=T1

x

E5.p=y + E6.p=z

c>d

(2)少写一个四元式扣 0.5 分,全错或不写不

y

z

四元式序列为:

100( j ?, a, b,102) 101( j, _, _,107) 102( j ?, c, d ,104) 103(( j, _, _,106) 104(?, y, z,T1) 105(:?,T1, _, x) 106( j, _, _,100)

5.(1)少写一个扣 1 分,全错或不写不得分,共 5 分。

FIRSTVT(S)={a,∧

,(} FIRSTVT(T)={,

a,∧,(}

LASTVT(S)={ a,∧

,)}

LASTVT(T)={ a,∧

,), ,}

(2)优先表如下。每错一个扣 0.5 分,全错或不写不得分,扣完为止,共 3 分


五套编译原理期末考试试卷及答案(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: