
- •3. Опорный конспект лекций
- •3.1. Введение, определение языка
- •3.1.1. Элементы теории языка и их грамматика. Символы, цепочки и операции над ними
- •Формальное определение языка
- •3.1.3. Отношения и операции над ними
- •3.1.4. Требования, предъявляемые к грамматикам
- •Способы представления синтаксиса языка. Задание бесконечного текста конечными средствами. Проблема разбора. Классификация языков
- •3.2. Сканеры (лексические анализаторы)
- •3.2.1. Автоматные грамматики и диаграмма состояний
- •Регулярные выражения и конечные автоматы
- •Недетерминированные конечные автоматы
- •3.3. Грамматики простого предшествования
- •3.3.1. Простые предшествования.
- •Отношения предшествования и их вычисление
- •Операторное предшествование
- •Вычисление отношений операторного предшествования. Алгоритм разбора на основе операторного предшествования
- •3.3.5. Предшествование более высокого порядка
- •3.3.6. Способ представления грамматики в оп
- •3.3.7. Предшествование более высокого порядка
- •3.3.8. Ограниченный контекст
- •Определение 1:1 ограниченного контекстного распознавателя
- •Алгоритм 1:1 ограниченного контекстного преобразователя
- •Примеры разбора цепочек по алгоритму 1:1 ограниченного контекстного преобразователя
- •Определение m: n - ограниченного контекста
- •3.4. Автоматы с магазинной памятью, [ мп-автомат ]
- •Операции над магазином:
- •Операции над состоянием:
- •Операции над входной цепочкой:
- •Автомат задаётся:
- •Варианты мп-автоматов (доопределение)
- •Эквивалентность мп-автоматов и кс-грамматик
- •Мп, работающий снизу вверх
- •Формальное определение для левой свертки
- •Восходящий распознаватель
- •Детерминированный мп-автомат
- •Проблема зацикливания
- •3.4.1. Общие методы синтаксического анализа.
- •Вопросы для самопроверки
- •Нисходящий разбор
- •Нисходящий преобразователь (распознаватель)
- •Моделирование мп –преобразователя. Нисходящий анализ с возвратом Синтез процедуры
- •Нисходящий разбор в терминах грамматик
- •Алгоритм нисходящего разбора
- •Пример:
- •Алгоритм восходящего разбора
- •3.4.2. Польская запись, тетрады, триады, деревья.
- •Перевод индексной записи в тетрады
- •3.5. Теория перевода
- •3.5.1. Формализмы определения перевода
- •3.5.2. Синтаксически управляемый перевод
- •3.5.3. Конечные преобразователи. (Простейший транслятор)
- •3.5.4. Преобразователи с магазинной памятью
- •Лабораторная работа №7 Поиск основы в грамматиках простого предшествования
- •5. Контроль знаний
- •Глоссарий
Варианты мп-автоматов (доопределение)
То, что проходим с верхнего символа магазина не зависит от того, что находится под ним:
Знак
"
"
соответствует знаку "|-".
Рассмотренным
МП-автоматом называется цепочка символов
,
где d
- отображение.
,
-
множество символов.
.
Если известно количество начальных символов, то можно, считав половину, установить маркер (е – такт).
е - такт из входной
цепочки символов не считывает.
Автомат
заносит некоторую часть цепочки (1/2),
затем верхним символом становится
некоторый маркер – S,
указывающий положение середины цепочки.
Далее помещаем очередной входной символ
в магазин и осуществляем замену по
правилу:
.
Эквивалентность мп-автоматов и кс-грамматик
Нужно показать, что МП-автомат построен именно для КС-грамматик (контекстно-свободных). Пусть мы имеем КС-грамматику:
и пусть в этой
грамматике есть правило
.
Построить
автомат, который определяет язык
,
генерируемый данной грамматикой:
.
.
.
П
ример:
E:=E+T
E:=T
T:=T*F
T:=F
F:=(E)
F:=i
q0 – начальное состояние; z0:=E – начальный символ магазина;
q2 – заключительное состояние.
Рассмотрим i*i+i:
Мп, работающий снизу вверх
Рассмотрим i+i*i в грамматике G(E). Рассмотрим правый вывод этой цепочки:
E=>E+T=>E+T*F=>+i+i*i.
Цепочка i+i*i сворачивается к цепочке F+i*i по правилу F:=i. Это левая свертка.
Формальное определение для левой свертки
Пусть
- грамматика.
-
правый вывод в ней, и имеется правило
.
Говорят, что правовыводимую цепочку
можно свернуть слева к цепочке
с помощью правила
.
Восходящий распознаватель
По КС-грамматике можно построить эквивалентный расширенный МП-автомат, работа которого заключается в отсечении основ. Для этого случая удобно представить магазин в виде цепочки, верхним символом которой является самый правый. Конфигурация автомата остается прежней, а отношения перехода несколько меняются.
П
усть есть автомат:



E:=E+T;
E:=T;
T:=T*F;
F:=(E);
F:=i.
Введем символ «маркер дна» - $, который не принадлежит грамматике, добавим его в магазин.
Автомат не сработал. Надо было не заменять в точке, а продолжать грузить дальше.
Рассмотрим цепочку i+i*i
Детерминированный мп-автомат
Среди рассмотренных ранее автоматов большинство было недетерминированных, т.е. в текущей конфигурации при следующем такте нужно было выбрать вариант конфигурации.
МП-автомат
называется недетерминированным, если
для
содержит не более одного состояния, и
- содержит не более одного состояния
(обозначается:
).
Проблема зацикливания
Конфигурация
автомата
для
называется зацикливающийся, если
существует такое состояние
.
Автомат ничего не считывает, а конфигурация магазина или растет, или не уменьшается.
3.4.1. Общие методы синтаксического анализа.
Для КС – грамматики входная цепочка разобрана (проанализирована), если известно дерево вывода. Но большинство компиляторов производит разбор моделированием МП – автомата, анализирующего цепочки либо сверху вниз, либо снизу вверх.
Способность МП – автомата проводить нисходящий разбор связана со способностью МП – распознавания отображать входные цепочки в последовательность левых выводов.
Восходящий разбор связан с отображением входной цепочки в последовательность обращенных правых выводов.
Проблему разбора теперь можно трактовать как последовательность левых или правых выводов.
Пусть G(N, S, P, S) – грамматика, правила которой занумерованы 1, 2 … р.
Пусть a - некоторая цепочка в этой грамматике, где a Î (NÈS*).
Тогда левый разбор цепочки a есть последовательность правил, примененных при левом выводе. S => +a.
Тогда правый разбор цепочки a - обращенная последовательность правил, примененных при правом выводе.
2 3 4 6 5 1 2
1) E:= E+T E =>T =>T*F =>F*F =>i*F =>i*(E) =>i*(E+T) =>i*(T+T) =>
2) E:=T 4 6 4 6
3) T:=T*F =>i*(F+T) =>i*(i+T) =>i*(i+F) =>i*(i+i).
4) T:=F;
5) F:=(E);
6) F:=i.
Левый разбор: 2 3 4 6 5 1 2 4 6 4 6.
2 3 5 1 4 6 2
E =>T =>T*F =>T*(E) =>T*(E+T) =>T*(E+F) =>T*(E+i) =>T*(T+i) =>
4 6 4 6
=>T*(F+i) =>T*(i+i) =>F*(i+i) =>i*(i+i).
Правый разбор: 6 4 6 4 2 6 4 1 5 3 2.
+
П
+
усть имеем G(N, S, P, S) - грамматику и занумерованные правила (см. выше).Будем писать ai Þ bL , если это левый вывод и ai Þ bR , если правый.