给定由
定义的语法G.A -> Ca
B -> Cb
C -> e|f
这个语法LL(1)?
我意识到我们可以将它压缩成一行,但这不是这个问题的重点。
主要是,LL(1)语法是否有多个以相同的非终端开头的规则?
作为后续问题,我如何构建上述语法的解析表?
我已经解决了以下问题:
FIRST(A) = {e,f}
FIRST(B) = {e,f}
FIRST(C) = {a,b}
FOLLOW(A) = {}
FOLLOW(B) = {}
FOLLOW(C) = {a,b}
我看了this post,但不明白他们是如何从FIRSTs和FOLLOWs到桌子的。
答案 0 :(得分:2)
你给出的语法不是LL(1),因为两个作品A→Ca和A→Cb之间存在第一/第一冲突。
通常,具有相同非终结符的多个制作的语法将以LL(1)开头,因为您将获得FIRST / FIRST冲突。有这个属性的语法是LL(1),尽管它们基本上是退化的情况。例如,考虑以下语法:
A→Ea
A→Eb
E→ε
这里,非终结符号E仅扩展为空字符串ε,因此实际上并不存在。因此,上述语法是LL(1),因为两个产品之间没有FIRST / FIRST冲突。要看到这一点,这是解析表:
a b $
A Ea Eb -
E ε ε -
希望这有帮助!
答案 1 :(得分:1)
我在2个案例中解决了你的问题:
第一种情况,如果终端是{a,b,e,f}
第二种情况,如果终端是{a,b,f}而e是epsilon
所以没有多重条目这是LL(1)。
了解更多信息: 请看下面的解释和示例:
祝你好运