Изменения

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

LR(0)-разбор

1207 байт добавлено, 15:56, 29 августа 2015
Нет описания правки
LR(0)-разбор означаетразборщик это частный случай [[LR(k)-грамматики#LR-разборщик|LR(k)-разборщикa]], что разборщик для принятия решения не смотрит на символы строки, а смотрит только на состояние стека которого сейчас будет рассмотрено построение автомата и определяет переходы по немууправляющей таблицы.
== Алгоритм == Заметим, что LR(0)-Разбор ==разборщик принимает решение о своих действиях только на основании содержимого стека, не учитывая символы входной цепочки.
=== Иллюстрация алгоритма Ситауции ==={{Определение|id=def_LRk_item) Заметим|definition=Пусть <tex>\Gamma =\langle \Sigma, что N, S, P \rangle</tex> {{---}} КС-грамматика и <tex>A \to w_1 w_2 \in P</tex>. Композицию <tex>[A \to w_1 \cdot w_2, u] </tex>, где <tex>u \in \Sigma^{k}</tex>, назовем '''LR(k)-ситуацией''' (англ. ''LR(k)-item'')}}LR(0)-анализатор принимает решение о своих действиях только на основании содержимого магазинаситуации не должны содержать терминальной цепочки, так как <tex>k=0</tex>, то есть мы можем записывать их следующим образом: <tex>[A \to w_1 \cdot w_2]</tex>  === Автомат для множества ситуаций === В начале работы стек пуст, не учитывая символы и указатель входной цепочкинаходится перед ее первым символом. Этому состоянию соответствует ситуация <tex>[E_0 \to \cdot E]</tex>. Для терминалов или нетерминалов, мы строим переходы к другим ситуациям по следующей схеме:  <tex>{[} A \to \alpha \cdot c \beta] \xrightarrow{\text{c}} {[} A \to \alpha c \cdot \beta] </tex> <tex>{[} A \to \alpha \cdot B \beta] \xrightarrow{\text{B}} {[} A \to \alpha B \cdot \beta] </tex> <tex>{[} A \to \alpha \cdot B \beta] \xrightarrow{\varepsilon} {[} B \to \cdot \gamma] </tex> Получаем следующий [[Недетерминированные конечные автоматы|НКА]]: Избавимся от <tex>\varepsilon</tex>-переходов и получим [[Детерминированные конечные автоматы|ДКА]]: === Построение управляющей таблицы ===== Иллюстрация алгоритма ==Для иллюстрации построения таблиц алгоритма LR(0)-анализатора разборщика мы будем использовать грамматику:
<tex>
T \to (E) \\
</tex>
=== Пополнение грамматики===
Для начала переходим к ''Пополненной грамматике'':
T \to (E) \\
</tex>
{{Определение
|id=def_LRk_item)
|definition=
Пусть <tex>\Gamma =\langle \Sigma, N, S, P \rangle</tex> {{---}} КС-грамматика и <tex>A \to w_1 w_2 \in P</tex>. Композицию <tex>[A \to w_1 \cdot w_2, u] </tex>, где <tex>u \in \Sigma^{k}</tex>, назовем '''LR(k)-ситуацией''' (англ. ''LR(k)-item'')
}}
LR(0)-ситуации не должны содержать терминальной цепочки, так как <tex>k=0</tex>, то есть мы можем записывать их следующим образом: <tex>[A \to w_1 \cdot w_2]</tex>
==== Построение автомата ====В начале работы магазин стек пуст, и указатель входной цепочки находится перед ее первым символом. Этому состоянию соответствует ситуация <tex>[E_0 \to \cdot E]</tex>.
Для терминалов или нетерминалой, мы строим переходы к другим ситуациям по следующей схеме:
[[Файл:LRk_dfa.png|600px]]
==== Управляющая таблица ====
Теперь можно построить управляющую таблицу.
|}
=== Формальное описание ======= Базовые операции ====
Теперь опишем алгоритм формально.
|}
==== Алгоритм построения конечного автомата ====
Теперь обсудим алгоритм построения анализатора. Обозначим <tex>T</tex> множество состояний, <tex>E</tex> – множество переходов.
Поскольку для символа <tex>\$</tex> операция <tex>goto(I , \$)</tex> не определена , мы выполняем действие <tex>accept</tex>.
=== Пример LR(0)-разбора ===
Пример будет для строки <tex>(n_1+n_2)+n_3</tex>
297
правок

Навигация