Изменения

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

LR(1)-разбор

126 байт убрано, 22:08, 4 декабря 2021
м
Удалены теги wikitex
<wikitex>
В некоторых случаях [[SLR(1)-разбор|SLR-разбор]] может выдать неправильный результат. В таких случаях используют более сложные методы, такие как LR(1) и [[LALR-разбор]]. Рассмотрим первый из них.
</wikitex>
== Отличия от SLR-разбора ==
<wikitex>
Основным отличием LR(1)-разбора от SLR-разбора является использование '''предпросмотра''' (англ. ''lookahead'') символов.
Чтобы решить эту проблему, необходимо хранить в ситуации больший объём информации, который позволит не делать таких ошибочных свёрток.
</wikitex>
== Канонические LR(1)-ситуации ==
<wikitex>
Основная идея заключается в том, чтобы хранить в ситуациях (англ. ''items'') больше информации, чтобы не производить некорректных свёрток.
Назовём 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=\varepsilon$ и $a=\char36$.
}}
</wikitex>
=== Построение множеств LR(1)-ситуаций ===
<wikitex>
Метод построения похож на метод для $LR(0)$-разбора, с двумя изменёнными функциями: $closure(I)$ {{---}} замыкание множества ситуаций, и $goto(X,I)$ {{---}} функция переходов в автомате по символу $X$.
{{Лемма
Значит, $b\in FIRST(\beta a)$.
}}
</wikitex>
====Псевдокод====
Псевдокод построения множеств $closure$ и $goto$, а также множества наборов ситуаций $items$ для грамматики
====Пример====
<wikitex>
Рассмотрим следующую грамматику $\Gamma'$:
* $S'\rightarrow S$
*$$I_9 = goto(I_6, C) = \{[C\rightarrow cC\cdot,\char36]\}$$
Остальные множества ситуаций не дают нам значений $goto$, процедура $items()$ завершает работу.
</wikitex>
=== Канонические LR(1)-таблицы ===
==== Пример ====
<wikitex>
Рассмотрим следующую грамматику $\Gamma$:
# $S\rightarrow CC$
|}
<br clear="left">
</wikitex>
== См. также ==
3
правки

Навигация