Левая факторинговая грамматика - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь создать рекурсивный приличный парсер с возвратом.Вот моя грамматика:

Re -> Sq | Sq + Re
Sq -> Ba | Ba Sq
Ba -> El | Ba*
El -> lower-or-digit | (Re)

После многих попыток у меня возникли проблемы с производством Sq-> Ba | BaSq И здесь я получаю бесконечную рекурсию.Таким образом, возможное решение, которое я нашел для этого, это оставить факторинг грамматики.

Моя проблема в том, что производственный процесс, который я хочу оставить, кажется, не соответствует ни одному из найденных примеров.Как я могу оставить фактор грамматики?Или я могу использовать другую технику?

1 Ответ

0 голосов
/ 12 октября 2018

Предполагается, что <Sq> не является терминалом (или грамматика не будет CFG), а <Ba> также не является терминалом:

Sq -> Ba Z

Z -> epsilon | Sq 
...