设文法G[S]为: S→aAcB A→Ab|b B→d 问: 1)该文法是否可改造为LL(1)文法,为什么? 2)若该文法是LL(1)文法,请构造相应的LL(1)分析表。如果不是请改造为LL(1)文法,再构造LL(1)分析表;
1)不是LL(1)文法,原因文法存在左递归 2)消除左递归:S→aAcB A→bA' A'→bA'|ε B→d; 计算每个非终结符的FIRST集合和FOLLOW集合: 非终结符 FIRST FOLLOW S {a} {#} A {b} {c} B {d} {#} A’ {b,ε} {c} 计算产生式的SELECT集: SELECT(S→aAcB)={a}SELECT(A→bA’)={b} SELECT(A’→bA’)={b}SELECT(A’→ε)=FOLLOW(A’)={c} SELECT(B→d)={d} 因为SELECT(A’→bA’)∩SELECT(A’→ε)=Ф 因此,改进后的文法是LL(1)文法 该文法的LL(1)分析表如下表。 [br][/br] a b c d # S →aAcB [br][/br] [br][/br] [br][/br] [br][/br] A [br][/br] →bA’ [br][/br] [br][/br] [br][/br] A’ [br][/br] →bA’ →ε [br][/br] [br][/br] B [br][/br] [br][/br] [br][/br] →d
举一反三
- 给定文法G[S]: S →L.L|L L →LB|B B→0|1 [1]改写文法为LL(1)文法。 [2]求改写后文法每个非终结符的First,Follow集。 [3]构造改写后文法的预测分析表。 [4]分析1.0#是否为文法的句子。
- LL(k)文法是对LL(1)文法概念的推广,它代表“从左至右分析输入、最左推导和超前查看k个符号即可确定当前应采用的推导”,则 。 A: LL(1)文法都属于LL(2)文法 B: LL(2)文法都属于LL(1)文法 C: LL(2)文法可能二义 D: 以上说法都不对
- 每个文法都能改写为 LL(1) 文法。
- 已知文法G[A]:A-> (A) |ε该文法是LL(1)文法吗? A: 是 B: 不是
- 已知文法G(S)为:S→Pa|Pb|cP→Pd|Se|f则该文法为 ( )。 A: LL(1)文法 B: SLR(1)文法 C: a和b D: 都不是
内容
- 0
一个文法G,若( ),则称它是LL(1)文法。
- 1
【简答题】已知文法G[S]: S→S+aF|aF|+aF F→*aF|*a (1)消除左递归和回溯 (2)构造FIRST、FOLLOW、SELECT集合 (3)构造其LL(1)文法分析表,
- 2
下列关于LL(1)文法的说法正确的是() A: 第一个L的含义是最左归约 B: LL(1)文法可以含有左递归 C: LL(1)文法不能包含ε产生式 D: LL(1)文法用于自上而下语法分析
- 3
____文法不是LL(1)的
- 4
无左递归的文法是LL(1)文法