编译原理模拟试卷答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

模拟试卷答案

模拟试卷A

一、

二、

int real

id , $

D D →TL D →TL T T →int T →real L L →id R

R

R →, id R R → ε

三、

(1)状态转换图如下:

(2)合并同心项目集(I 4和I 11,I 5和I 12,I 7和I 13,I 8和I 10)后没有动作冲突。

*

四、语法制导的定义如下:

S → E print(S.loop);

E →while E1do E2 E.loop := max(E1.loop, E2.loop) +1;

E →id := E E.loop := E1.loop;

E → E1 + E2 E.loop := max(E1.loop, E2.loop);

E →id E.loop := 0;

E → (E1) E.loop := E1.loop;

五、程序流图

(1)计算各基本块的到达-定值集IN[B]。公式为:

IN[B] = ∪ OUT[P]

P∈P[B]

OUT[B] = GEN[B] ∪ ( IN[B] - KILL[B] )

基本块GEN[B] 位向量KILL[B] 位向量B1{ d1, d2 } 11000000 { d3, d4, d6 } 00110100 B2{ d3, d4 } 00110000 { d1, d2, d6 } 11000100 B3{ d6 } 00000100 { d1, d4 } 10010000 B4{ } 00000000 { } 00000000

(2)求各基本块中各变量引用点的ud 链:

假设在程序中某点u 引用了变量a ,则把能到达u 的a 的所有定值点,称为a 在引用点u 的引用-定值链(简称ud 链)。可以利用到达-定值信息来计算各个变量在任何引用点的ud 链。

由图9.6(1)的程序流图可知,I 的引用点是d3、d5和d6,J 的引用点是d3和d8。

B2中I 和J 的引用点d3前面没有对I 和J 的定值点,其ud 链在IN[B2]={ d1, d2, d3, d6 }中,所以I 在引用点d3的ud 链是{ d1, d6 };J 在引用点d3的ud 链是{ d2, d3 }。

在B2中I 的引用点d5前面有I 的定值点d4,且在d4定值后到达d5,所以I 在引用点d5的ud 链是{ d4 }。

B3中I 的引用点d6前面没有I 的定值点,其ud 链是IN[B3]中I 的所有定值点,所以是{ d4 }。

B4中J 的引用点d8前面没有对J 的定值点,其ud 链是IN[B4]中J 的所有定值点。已知IN[B4] = { d3, d4 },所以,J 的引用点d8的ud 链是{ d3 }。

模拟试卷B

一、该正规式描述的语言是,所有不含子串001的0和1的串。 二、

(1)先给出接受该文法活前缀的DFA 如下:

表中没有多重定义的条目,因此该文法是SLR(1)的。 (

2)只有文法

E → M E + id | id M → ε

不是LR(1)文法。因为对于句子id +id +…+id 来说,分析器在面临第一个id 时需要做的空归约次数和句子中+id 的个数一样多,而此时句子中+id 的个数是未知的。 三、

E → E 1 *E 2{if E 1.sign = E 2.sign then E .sign := POS else E .sign := NEG } E → +E 1 { E .sign := E 1.sign }

E → -E 1 {if E 1.sign = POS then E .sign := NEG else E .sign := POS} E → unsigned _integer {E .sign := POS}

四、

由于实参表达式是反序进入活动记录,而局部变量是顺序在活动记录中分配。 五、 (1)

(2)

b := 1

b := 2

if w <= x goto L2 (1)

e := b

goto L2 (2)

L1: goto L3 (3)

L2: c := 3

b := 4

c := 6 (4)

L3: if y <= z goto L4 (5)

goto L5 (6)

L4: g := g + 1

h := 8

goto L1 (7)

L5: h := 9 (8)

(3)结点5、7和3构成一个循环,其中5是入口结点。

模拟试卷C

一、

D → T L ;

T → int | float

L → L, id | id

二、

消除左递归后的文法如下:

B → 1 B'

B'→ 0 B' | 1 B' | ε

相应的翻译方案如下:

B → 1 {B'.i := 1 }B'{B.val := B'.val}

B'→0 {B'1.i := B'.i⨯ 2 } B'1 {B'.val := B'1.val}

| 1 {B'1.i := B'.i⨯ 2 +1} B'1 {B'.val := B'1.val}

| ε {B'.val := B'.i}

三、

S → L . R S. val := L. val + R. val

S → L S. val := L. val

L → L1 B L. val := L1. val⨯2 + B. val

L → B L. val := B. val

R → B R1R. val := (R1. val + B. val)/2

R → B R. val := B. val/2

相关文档
最新文档