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

22. Алгоритм вычисления замыкания множества ситуаций (Closure).

Для заданного множества ситуаций I грамматики G, замыкание этого множества Closure(I):

Базовый случай: все ситуации I Î closure(I).

Общий случай (шаг индукции): если ситуация [ A → α • B β ] Î closure(I), правило может начать ожидать свою основу B → γ (существует такая продукция), то добавим ситуацию [ B → • γ ] Î closure(I).

Этот процесс выполняется до тех пор, пока что-то можно добавить в множество closure(I).

Пример:

Для пополненной грамматики:

E’ → E

E → E + T | T

T → T * F | F

F → ( E ) | id

Если вначале множество I содержит 1 ситуацию:

Построим closure(I), где I = {[E’ → •E]}:

closure(I) будет содержать:

[E’ → • E]

[E → • E + T]

[E → • T]

[T → • T * F]

[T → • F]

[F → •( E )]

[F → • id]

23. Каноническая совокупность множеств ситуаций.

Основная идея SLR-метода состоит в том, чтобы вначале построить на базе грамматики детерминированный конечный автомат для распознавания активных префиксов. Группируем пункты в множества, которые приводят к состояниям SLR-анализатора. Пункты могут рассматривается как состояния недетерминированного конечного автомата, распознающего активные префиксы.

Операция замыкания. Если I- множество пунктов грамматики G, то closure(I) – множество пунктов, построенное из I по следующим правилам: 1) В замыкание closure(I) заносится множество ситуаций I. 2) Если ситуация [AB] уже принадлежит closure(I) и есть продукция B, то добавляем в closure(I) ситуацию [B].Применяем это правило до тех пор, пока не внесем все возможные пункты в closure(I)

Наличие AB в closure(I) указывает, что в некоторый момент в процессе синтаксического анализа мы полагаем, что можем встретить во входном потоке подстроку, выводимую из B. Но если имеется продукция B, то, естественно, мы также можем встретить в этот момент строку, выводимую из , поэтому включаем B в closure(I)

Любое множество можно разделить на два класса: 1) Базисные пункты включающие начальный пункт S’ -> *S и все пункты, у которых точки расположены не у левого края. 2) Небазисные пункты, у которых точки расположены слева.

Переходы по функции (goto (I,x)) представляет собой множество ситуаций, в которые можно перейти из множества ситуаций I по грамматическому символу х, то есть по терминалу или нетерминалу. При выполнении функции (goto (I,x)) строят замыкание множества состояний вида [Ax], если в I есть ситуация [Ax], то есть точка переходит за символ х в ситуациях. После этого строиться замыкание этого множества.

Используя функции closure(I) и goto(I,x) можно построить каноническую совокупность всех возможных множеств ситуаций дополненной грамматики. Для этого строят замыкание для ситуации [SS]. После этого в цикле находят все множества ситуаций, в которые можно перейти из уже найденного множества по любому грамматическому символу. Цикл завершается, когда нельзя ничего нового добавить в каноническую совокупность.

24. Переходы в slr (1) анализаторе. Функция goto. Допустимая ситуация.

Переход представляет собой множество ситуаций, в которые можно перейти из множества ситуаций I по грамматическому символу х, то есть по терминалу или нетерминалу. При выполнении функции (goto (I,x)) строят замыкание множества состояний вида [Ax], если в I есть ситуация [Ax], то есть точка переходит за символ х в ситуациях. С помощью этих переходов строится таблица goto.

Функция goto (I, X), где I - множество ситуаций, X - символ грамматики. goto (I, X) определяется как замыкание множества ситуаций , принадлежащих I. Функция возвращает новое состояние конечного автомата.

Ситуация A->β1*β2 называется допустимой для активного префикса αβ1 если существует порождение S’ =>R* αAq =>R αβ1β2γ. Ситуация может быть допустимой для многих активных префиксов.

Главная теорема LR-разбора: Множество допустимых ситуаций активного префикса γ – в точности то множество ситуаций, которые допустимы из начального состояния по пути, помеченному γ в детерминированном конечном автомате, построенному из канонической совокупности множеств ситуаций и переходов, определенных функцией goto.

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

Определим функцию переходов Goto(I,x), где I-множество ситуаций, X-грамм символ. Строит то же множество ситуаций в которые можно перейти из заданного множества по символу X. Функция Goto строит замыкания вида:

[ A → α X • β ] если ситуация [ A → α • X β ] Î closure(I). Если в I есть ситуация в которой следует заданный символ X, она превращается в (2).

I={[E’→E*], [E→E*+T]}

Построим результат Goto(I,+):

[E→*E+T]

[T →*T•F]

[T →*F]

[F →*(E)]

[F →*id].