24-25-2-编译原理与技术-期中

一(15分)

设字母表 Σ={0,1}\Sigma=\{0, 1\}Σ\Sigma 上的正规表达式 R=1(01)0+R=1(0|1)^*0^+

  1. 请构造与之等价的 DFA,要求给出 DFA 的状态转换图。
答案 / 解析
  1. 根据上述 DFA,构造与之等价的右线性文法,要求给出产生式集合。
答案 / 解析
S->1A
A->1A|0B
B->1A|0B|ε

或者

S->1A
A->1A|B
B->1A|0B|0

二(40分)

有如下文法

SABcS \rightarrow ABc

AaAdabεA \rightarrow aAd \mid ab \mid \varepsilon

BBbεB \rightarrow Bb \mid \varepsilon

  1. 判断该文法是否为 LL(1) 文法,说明原因。若不是,做(2),若是,做(3)。
答案 / 解析

AaAcaεA\rightarrow aAc\mid a\mid\varepsilon 含左公因子 aaBBbεB\rightarrow Bb\mid\varepsilon 含左递归,所以不是 LL(1) 文法。

  1. 是否将该文法变换为等价的 LL(1) 文法?如果可以,给出改造后的文法,并根据产生式说明改造后的文法为 LL(1) 文法,之后继续做 (3);如果不可以,说明理由,并尝试完成 (3) 和 (4)。
答案 / 解析

改写后的文法为

SABcAaAεAAdbBBBbBε\begin{align*} &S\rightarrow ABc\\ &A\rightarrow aA'\mid\varepsilon\\ &A'\rightarrow Ad\mid b\\ &B\rightarrow B'\\ &B'\rightarrow bB\mid\varepsilon \end{align*}
  1. 计算 LL(1) 文法中每个非终结符号的 FIRST 集合和 FOLLOW 集合。
答案 / 解析
First 集Follow 集
S{a,b,c}{$}
A{a,ε}{b,c,d}
A’{a,b,d}{b,c,d}
B{b,ε}{c}
B’{b,ε}{c}
  1. 构造文法的 LL(1) 分析表。
答案 / 解析
abcd$
SS->ABcS->ABcS->ABc
AA->aAA->εA->εA->ε
A’A’->AdA’->bA’->Ad
BB->B’B->B’
B’B’->bBB’->ε

三(45分)

有如下文法

EAaBaBbAbE \rightarrow AaBa \mid BbAb

AcA \rightarrow c

BcB \rightarrow c

  1. 构造该文法的 LR(1) 项目集规范族及识别其所有活前缀的 DFA;
答案 / 解析

拓广文法为

0. E'->E
1. E->AaBa
2. E->BbAb
3. A->c
4. B->c

I0={[E’->⋅E,],[E>AaBa,], [E->⋅AaBa,], [E->⋅BbAb,$], [A->⋅c,a], [B->⋅c,b]}

I1=goto(I0,E)={[E’->E⋅,$]}

I2=goto(I0,A)={[E->A⋅aBa,$]}

I3=goto(I0,B)={[E->B⋅bAb,$]}

I4=goto(I0,c)={[A->c⋅,a], [B->c⋅,b]}

I5=goto(I2,a)={[E->Aa⋅Ba,$], [B->⋅c,a]}

I6=goto(I3,b)={[E->Bb⋅Ab,$], [A->⋅c,b]}

I7=goto(I5,B)={[E->AaB⋅a,$]}

I8=goto(I5,c)={[B->c⋅,a]}

I9=goto(I6,A)={[E->BbA⋅b,$]}

I10=goto(I6,c)={[A->c⋅,b]}

I11=goto(I7,a)={[E->AaBa⋅,$]}

I12=goto(I9,b)={[E->BbAb⋅,$]}

  1. 判断该文法是否为 LR(1) 文法,如果是,构造该文法的 LR(1) 分析表,如果不是,请阐述理由;
答案 / 解析

所有项目集均无冲突,所以是 LR(1) 文法。LR(1) 分析表如下:

actiongoto
状态abc$EAB
0S4123
1ACC
2S5
3S6
4R3R4
5S87
6S109
7S11
8R4
9S12
10R3
11R1
12R2
  1. 判断该文法是否为 SLR(1) 文法,如果是,构造该文法的 SLR(1) 分析表,如果不是,请阐述理由;
答案 / 解析

项目集 I4 存在归约-归约冲突,follow(A)=follow(B)={a,b},所以该冲突不能通过简单向前看一个符号来解决,所以该文法不是 SLR(1) 文法。

  1. 判断该文法是否为 LALR(1) 文法,如果是,构造该文法的 LALR(1) 分析表,如果不是,请阐述理由;
答案 / 解析

因为该 LR(1) 项目集规范族中没有同心集,所以文法是 LALR(1) 文法,分析表同 LR(1) 分析表。