2013-04-07 3 views
0

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

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

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

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

И эта грамматика не зеркальная, вот как я построить SLR синтаксического анализа таблицы:

  1. Augment это г rammar:

    S1-> S S-> S (S) S S-> е

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

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

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

...

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

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

Мой вопрос:

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

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

ответ

0

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

Смежные вопросы