我如何制作这个语法 LL(1)?

How do I make this grammar LL(1)?

假设我有这个语法

E -> T+Ex | F
T -> T*Fy | w
F -> E | z | ε

现在我需要把它变成 LL(1)。我一直在按照这些步骤操作,但我提出的解决方案似乎不太正确。 拳头让我们消除 ε-productions

E -> T+Ex | F | T+x
T -> T*Fy | w | T*y
F -> E | z

现在我们将消除循环

E -> T+Ex | T+x | z
T -> T*Fy | w | T*y
F -> T+Ex | T+x | z

不,我们将消除直接左递归

E -> T+Ex | T+x | z
T -> wT'
T' -> *FyT' | *yT' | ε
F -> T+Ex | T+x | z

最后,我们将替换 T 出现的某些 RHS 作品

E -> wT'+Ex | wT'+x | z
T -> wT'
T' -> *FyT' | *yT' | ε
F -> wT'+Ex | wT'+x | z

现在这对我来说似乎不是 LL(1),因为由此生成的解析 table 将有多个终端的多个条目。我似乎缺少什么?

我知道怎么做了,最后一步我们有了这个配置

E -> wT'+Ex | wT'+x | z
T -> wT'
T' -> *FyT' | *yT' | ε
F -> wT'+Ex | wT'+x | z

我们现在需要执行左因式分解以移除形式为

的产生式
S -> aB | aC

并把它们变成合适的形式

S -> aA
A -> B | C

使用这个我们可以将我们的语法转换成

E -> wT'+E' | z
E' -> Ex | x
T -> wT'
T' -> *T'' | ε
T'' -> FyT' | yT'
F -> wT'+F' | z
F' -> Ex | x

因为 FF'EE' 相同,我们可以删除这个产生式,所以我们剩下了。

E -> wT'+E' | z
E' -> Ex | x
T -> wT'
T' -> *T'' | ε
T'' -> EyT' | yT'