Допустим, у меня есть эта грамматика
E -> T+Ex | F
T -> T*Fy | w
F -> E | z | ε
Теперь мне нужно сделать его LL(1). Я выполнял шаги, но решение, которое я придумал, кажется не совсем правильным. Сначала устраним ε-продукции
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
Наконец, мы заменим некоторые продукты RHS, где произошло T
.
E -> wT'+Ex | wT'+x | z
T -> wT'
T' -> *FyT' | *yT' | ε
F -> wT'+Ex | wT'+x | z
Теперь это не кажется мне LL (1), так как таблица синтаксического анализа, сгенерированная этим, будет иметь несколько записей для нескольких терминалов. Что мне кажется не хватает?