第三章习题解答
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章 语法分析
对产生式V′→ε |[E] 有:FIRST(ε)∩FIRST(‘[’]= Φ; FIRST(‘[’)∩FOLLOW(V′)={[}∩{#,+,]}=Φ;
对E′→ε | +E 有:FIRST(ε)∩FIRST(‘+’)= Φ; FIRST(‘+’)∩FOLLOW(E′)={+}∩{ ] }=Φ。 故文法G[V′]为LL(1)文法。
第三章 语法分析 表3-12 习题3.24的SLR(1)分析表
状态
ACTION
GOTO
b
d
i
#
T
E
H
0
r3
s3
1
2
1
acc
2
s4
3
r2
4
r6
s6
r6
5
5
s7
r1
6
r4
r4
7
s8
8
r5
r5
第三章 语法分析
序号 状态栈 符号栈 产生式 输入串
10
#
E→ε bibi# 归约 r3
2 02
#E
bibi# 移进
第三章 语法分析
表3-8 优先关系表
a
b
c
a
⋖⋗
⋖≡
⋗
b
⋖
⋖⋗
≡
c
⋗
⋗
由于表中的优先关系不唯一,故文法G[S]不是算符优 先文法。
第三章 语法分析 (4) 消除文法G[S]的左递归: S→aSb | P P→bPc | bQc Q→aQ′ Q′→aQ′| ε 提取公共左因子后得到文法G′[S]: S→aSb | P P→bP′ P′→Pc | Qc Q→aQ′ Q′→aQ′| ε
FOLLOW(Q′)={c}
第三章 语法分析
对于P´→Pc|Qc,有: FIRST(P) ∩FIRST(Q)={b} ∩{a}=Ø
对于Q´→a Q´|ε,有: FIRST(“aQ´”) ∩{ε}= Ø FIRST (“aQ´”) ∩FOLLOW(Q´)={a} ∩{c}= Ø 所以,该文法是LL(1)文法。
第三章 语法分析 FOLLOW(V)=FIRST(E)\{ε}∪FOLLOW(E) ∪{#}={+,],#} FOLLOW(V)= FOLLOW(V)={+,],#} FOLLOW(E)={]} ∪FOLLOW(E)={]} FOLLOW(E)=FOLLOW(E) ={]} FOLLOW(N)=FIRST(V)\{ε} ∪FOLLOW(V) ={[,+, ],#}
3.16 给出文法G[S]: S→aSb∣P P→bPc∣bQc Q→Qa∣a
(1) 它是Chomsky哪一型文法? (2) 它生成的语言是什么? (3) 它是不是算符优先文法?请构造算符优先关 系表证实之; (4) 文法G[S]消除左递归、提取公共左因子后是 不是LL(1)文法?请证实。
第三章 语法分析
第三章 语法分析
3.14 在算符优先分析法中,为什么要在找到最左素 短语的尾时才返回来确定其对应的头,能否按扫描顺 序先找到头后再找到对应的尾,为什么? 【解答】 设句型的一般形式为N1a1N2a2…NnanNn+1。其 中,每个ai都是终结符,而Ni则是可有可无的非终结 符。对上述句型可以找出该句型中的所有素短语,每 个素短语都具有如下形式:
3.32 给出文法G[S]: S→SaS∣SbS∣cSd∣eS∣f。 (1) 请证实这是一个二义文法;
={*,i,t,e,),#} FOLLOW(F)={i} ∪ FOLLOW(E)= {*,i,t,e,),#} 最后,构造SLR(1)分析表如表3-10所示。
第三章 语法分析
3.24 文法G[T]及其SLR(1)分析表(见表3-12)如下,给 出串bibi的分析过程。 G[T]:(1) T→EbH (2) E→d (3) E→ε (4) H→i (5) H→Hbi (6) H→ε
第三章 语法分析
3.22 文法G(S)的产生式集为 S→(EtSeS) | (EtS) | i =E E→+EF | F F→*Fi | i 构造文法G(S)的SLR(1)分析表,要求先画出相应的
DFA。
第三章 语法分析 【解答】 第一步,将文法G拓广为文法G[S′]:
(0)S′→S (1) S→(EtSeS) (2) S→(EtS) (3) S→i=E (4) E→+EF (5) E→F (6) F→*Fi (7) F→i
I7: S→ (EtSeS·) I8: S→ (EtSeS)· I9: S→ (EtS)·
第三章 语法分析 I10: S→i·=E I11: S→i=·E
E→·+EF E→·F
F →·*Fi
F →·i I12: S→i=E· I13: E→+·EF
E→·+EF E→·F
F →·*Fi
F →·i
第三章 语法分析 I14: E→+E·F
S→·(EtS)
S→·i= E
I2:
E
S→(·EtSeS)
S→(·EtS)
E→·+ EF + E→·F
I3:
t
S→(E·tSeS)
S→(E·tS)
(
I4:
S
S→(Et·SeS)
S→(Et·S)
S→·(EtSeS)
S→·(EtS) S→·i= E
i
(
I5: S→(EtS·eS)
S→(EtS·) e
I6: S→(EtSe·S)
第三章 语法分析 (3) 求出文法G[S]的FIRSTVT集和LASTVT集: FIRSTVT(S)={a,b} FIRSTVT(P)={b} FIRSTVT(Q)={a} LASTVT(S)={b,c} LASTVT(P)={c} LASTVT(Q)={a} 根据优先关系构造规则有:
a<·FIRSTVT(S) LASTVT(S) ·>b a≡b b<·FIRSTVT(P) LASTVT(P) ·>c b≡c b<·FIRSTVT(Q) LASTVT(Q) ·>c LASTVT(Q) ·>a 构造优先关系表如表3-8所示。
3 024 #Eb
ibi# 移进
4 0246 #Ebi H →i
bi# 归约 r4
5 0245 #EbH
bi# 移进
6 02457 #EbHb 7 024578 #EbHbi H →Hbi 8 0245 #EbH T → EbH
i# 移进 # 归约 r5 # 归约 r1
9 01
#T
# acc
说明
第三章 语法分析
第三章 语法分析
3.8 下述文法描述了C语言整数变量的声明语句: G[D]: D→TL T→int|long|short L→id|L,id (1) 改造上述文法,使其接受相同的输入序列,但
文法是右递归的; (2) 分别用上述文法G[D]和改造后的文法G[D′]为
输入序列int a,b,c构造分析树。
第三章 语法分析
一个LL(1)文法的充要条件是:对每一个终结符A的任 何两个不同产生式A→α|β有下面的条件成立: (1) FIRST(α)∩FIRST(β)=Φ; (2) 假若β→ε,则有FIRST(α)∩FOLLOW(A)= Φ。 即求出G[V′]的FIRST集合和LAST集合如下:
FIRST(N)=FIRST(V)=FIRST(E)={i} FIRST(V′)={[, ε} FIRST(E′)={+, ε}
F→·*Fi F→·i
F
*
i I17: F→*·Fi
F→·*Fi F→·i
F
I20: F→i· I18: F→*F·i
i I15: E→+ EF· I19: F→*Fi·
) I8: S→(EtSeS)·
图3-13 习题3.22的DFA
第三章 语法分析 第五步,构造SLR(1)分析表。 首先求出所有形如 “A→α·”的FOLLOW(A),即由 FOLLOW集的构造方法求得G[S′]的FOLLOW集如下: FOLLOW(S′)={#}; FOLLOW(S)={e} ∪{)} ∪{#}={e,),#} FOLLOW(E)=FIRST(F)\{ε} ∪{t} ∪FOLLOW(S)
…aj-1⋖aj≡aj+1≡…≡ai⋗ai+1…
第三章 语法分析 如果某句型得到的优先关系如下: …⋖…⋖……⋗…⋗
则当从左至右扫描到第一个“⋗”时,再由此从右 至左扫描到第一个“⋖”时,它们之间(当然不包含第 一个“⋖”前一个终结符和第二个“⋗”后一个终结符) 即为最左素短语。
第三章 语法分析
第三章 语法分析
第二步,列出LR(0)的所有项目: 1. S′→·S 2. S′→S· 3. S→·(EtSeS) 4. S→ (·EtSeS) 5. S→ (E·tSeS) 6. S→ (Et·SeS) 7. S→ (EtS·eS) 8. S→ (EtSe·S) 9. S→ (EtSeS·) 10. S→ (EtSeS)·
第三章 语法分析 3.11 将下述文法改造为LL(1)文法:
G[V]: V→N | N[E] E→V | V+E N→I
【解答】 LL(1)文法的基本条件是不含左递归和回溯(公共左 因子),而文法G[V]中含有回溯,所以先提取公共左因子, 以消除回溯,得到文法G[V′]:
G [V′]:V→NV′ V′→ε | [E] E→VE′ E′→ε | +E N→i
第三章 语法分析 11. S→·(EtS) 12. S→ (·EtS) 13. S→ (E·tS) 14. S→ (Et·S) 15. S→ (EtS·) 16. S→ (EtS)· 17. S→·i=E 18. S→i·=E 19. S→i=·E 20. S→i=E·
第三章 语法分析
21. E→·+EF 22. E→+·EF 23. E→+E·F 24. E→+EF· 25. E→·F 26. E→F· 27. F→·*Fi 28. F→*·Fi
I3: S→(E·tSeS) S→(E·tS)
第三章 语法分析
I4: S→ (Et·SeS) S→ (Et·S) S→·(EtSeS) S→·(EtS) S→·i=E
I5: S→ (EtS·eS) S→ (EtS·)
第三章 语法分析
I6: S→ (EtSe·S) S→·(EtSeS) S→·(EtS) S→·i=E
第三章 语法分析 【解答】 (1) 消除左递归后,文法G[D′]如下: D→TL T→int|long|short L→idL´ L´ →,id L´ |ε
第三章 语法分析
D
D
TL
TL
int id L’
int L , id L , id
, id L’ , id L’
id (a)
(b)
图3-6 两种文法为int a,b,c构造的分析树 (a) 文法G(D); (b) 文法G′(D)
F →·*Fi F →·i
I18: F→*F·i I19: F→*Fi· I20: F→i·
I15: E→+EF· I16: E→F· I17: F→*·Fi
F→·*Fi
F→·i
第三章 语法分析
第四步,构造文法G[S′]的DFA如图3-13所示。
I1: S′→S· S
I0:
S′→·S
(
S→·(EtSeS)
【解答】 (1) 根据Chomsky的定义,对任何形如A→β 的产生式,有A∈VN,β∈(VT∪VN)*时为2型文法。而 文法G[S]恰好满足这一要求,故为Chomsky 2型文法。
(2) 由文法G[S]可以看出:S推出串的形式是ai P bi(i≥0),P推出串的形式是bjQcj(j≥1),Q推出串的 形式是ak(k≥1)。因此,文法G[S]生成的语言是 L={aibjakcjbi|i≥0, j≥1, k≥1}。
29. F→*F·i 30. F→*Fi· 31. F→·i 32. F→i·
第三章 语法分析 第三步,用ε_CLOSURE方法构造文法G[S′]的LR(0)项目 集规范族:
I0: S′→·S S→·(EtSeS) S→·(EtS) S→·i=E
I1: S′→S ·
第三章 语法分析
I2: S→ (·EtSeS) S→ (·EtS) E→·+EF E→·F F →·*Fi F →·i
S→·(EtSeS)
S→·(EtS) S→·i= E
)
I9: S→(EtS)·
i
S I7: S→(EtSeS·)
i
= I10: S→i·= E
I11:
F
S→i= ·E
E→·+ EF+ E→·F
E
I12: S→i= E·
I16: E→F·
F
I13: E→+ ·EF
E→·+ E→·F
EEF E
+
* I14: E→+ E·F
第三章 语法分析
求每个非终结符的FIRST集和FOLLOW集如下:
FIRST(S)={a,b}
FIRST(P)={b}
FIRST(P′)={a,b}
FIRST(Q)={a}
FIRST(Q′)={a, ε}
FOLLOW(S)={b,#} FOLLOW(P)={b,c,#}
FOLLOW(P′)={b,c,#} FOLLOW(Q)={c}