Изменения

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

LR(k)-грамматики

476 байт добавлено, 11:26, 29 августа 2015
LR-разборщик
== LR-разборщик ==
 
=== Принцип переноса-свёртки ===
При LR(k)-анализе применяется метод '''перенос-свертка''' (англ. ''shift-reduce''). Суть метода сводится к следующему.
* Рассматриваем по одному символу из входной строки до тех пор, пока не накопится цепочка, совпадающая с правой частью какого-нибудь из правил. Рассмотренные символы переносим в стек (операция '''перенос''').
* Далее все символы цепочки, которая совпала с каким-то правилом, извлекаются из стека и на их место помещается нетерминал, находящийся в левой части этого правила (операция '''свертка'''). Входная цепочка допускается, если после переноса в стек последнего символа входной строки и выполнения операции свертка, в магазине окажется S' (то есть нетерминал, который был добавлен при пополнении грамматики).
=== Структура ===
При LR(k)-анализе применяется метод Метод '''перенос-свертка''' (англ. ''shift-reduce''). Этот метод используетследующие компоненты:* Стек(для хранение рассматриваемых символов)* Входная цепочкастрока * Управляющая таблица * Автомат === Принцип переноса-свёртки ===Суть метода сводится к следующему. Символы входной цепочки переносятся в магазин до тех пор(для определения, пока на вершине магазина не накопится цепочка, совпадающая с правой частью какогокакое действие применить -нибудь из правил (операция '''перенос'''или свертку). Далее все символы этой цепочки извлекаются из магазина и на их место помещается нетерминал, находящийся в левой части этого правила * Автомат (операция '''свертка'''для построения управляющей таблицы). Входная цепочка допускается автоматом, если после переноса в автомат последнего символа входной цепочки и выполнения операции свертка, в магазине окажется только аксиома грамматики.
=== Управляющая программа анализатора ===
Для определения, какую операцию применить(перенос-свертку), используем управляющую таблицу. Управляющая программа одинакова для всех LR-анализаторов, а таблица изменяется от одного анализатора к другому. Программа анализатора читает последовательно символы входной цепочки. Программа использует магазин стек для запоминания строки следующего вида <tex>s_0X_1s_1X_2...X_ms_m</tex>, где <tex>s_m</tex> {{---}} вершина магазина. Каждый <tex>X_i</tex> {{---}} символ грамматики, а <tex>s_i</tex> {{---}} символ, называемый состоянием. Каждое состояние суммирует информацию, cодержащуюся в стеке перед ним.
Программа ведет себя следующим образом:
297
правок

Навигация