Может ли в грамматике существовать конфликт «следуй-следуй»?

Я знаю, что в грамматике существуют конфликты «первый/первый» и «первый/последующий», что делает грамматику «не LL(1)». Мне просто интересно, существует ли конфликт Follow/Follow в грамматике.


person Sai Charan    schedule 14.12.2018    source источник


Ответы (2)


Да, это возможно, но для этого требуется необычная конфигурация. Рассмотрим следующую грамматику, дополненную новым начальным символом:

S' S$

S тТ

Т А | Б

А

Б

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

          $          t
     +----------+----------+
 S'  |          | S' -> S$ |
     +----------+----------+
 S   |          | S -> tT  |
     +----------+----------+
 T   | T -> A   |          |
     | T -> B   |          |
     +----------+----------+
 A   | A -> e   |          |
     +----------+----------+
 B   | B -> e   |          |
     +----------+----------+

Обратите внимание, что в записи для (T, $) есть два элемента. И это имеет смысл: если у нас есть активный нетерминал T и мы видим $, мы знаем, что нам нужно выбрать продукцию, которая расширится до пустой строки. И у нас есть два разных способа сделать это: мы могли бы использовать TA или TB с конечной целью расширения каждого из этих нетерминалов до пустой строки. Это проблема - мы не можем предсказать, какой маршрут выбрать.

Что же это за конфликт? Это не может быть конфликт ПЕРВЫЙ/ПЕРВЫЙ, потому что ПЕРВЫЙ(A) = {} и ПЕРВЫЙ(B) = {}, поэтому ни A, ни B не имеют терминалов в своем первом наборе. По той же причине это не может быть конфликтом FIRST/FOLLOW.

Это означает, что это редкий конфликт FOLLOW/FOLLOW — мы знаем, что выберем продукцию, основываясь на том, что находится в наборах FOLLOW A и B, и все же они полностью идентичны друг другу, и поэтому синтаксический анализатор не может выбрать что делать дальше однозначно.

person templatetypedef    schedule 15.12.2018
comment
Отличный пример. Но является ли это формальной грамматикой? Терминальное множество T пусто. - person Viseshini Reddy; 16.12.2018
comment
Должна быть возможность отредактировать эту грамматику, чтобы дать ей хотя бы один терминал. Позволь мне сделать это сейчас. - person templatetypedef; 16.12.2018
comment
Продукционное правило S'->S$ должно быть помещено в столбец t вместо столбца $. - person Sai Charan; 18.12.2018
comment
@SaiCharan Хороший улов - извините, это пережиток более ранней версии грамматики. Позвольте мне исправить это ... - person templatetypedef; 18.12.2018

Это предварительно более простой пример

S → A a 
A → B | C
B → ε
C → ε

Здесь, поскольку a находится в FOLLOW из B и C, на (A, a) возникнет конфликт между A → B и A → C. Обратите внимание, что других конфликтов нет.

person Mapio    schedule 01.05.2019