Может ли грамматика SLR иметь пустое производство?

Я написал следующую грамматику:

S->S ( S ) S
S->e

е означает "пустая строка"

Таким образом, язык, который распознает эта грамматика, включает в себя все строки с соответствующими левыми и правыми круглыми скобками, как (), (()), (() ()) и т. Д.

И эта грамматика не является SLR, вот как я создаю таблицу анализа SLR:

  1. Дополните эту грамматику:

    S1-> S S-> S (S) S S-> e

  2. Затем построим для него автомат LR(0):

    I0: S1 ->. S S ->. S (S) S S ->. E

    I1: S1-> S. S-> S. (S) S

...

Обратите внимание, что для I0 нет действия сдвига или уменьшения для входного символа '(', который является первым токеном любой строки, генерируемой этой грамматикой.

Таким образом, таблица синтаксического анализа SLR сгенерирует ошибку, поскольку в состоянии I0 она не знает, что делать при разборе строки: (()).

Мой вопрос:

Каков виновник, который делает эту грамматику НЕ SLR? Это пустая строка производства? То есть: S->e.?

И в общем смысле, может ли грамматика SLR иметь пустую продукцию? как, S-> e в этом примере. Благодарю.

1 ответ

Решение

Ответ в порядке, если для текущего ввода недоступно действие сдвига / уменьшения и имеется сдвиг для пустого продукта, мы выбираем сдвиг на этом пустом терминале.

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