297
правок
Изменения
Нет описания правки
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>
Для терминалов или нетерминалой, мы строим переходы к другим ситуациям по следующей схеме:
[[Файл:LRk_dfa.png|600px]]
Теперь можно построить управляющую таблицу.
|}
Теперь опишем алгоритм формально.
|}
Теперь обсудим алгоритм построения анализатора. Обозначим <tex>T</tex> множество состояний, <tex>E</tex> – множество переходов.
Поскольку для символа <tex>\$</tex> операция <tex>goto(I , \$)</tex> не определена , мы выполняем действие <tex>accept</tex>.
Пример будет для строки <tex>(n_1+n_2)+n_3</tex>