Продолжая построение в соответствии с описанной процедурой,
мы столкнемся с противоречием при заполнении строк таблицы действий для
строки, помеченной символом <Ax>. Поскольку
<Ax> содержит грамматическое вхождение <A1>,
являющееся самым правым символом правила 1, то нужно было бы записать в
рассматриваемую строку таблицы действий операцию Свертка (1). Однако, в
множестве <Ax> содержится также грамматическое
вхождение <A2>, которое не является самым правым
символом правила 2. Для такого символа данную строку таблицы действий нужно
заполнить операцией Перенос. Обнаруженное противоречие показывает, что
грамматика Г 3. 14 не является
LR(0)-грамматикой, и что построить LR(0)-распознаватель с помощью описанной
процедуры невозможно.
Попробуем теперь проверить, нельзя ли построить для заданной грамматики
SLR(1)-распознаватель. Построение такого распознавателя отличается от описанного
выше тем, что заполнение таблицы действий выполняется не целыми строками,
а каждый элемент строки строится отдельно, и при этом учитываются только
те символы, которые могут следовать за рассматриваемым в выводных цепочках.
В нашем примере при построении строки таблицы действий для символа
<Ax> в столбец, отмеченный символом запятая
запишем операцию Перенос, поскольку в таблице переходов в строке <A2>
и столбце с запятой находится грамматический символ. В столбец, отмеченный
символом конца строки ^, занесем операцию Свертка
(1), поскольку за символом <A1> может следовать
только символ ^. Последнее утверждение вытекает
из того, что СЛЕД(<I>) = {^}.
Учитывая, что
СЛЕД(<B>) = { , , ^}
СЛЕД(<A>) = { , , ^}
получаем таблицу действий для искомого распознавателя в виде: