- •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. Контроль знаний
- •Глоссарий
Регулярные выражения и конечные автоматы
Все символы в языках программирования попадают в один из следующих классов:
идентификаторы;
служебные слова;
целые числа;
операторы;
разделители;
комментарии.
Преобразуем диаграмму состояний в конечный автомат:
ДКА={ Q , S , δ , S , Z }
ДКА – детерминированный конечный автомат;
Q – множество состояний (алфавит нетерминальных символов);
S - множество входных символов (алфавит терминальных символов);
δ – функция отображения ( Q×S Q );
S – начальное состояние;
Z– конечное состояние.
Будем говорить, что ДКА допускает цепочку t , если δ (St)=P, где РÎZ.
Можно переписать правила из примера следующим образом:
δ (U0)=Z , δ (V1)=Z , δ (Z1)=U , δ (S1)=U , δ (Z0)=V , δ (S0)=V.
ДКА с состояниями Si и входной литерой tj можно представить матрицей B=||bij||, элемент которой bij=k, где k – номер состояния, и существуют функции отображения δ ( Si , tj )=Sk .
Недетерминированные конечные автоматы
Положение осложняется, если грамматика G содержит правила вида:V: = UT; W: = UT, то есть одинаковые правые части. В диаграмме состояний есть 2 дуги, помеченные символом Т, исходящих из U. Отображение δ становится неоднозначным, и поэтому автомат становится недетерминированным.
Пример:
НКА { Q , S , δ , S , Z }, δ(RT) = { Wi }, где Wi Î Q.
Напишем правила через функцию отображения:
δ(S0)=V,Q; δ(S1)=U,Q; δ(Q0)=V,Q; δ(Q1)=U,Q;
δ(U1)=Z; δ(V0)=Z; δ(Z1)=Z; δ(Z0)=Z.
Предположим, у нас есть цепочка 01001. Рассмотрим ее разбор по шагам:
Шаг |
Текущее состояние |
Остаток входной цепочки |
Возможные состояния |
Выбранное состояние |
1 |
S |
01001 |
V,Q |
Q |
2 |
Q |
1001 |
U,Q |
Q |
3 |
Q |
001 |
V,Q |
V |
4 |
V |
01 |
Z |
Z |
5 |
Z |
1 |
Z |
Z |
Для любой регулярной грамматики G можно построить диаграмму состояний, а следовательно, НКА. При работе НКА возникает неоднозначность при выборе следующего состояния, если существуют несколько дуг с одинаковой пометкой. Поэтому, прежде чем прийти к выводу о том, что строка не может быть принята НКА, необходимо перепробовать всевозможные последовательности переходов. Следовательно, читать входную цепочку необходимо не один раз, а Õ( ni ) , где n-число возможных переходов на j шаге.
Пусть мы имеем НКА {Q, S, δ, S, Z}. Нужно построить ДКА{Q’ S, δ’, S’, Z’}.
W
0 0
Z
S
1 0 0
1
N
1 0