如何使这个语法 LL(1)?

How to make this grammar LL(1)?

起初我有这个语法。

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 第一组中的常见 epsilon。

语法有歧义,因为空字符串可以由 SA→ε 或 产生SB→ε。为了使语法完全可解析,您需要解决歧义。

可能最简单的方法是添加规则 S→ε 然后从 A 中删除它B,因此它们的基础产生式分别为 ab