LL1 и однозначная грамматика для болтания
Я пытаюсь написать простой компилятор, использующий Flex для сканера и специальный инструмент PGen для определения грамматики.
Теперь я пытаюсь разгадать однозначную грамматику для других. Я искал это.
Это грамматика с еще одной проблемой:
S → if E then S
| if E then S else S
| OTHER
Это грамматика, которая решает эту проблему (с помощью слайдов из Беркли):
S → MIF /* all then are matched */
| UIF /* some then are unmatched */
MIF → if E then MIF else MIF
| OTHER
UIF → if E then S
| if E then MIF else UIF
Но эта грамматика все еще не LL1 и все еще неоднозначна.
Когда я попытался решить эту двусмысленность и сделать ее LL1, я снова столкнулся с острой проблемой.
Может ли кто-нибудь помочь мне найти однозначную грамматику LL1 для вложенного, если?
Я прочитал в Q&A о переполнении стека, что эта грамматика не может стать LL1. Но я не могу понять, как я могу решить эту двусмысленность.