Обработка продукции, допускающей значение NULL, в грамматиках LR(0)

Я думаю, что это довольно простой вопрос, но я не мог найти ответ нигде.

Если у меня есть грамматика с нетерминалом, производным от NULL, например:

  1. S -> B$
  2. Б -> идП
  3. P -> (E)
  4. P ->
  5. E -> B

Как мне обрабатывать продукцию № 3, чтобы изобразить ее состояния LR (0)? Должен ли я включать столбец, соответствующий переходу с пустым набором, в мою таблицу синтаксического анализа LR(0)?


person gcolucci    schedule 22.10.2014    source источник


Ответы (1)


Элемент P -> · ничем не отличается от любого другого элемента с · в правом конце; тот факт, что ничего не предшествует ·, не делает его особенным. Закрытие пункта

B -> id · P

будет состояние q:

B -> id · P
P -> · ( E )
P -> ·

из которого goto(q, P) будет указывать на переход к B -> id P ·, а goto(q, () будет указывать на переход к P -> ( · E ). goto в $ и ) не определены в этом состоянии, но action определено; это будет означать, что P должно быть уменьшено с использованием правила P ->, после чего будет использоваться goto(q, P).

person rici    schedule 22.10.2014