Изменения

Перейти к: навигация, поиск

LR(1)-разбор

1056 байт добавлено, 14:23, 24 июня 2015
Канонические LR(1)-состояния
Чтобы решить эту проблему, необходимо хранить в состоянии больший объём информации, который позволит не делать таких ошибочных свёрток
</wikitex>
==Канонические LR(1)-состоянияпункты==
<wikitex>
Основная идея заключается в том, чтобы хранить в состояниях пунктах больше информации, чтобы не производить некорректных свёрток. Добавим в состояния пункт второй компонент: терминальный символ. Таким образом, состояния $LR(1)$-пункты будут выглядеть следующим образом:  $[A\rightarrow\alpha\cdot\beta, a]$, где первая часть - продукция, а вторая - терминал или маркер конца входной строки $\char36$. Здесь$a$ называется предпросмотром (англ. ''lookahead'') пункта, а цифра $1$ в $LR(1)$ означает его длину.Теперь мы будем выполнять свёртку в соответствии с продукцией $A\rightarrow\alpha$, только в том случае, если пункт $[A\rightarrow\alpha\cdot\beta, a]$ принадлежит состоянию на вершине стека, и $a$ - входной символ.{{Определение|id=defValid |definition=Назовём $LR(1)$ - пункт $[A\rightarrow\alpha\cdot\beta, a]$ '''допустимым''' (англ. ''valid'') для активного префикса $\gamma$, если существует правое порождение $S\Rightarrow^{*}\delta A w\Rightarrow\delta\alpha\beta w$, где верно одно из трёх:* $\gamma=\delta\alpha$* $a$ является первым символом $w$* $w=\epsilon$ и $a=\char36$}}
</wikitex>
===Построение множеств LR(1)-пунктов===
262
правки

Навигация