- •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. Контроль знаний
- •Глоссарий
3.5.3. Конечные преобразователи. (Простейший транслятор)
В его основе лежит конечный автомат.
Конечный преобразователь:
M= {Q, S, D, d0, q0, F},
где Q – множество состояний;
S - входной алфавит;
D - выходной алфавит;
d0 – функция отображения;
q0 – начальное состояние;
F – множество заключительных состояний.
Q * Sие -> Q*D*.
Конфигурация определяется: (q, x, y).
Если d(q0, a)= d(q1, b), то (q0, ax, y)|- (q1, x, yb).
Цепочка y называется выходом цепочки x, если имеет место следующее:
+
(q0, x, y)|--- (q1, x, y), где x Î S*, y Î A*, q1 Î F
+
|--- вывод за какое-то количество шагов.
Перевод, определяемый конечными преобразованиями, называется регулярным («правильным»): S:= a + S |a-S| -a | +a | a.
Любое арифметическое выражение может содержать любое количество операторов - + - - + + - - а - + - - а, то есть ошибки при трансляции не будет. Транслятор сделает так, чтобы выдавался один оператор. Это происходит следующим образом.
Количество состояний:
S {+, -, а}.
D {+, -, а}.
Функцию отношения зададим диаграммой:
Для первого идентификатора, Для оставшихся идентификаторов
так как не ставим знак «+»;
(a + a - a) = итог.
(q0,- + - - + - a + - - a + + - - - +a,e)|→ (q1, + - - + - a + - - a + + - - - +a,e)| |→
(q1, - - + - a + - - a + + - - - +a,e) |→ (q0, - + - a + - - a + + - - - +a,e) |→
(q1, + - a + - - a + + - - - +a,e) |→ (q1,- a + - - a + + - - - +a,e) |→
(q0,a + - - a + + - - - +a,e) |→ (q2,+ - - a + + - - - +a,a) |→
(q3,- - a + + - - - +a, a) |→ (q4,- a + + - - - + a, a) |→
(q3,a + + - - - +a, a+a) |→ (q2,+ + - - - +a, a+a) |→
(q3,+ - - - +a, a+a) |→ (q3,- - - +a, a+a) |→
(q4,- - +a, a+a) |→ (q3, - +a, a+a) |→
(q4,+a, a+a) |→ (q4,a, a+a) |→ (q2,e, a+a-a)
Конечный преобразователь назовем детерминированным , если:
"q Î Q, |d(q,a)| £ 1, где |d(q,a)|- мощность;
d (q,e)=0.
Р ассмотрим автомат: (íq0, q1ý, íaý, íbý, d, q0, q1, e);
d( q0, a) = (q0, b);
d( q0, e) = (q0, b);
(q0, a, e) |→ (q1, e, b) |→ (q1, e, b)
Нужно в заключительном состоянии запретить е – такты.
3.5.4. Преобразователи с магазинной памятью
Они могут быть получены путем добавления автомату с магазинной памятью выходной цепочки.
МП – преобразователь содержит 8 символов:
{Q, S, Г, D, d, q0, Z, F}, где все элементы означают то же, что и раньше, кроме функции отображения:
d: Q*S*Г -> Q1*Г**D* , где S - входной символ, Г – магазинный символ.
Конфигурация содержит 4 символа:
(q, aw, z, y),
где q – состояние;
aw – входная цепочка;
z – магазин;
y - входная цепочка.
d (q, a, gz) = (q1, az, b) – функция отображения;
(q, aw, gz, y)|¾ (q1, w, az, yb) Записывают только верх магазина (gz, az), дно не пишут.
Ц
+
епочку y называют выходом цепочки x, если: (+
q, х, z, y)|¾ (q1, w, a, y).Преобразователь переводит цепочку х в цепочку у опустошением магазина только тогда, когда имеет место следующее: (q, x, a, e)|¾ (q1, e, e, y).
Расширенный МП – преобразователь определяется аналогично расширенному МП – автомату.
Пример: Переведем польскую запись в некоторую цепочку. Используем все ту
же грамматику.
Запишем автомат:
{(q0,q1), (*,+,(,),i), (N T $), (*,+,(,),i), (d, q0, $, q1)}
(*,+,(,),i) – терминальные символы. (N – нетерминальные , T – терминальные).
Q*E*Г -> Q*Г**D*.
(q0, e, E) = (q0, e+T, ET+);
(q0, e, E) = (q0, T, T);
(q0, e, T) = (q0, T*F, TF*);
(q0, e, T) = (q0, F, F);
(q0, e, F) = (q0, (E), E);
(q0, e, F) = (q0, i, i);
(q0, a, a) = (q0, e, e);
(q0, e, e) = (q0, e, y).
i*(i+i) в этом случае мы должны получить iii+*.
(q0, i*(i+i), E, e) |¾ (q0, i*(i+i), T, T) |¾
(q0, i*(i+i), T*F, TF*) |¾ (q0, i*(i+i), T*(E), TE*) |¾
(
2
q0, i*(i+i), T*(E+T), TET+*) |¾ (q0, i*(i+i), T*(E+F), TEF+*) |¾(q0, i*(i+i), T*(E+i), TEi+*) |¾ (q0, i*(i+i), T*(T+i), TTi+*) |¾
(
7
q0, i*(i+i), T*(i+i), Tii+*) |¾ (q0, i*(i+i), F*(i+i), Fii+*) |¾(q0, i*(i+i), i*(i+i), iii+*) |¾ (q0, e, e$, iii+*) |¾ (q0, e, e, iii+*)
7 – сравнение выходной цепочки со входной.