第三章习题解答_0
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
根据优先关系构造规则有:
a<· FIRSTVT(S) b<· FIRSTVT(P) b<· FIRSTVT(Q) LASTVT(Q) · >a 构造优先关系表如表3-8所示。 LASTVT(S) · >b LASTVT(P) · >c LASTVT(Q) · >c a≡b b≡c
第三章 语法分析
表3-8 优先关系表
第三章 语法分析 【解答】 (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 推出串的
FOLLOW(E)=FIRST(F)\{ε} ∪{t} ∪FOLLOW(S)
={*,i,t,e,),#} FOLLOW(F)={i} ∪ FOLLOW(E)= {*,i,t,e,),#} 最后,构造SLR(1)分析表如表3-10所示。
第三章 语法分析 表3-10 习题3.22的SLR(1)分析表
状态 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 r6 r7 r6 r7 r6 r7 r4 r5 s13 r3 s13 s17 r4 r5 r4 r5 r4 r5 s17 r6 r7 r4 r5 s20 s19 r6 r7 r6 r7 r4 r5 18 r3 r3 14 16 15 s4 s2 s6 s9 s2 s8 r1 r2 s11 12 16 s10 s10 r1 r2 5 7 s13 ACTION t + e ( ) * = i s10 acc 3 16 # S 1 GOTO E F
第三章 语法分析 3.14 在算符优先分析法中,为什么要在找到最左素
短语的尾时才返回来确定其对应的头,能否按扫描顺
序先找到头后再找到对应的尾,为什么?
【解答】 设句型的一般形式为N1a1N2a2…NnanNn+1。其 中,每个 ai 都是终结符,而 Ni 则是可有可无的非终结
符。对上述句型可以找出该句型中的所有素短语,每
FIRST(E′)={+, ε}
第三章 语法分析 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)文法?请证实。
={[,+, ],#}
第三章 语法分析 对产生式V′→ε |[E] 有:FIRST(ε)∩FIRST(„[‟]= Φ;
FIRST(„[‟)∩FOLLOW(V′)={[}∩{#,+,]}=Φ;
对E′→ε | +E 有:FIRST(ε)∩FIRST(„+‟)= Φ; FIRST(„+‟)∩FOLLOW(E′)={+}∩{ ] }=Φ。 故文法G[V′]为LL(1)文法。
V′→ε | [E]
E→VE′ E′→ε | +E N→i
第三章 语法分析 一个LL(1)文法的充要条件是:对每一个终结符A的任 何两个不同产生式A→α|β有下面的条件成立: (1) FIRST(α)∩FIRST(β)=Φ; (2) 假若β→ε,则有FIRST(α)∩FOLLOW(A)= Φ。 即求出G[V′]的FIRST集合和LAST集合如下: FIRST(N)=FIRST(V)=FIRST(E)={i} FIRST(V′)={[, ε}
a a b c 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′| ε
第三章 语法分析 求每个非终结符的FIRST集和FOLLOW集如下: FIRST(S)={a,b} FIRST(P)={b}
FIRST(P′)={a,b}
FIRST(Q′)={a, ε} FOLLOW(S)={b,#} FOLLOW(P′)={b,c,#} FOLLOW(Q′)={c}
S→· (EtSeS)
S→· (EtS) S→· i=E I7 : I8 : S→ (EtSeS· ) S→ (EtSeS)·
I9 :
S→ (EtS)·
第三章 语法分析 I10: S→i·=E I11: S→i=· E E→·+EF E→·F I12: S→i=E· I13: E→+· EF I15: E→+EF· I16: E→F· I17: F→*· Fi F→·*Fi
25. E→· F
26. E→F· 27. F→· *Fi 28. F→*wenku.baidu.com Fi
第三章 语法分析 第三步,用ε_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
形 式 是 ak(k≥1) 。 因 此 , 文 法 G[S] 生 成 的 语 言 是
L={aibjakcjbi|i≥0, j≥1, k≥1}。
第三章 语法分析 (3) 求出文法G[S]的FIRSTVT集和LASTVT集: FIRSTVT(S)={a,b} FIRSTVT(Q)={a} LASTVT(S)={b,c} LASTVT(Q)={a} LASTVT(P)={c} FIRSTVT(P)={b}
第三章 语法分析 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
第三章 语法分析 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· 29. F→*F· i 30. F→*Fi· 31. F→· i 32. F→i·
图3-13 习题3.22的DFA
第三章 语法分析 第五步,构造SLR(1)分析表。 首 先 求 出 所 有 形 如 “ A→α·” 的 FOLLOW(A) , 即 由 FOLLOW 集的构造方法求得 G[S′] 的 FOLLOW 集如下: FOLLOW(S′)={#}; FOLLOW(S)={e} ∪{)} ∪{#}={e,),#}
(1) S→(EtSeS)
(2) S→(EtS) (3) S→i=E (4) E→+EF (5) E→F
(6) F→*Fi
(7) F→i
第三章 语法分析
第二步,列出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.8 下述文法描述了C语言整数变量的声明语句: G[D]: D→TL
T→int|long|short
L→id|L,id (1) 改造上述文法,使其接受相同的输入序列,但 文法是右递归的; (2) 分别用上述文法 G[D] 和改造后的文法 G[D′] 为
输入序列int a,b,c构造分析树。
F→·i
I18: F→*F· i I19: F→*Fi·
E→·+EF
E→·F I14: E→+E· F
I20: F→·i
F→·*Fi
F→·i
第三章 语法分析 第四步,构造文法G[S′]的DFA如图3-13所示。
I 1:S′→S· S I 0: S′→·S ( S→·(EtSeS) S→·(EtS) S→·i=E i I :S→i·=E 10 = F I 11: S→i=· E E→·+EF + E→·F E I :S→i=E· 12 I t 3: E I 2: S→(E·tSeS) S→(·EtSeS) S→(E·tS) S→(·EtS) E→·+EF + E→·F F I :E→F· 16 F I : 13 E→+· EF E E→·+EF E E→·F + * I : 14 E→+E· F F→·*Fi F F→·i * i I 17: F→*·Fi F→·*Fi F F→·i I :E→+EF· 15 I :F→i· 20 I :F→*F·i 18 i I :F→*Fi· 19 ( ( I : S 4 S→(Et·SeS) S→(Et·S) S→·(EtSeS) S→·(EtS) i S→·i=E I 5: S→(EtS·eS) S→(EtS·) e ) I 9:S→(EtS)· i I : 6 S→(EtSe·S) S→·(EtSeS) S→·(EtS) S→·i=E S I 7:S→(EtSeS·) ) I 8:S→(EtSeS)·
个素短语都具有如下形式: …aj-1⋖aj≡aj+1≡…≡ai⋗ai+1…
第三章 语法分析 如果某句型得到的优先关系如下: …⋖…⋖……⋗…⋗
则当从左至右扫描到第一个“⋗”时,再由此从右 至左扫描到第一个“ ⋖ ”时,它们之间( 当然不包含第 一个“⋖”前一个终结符和第二个“⋗”后一个终结符) 即为最左素短语。
F →·*Fi
F →·i 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)
FIRST(Q)={a}
FOLLOW(P)={b,c,#} 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)文法。
第三章 语法分析 【解答】 (1) 消除左递归后,文法G[D′]如下: D→TL
T→int|long|short
L→idL´ L´ →,id L´ |ε
第三章 语法分析
D D T int L L , id T int L id L’ , id L’ , id L’ (a) (b)
L , id id
图3-6 两种文法为int a,b,c构造的分析树 (a) 文法G(D); (b) 文法G′(D)
第三章 语法分析 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′