我最初有这个语法。
S -> A | B
A -> Aa | epsilon
B -> Bb | epsilon
我删除了左递归以获得这个:
S -> A | B
A -> A'
A' -> aA' | epsilon
B -> B'
B' -> bB' | epsilon
这个语法不是LL(1),因为First(A)和First(B)有共同的epsilon。我知道常见的第一个符号通常用因子分解。我不知道如何解决A和B First集中的常见epsilon。
答案 0 :(得分:0)
语法不明确,因为 S → A →ε或 S → B可以产生空字符串→ε。为了使语法可以解析,你需要解决歧义。
最简单的可能是添加规则 S →ε,然后将其从 A 和 B 中删除,以便它们的基础制作分别是 a 和 b 。