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. Но я не могу понять, как я могу решить эту двусмысленность.

0 ответов

Другие вопросы по тегам