
- •Глава 1. Введение 2
- •Глава 2. Лексический анализ 6
- •2.4. Построение детерминированного конечного
- •Глава 3. Синтаксический анализ 20
- •Глава 8. Генерация кода 76
- •Глава 9. Системы автоматизации построения трансляторов 120
- •Глава 1. Введение
- •1.1. Место компилятора в программном обеспечении
- •1.2. Структура компилятора
- •Глава 2. Лексический анализ
- •2.1. Регулярные множества и регулярные выражения
- •2.2. Конечные автоматы
- •2.5. Программирование лексических анализаторов
- •2.6. Конструктор лексических анализаторов lex
- •Глава 3. Синтаксический анализ
- •3.1. Основные понятия и определения
- •3.2. Таблично-управляемый предсказывающий разбор
- •3.2.1. Алгоритм разбора сверху-вниз
- •3.2.2. Множества first и follow.
- •3.2.4. Ll(1)-грамматики
- •3.2.5. Удаление левой рекурсии
- •3.2.6. Левая факторизация
- •3.2.7. Рекурсивный спуск
- •3.2.8. Диаграммы переходов для рекурсивного спуска
- •3.2.9. Восстановление после синтаксических ошибок
- •3.3. Разбор снизу-вверх типа сдвиг-свертка
- •3.3.1. Основа
- •3.3.2. Lr(k)-анализаторы
- •3.3.4. Конфликты разбора типа сдвиг-свертка
- •3.3.5. Восстановление после синтаксических ошибок
- •Глава 4. Промежуточные представления программы
- •4.1. Представление в виде ориентированного графа
- •4.2. Трехадресный код
- •4.3. Линеаризованные представления
- •4.4. Организация информации в генераторе кода
- •4.5. Уровень промежуточного представления
- •Глава 5. Элементы теории перевода
- •5.1. Преобразователи с магазинной памятью
- •5.2. Синтаксически управляемый перевод
- •5.3. Атрибутные грамматики
- •5.3.1. Определение атрибутных грамматик
- •5.3.2. Атрибутированное дерево разбора
- •5.3.3. Язык описания атрибутных грамматик
- •Глава 6. Контекстные условия языков программирования
- •6.1. Описание областей видимости и блочной структуры
- •6.2. Структура среды Модулы-2
- •6.3. Занесение в среду и поиск объектов
- •Глава 7. Организация таблиц символов компилятора
- •7.1. Таблицы идентификаторов и таблицы символов
- •7.2. Таблицы идентификаторов
- •7.3. Таблицы символов и таблицы расстановки
- •7.4. Функции расстановки.
- •7.5. Таблицы на деревьях
- •7.7. Сравнение различных методов реализации таблиц
- •Глава 8. Генерация кода
- •8.1. Модель машины
- •8.2. Динамическая организация памяти
- •8.3. Назначение адресов
- •8.4. Трансляция переменных.
Глава 5. Элементы теории перевода
5.1. Преобразователи с магазинной памятью
Преобразователем с магазинной памятью (МП-преобразователем)
называется восьмерка P=(Q,T,Г,П,Ф,q0,Z0,F), где Q - множество
состояний, T - конечный входной алфавит, Г - конечный алфавит
магазинных символов, П - конечный выходной алфавит, Ф - отображение
множества Qx(T U {e})xГ в множество конечных подмножеств множества
QxГ*xП*, q0<-Q - начальное состояние, Z0<-Г - начальный символ
магазина, F<-Q - множество заключительных состояний.
Определим конфигурацию преобразователя P как четверку (q,x,u,y),
где q<-Q - состояние, x<-T* - цепочка на входной ленте, u<-Г* -
содержимое магазина, y<-П* - цепочка на выходной ленте, выданная
вплоть до настоящего момента. Если Ф(q,a,Z) содержит (r,u,z), то будем
писать (q,ax,Zw,y)|- (r,x,uw,yz) для любых x<-A*, w<-Г* и y<-П*.
Рефлексивное и транзитивное замыкание отношения |- будем обозначать
|-*.
Цепочку y назовем выходом для x, если (q0,x,Z0,e)|- *(q,e,u,y)
для некоторых q<-F и u<-Г*. Переводом (или преобразованием),
определяемым МП-преобразователем P (обозначается t(P)), назовем
множество {(x,y)|(q0,x,Z0,e)|- *(q,e,u,y) для некоторых q<-F и u<-Г*}.
Будем говорить, что МП-преобразователь P=(Q,T,Г,П,Ф,q0,Z0,F)
детерминированный (ДМП-преобразователь), если выполняются следующие
условия:
1) для всех q<-Q, a<-T U {e} и Z<-Г множество Ф(q,a,Z)
содержит не более одного элемента,
2) если Ф(q,e,Z)#{}, то Ф(q,a,Z)={} для всех a<-T.
Пример 5.1. Перевод арифметического выражения в ПОЛИЗ.
ПОЛИЗ - Польская инверсная запись или, что то же, постфиксная
запись арифметических выражений. Трансляция может определяться
следующим ДМП:
Q={q0,+,*,),$};
T={буквы,+,*,(,),$}, здесь $ - концевой маркер;
Г={Z0,(,+,*};
П={буквы,+,*};
Функция переходов определяется таблицей на рис. 5.1.
+------------------------------------------------+
| Г | Q | T || Г* | Q | П |
|----+-----+-------||------------+------+------- |
| Z0 | q0 | буква || z | q0 | буква |
| Z0 | q0 | ( || z( | q0 | |
| Z0 | q0 | проч || z | проч | |
|----+-----+-------||------------+------+------- |
|( | ) | || e | q0 | |
|+,* | ) | || e | ) | +,* |
|----+-----+-------||------------+------+------- |
| + | * | || +* | q0 | |
| * | + | || *+ | q0 | |
|проч| +,* | || проч {+,*} | q0 | |
|----+-----+-------||------------+------+--------|
|+,* | $ | || e | $ | +,* |
| Z0 | $ | || e | | |
+------------------++----------------------------+
Рис. 5.1
76
+--------------------------------+
| Стек |Состояние| Вход |Выход|
|------+---------+---------+-----|
|Z0 | q0 | a*(b+c)$| a |
|Z0 | q0 | *(b+c)$| |
|Z0 | * | (b+c)$| |
|Z0* | q0 | (b+c)$| |
|Z0*( | q0 | b+c)$| |
|Z0*( | q0 | +c)$| b |
|Z0*( | + | c)$| |
|Z0*(+ | q0 | c)$| c |
|Z0*(+ | q0 | )$| |
|Z0*(+ | ) | $| + |
|Z0*( | ) | $| |
|Z0* | q0 | $| |
|Z0* | $ | | * |
|Z0 | $ | | |
+--------------------------------+
Рис. 5.2
Последовательность состояний автомата и магазина на строке
a*(b+c) изображены в таблице рис. 5.2.