Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры_по тяпу готовые.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
952.32 Кб
Скачать

36. Lr(1) анализ. Lr(1)-ситуация. Замыкание множества ситуаций. Определение переходов.

В названии LR(1) символ L указывает на то, что входная цепочка читается слева-направо, R - на то, что строится правый вывод, 1 указывает на то, что анализатор видит один символ непрочитанной части входной цепочки.

LR(1) - синтаксический анализатор для исходных кодов программ, который читает входной поток слева направо и производит наиболее правую продукцию контекстно-свободной грамматики, использует в предпросмотре 1 грамматический символ, на основании которого принимает решение при анализе. Для исключения некорректных сверток в состояние добавляют дополнительную информацию. Разделяя при необходимости состояния, мы можем заставить каждое состояние LR-анализа точно указывать, какой входной символ может следовать за основой. Дополнительная информация внедряется в состояние путем переопределения пунктов для включения терминального символа в качестве второго компонента. Общим видом пункта становится [A -> α*β, a], где A -> α*β представляет собой продукцию, a – терминал или маркер $. Такой объект называется LR(1)-ситуация. Предпросмотр не играет роль в пункте вида [A -> α*β, a], где β ≠e, но [A -> α*, a] вызывает свертку по продукции A-> α только тогда, когда очередной входной символ – α.

Метод построения замыкания множества ситуаций LR(1) аналогичен LR(0). Необходимо ввести внести изменения только в две функции – closure и goto. (G’ – расширенная грамматика)

function closure(I)

begin

repeat

for каждый пункт [A -> α*Bβ, a] I

каждая продукция B>γ из G’ и каждый терминал b из FIRST(βa)

такой, что [B>* γ, b] не I do

добавить [B>* γ, b] в I;

until пунктов для добавления в I больше нет

return I;

end;

Определение переходов:

function goto(I,X)

begin

Пусть J- множество пунктов [A -> αX*β, a]

таких, что [A > αX*β, a] I

return closure(J)

end;

Основная подпрограмма для построения множеств пунктов:

procedure items(G’);

begin

C:={closure ({[S’>*S,$]})};

repeat

for каждое множество пунктов I C и каждый

символ грамматики X, такие, что goto(I,X)

не пусто и не принадлежит С do

добавить goto(I,X) в С

until множеств пунктов для добавления в С больше нет

end;

16. Построение отношения предшествования операторов исходя из их ассоциативности и приоритета. Алгоритм разбора для грамматик простого предшествования.

Вход данные для этого алгоритма: разбираемая строка W(W=id1+id2*id3), и таблица хранящая отн-я предшеств-я

Выходные данные: если строка W написана грамотно, то на выходе дерево разбора, иначе сообщение об ошибке. Префиксная запись: 2 операнда и за ними след-т оператор: id1 id2 id3 + *.

Для построения дерева неободимо использовать стек.

Алгоритм представляет собой цикл, который завершает свою работу, когда стек и буфер станут пустыми.

Повторять бесконечно:

если в вершине стека $, и тек. символ - $, то успешный выход. иначе пусть a – самый верхний в стеке терминал,

b – первый символ входного буфера.

если a ⋖ b или a ≐ b то, (* сдвиг * т.е. Push в и берем новый текущий символ)

1) делаем push b; 2) следующий вх. символ становится тек.

иначе если a ⋗ b то , (* свёртка * т.е. из стека извлекаем символы, пока не обнаружим <•. Здесь же извлеченные символы заносятся в результирующую последовательность)

repeat pop Xi until (верш. стека ⋖ Xi) иначе ошибочная ситуация.

Таблица заполняется на основе ассоциативности и приоритетов следующим образом:

1) если оператор А1 имеет больший приоритет к А2, то в таблицу заносим А1•>А2, а А2<•А1. Напр: *•>+, +<•*

2) если А1 и А2 имеют одинаковый приоритет, то для ассоциат-х влево операторов принимаем: А1<•А2, А2<•А1 и наоборот А1•>А2, А2•>А1. Т.о. задаем ассоциативность: +, -, *, /, ( - ассоц-ть влево, возвед-е в степень – ассоц-ть вправо.

3) Для всех А считаем: А <• id, id•>А, id<•’(’, ‘)’ •>А, A•>')', A•>$, $<•$.

Самый простой транслятор можно написать, используя LL1 для операторов, а для грамматик – ГПП-разбор.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]