
- •Теория вычислительных процессов и структур
- •1. Предварительные математические сведения
- •1.2. Операции над множествами Объединение множеств
- •Пересечение множеств
- •Разность множеств
- •1.3. Множества цепочек
- •1.4. Языки
- •1.5. Алгоритмы
- •1.6. Некоторые понятия теории графов
- •2. Введение в компиляцию
- •2.1. Задание языков программирования
- •2.2. Синтаксис и семантика
- •2.3. Процесс компиляции
- •2.4. Лексический анализ
- •2.5. Работа с таблицами
- •2.6. Синтаксический анализ
- •2.7. Генератор кода
- •Алгоритм.
- •2.8. Оптимизация кода
- •2.9. Исправление ошибок
- •2.10. Резюме
- •3. Теория языков
- •3.1. Способы определения языков
- •3.2. Грамматики
- •Пример.
- •3.3. Грамматики с ограничениями на правила
- •3.4. Распознаватели
- •3.5. Регулярные множества, их распознавание
- •3.6. Регулярные множества и конечные автоматы
- •3.7. Графическое представление конечных автоматов
- •3.8. Конечные автоматы и регулярные множества
- •3.9. Минимизация конечных автоматов
- •3.10. Контекстно-свободные языки
- •3.10.1. Деревья выводов
- •3.10.2. Преобразование кс–грамматик
- •3.10.3. Грамматика без циклов
- •3.10.4. Нормальная форма Хомского
- •3.10.5. Нормальная формула Грейбах
- •3.11. Автоматы с магазинной памятью
- •3.11.1. Основные определения
- •3.11.2. Эквивалентность мп-автоматов и кс-грамматик
- •4.1. Эквивалентность мп-автоматов и кс-грамматик
- •4.2. Ll(1)-грамматики
- •4.3. Ll(1)-таблица разбора
- •5. Синтаксический анализ снизу вверх
- •5.1. Разбор снизу вверх
- •5.2. Lr(1) - таблица разбора
- •5.3. Построение lr – таблицы разбора
- •5.4. Сравнение ll – и lr – методов разбора
- •6. Включение действий в синтаксис
- •6.1. Получение четверок
- •6.2. Работа с таблицей символов
- •7. Проектирование компиляторов
- •7.1. Число проходов
- •7.2. Таблицы символов
- •Identifier, type.
- •Int procedure rehash(int n)
- •Int procedure rehash(int n)
- •7.3. Таблица видов
- •8. Распределение памяти
- •8.1. Стек времени прогона
- •Integer a, b, X, y
- •Int table[1:10, -5:5].
- •8.2. Методы вызова параметров
- •8.3. Обстановка выполнения процедур
- •8.4. «Куча»
- •8.5. Счетчик ссылок
- •8.6. Сборка мусора
- •9. Генерация кода
- •(Тип – адреса, номер - блока, смещение).
- •9.2. Структура данных для генерации кода
- •9.3. Генерация кода для типичных конструкций
- •9.3.1. Присвоение
- •9.3.2. Условные зависимости
- •If b then c else d
- •9.3.3. Описание идентификаторов
- •9.3.4. Циклы
- •9.3.5. Вход и выход из блока
- •9.3.6. Прикладные реализации
- •9.4. Проблемы, связанные с типами
- •9.5. Время компиляции и время прогона
- •10. Исправление и диагностика ошибок
- •10.1. Типы ошибок
- •10.2. Лексические ошибки
- •10.3. Ошибки в употреблении скобок
- •Begin end
- •Case esac
- •10.4. Синтаксические ошибки
- •10.5. Методы исправления синтаксических ошибок
- •End begin
- •10.6. Предупреждения
- •10.7. Сообщения о синтаксических ошибках
- •10.8. Контекстно-зависимые ошибки
- •Identifier xyz not declared
- •Identifier blank alredy declared in block
- •10.9. Ошибки, связанные с употреблением типов
- •Int I; char c;
- •10.10. Ошибки, допускаемые во время прогона
- •10.11. Ошибки, связанные с нарушением ограничений
1.6. Некоторые понятия теории графов
Ориентированные графы
Определение.
Неупорядоченный ориентированный граф G– это пара (A, R):
A– множество элементов, называемых вершинами;
R– отношения на множествеА.
Пример:
G=(A, R),A={1, 2, 3, 4},R={(1, 1), (1, 2), (2, 3), (2, 4), (3, 4), (4, 1), (4, 3)} (рис. 1.7).
Рис. 1.7. Пример ориентированного графа
Пара (a, b) – называется дугой (или ребром) графаG.
Определение.
Пусть G1=(A1, R1)иG2=(A2, R2) -G1 и G2 равные (изоморфные), если существует биективное отображениеf:A1A2 такое, чтоaR1bтогда и только тогда, когдаf(a)R2f(b), т.е. в графеG1из вершиныав вершинуbведет дуга тогда и только тогда, когда в графеG2из вершины, соответствующейа, ведет дуга, соответствующая вершинеb.
Части вершинам и/или дугам графа иногда приписывают некоторую информацию (разметку). Такие графы называются помеченными.
Определение.
(A, R) – граф. Разметкой графа называется пара функцийfиg, гдеf(разметка вершины) отображаетАв некоторое множество, аg(разметка дуг) отображаетRв некоторое (возможно отличное от первого) множество.
Пусть G1=(А1, R1)иG2=(А2, R2) – равные помеченные графы, если существует такое биективное отображениеh: A1,….,An,что:
aR1bтогда и только тогда, когдаh(a)R2h(b), т.е. графы равны как непомеченные;
f1(a)=f2(h(a)), т.е. соответствующие вершины имеют одинаковые метки;
g1((a,b))=g2((h(a), h(b))), т.е. соответствующие дуги имеют одинаковые метки.
Пример.G1={{a, b, c}{(a, b), (b, c), (c, a)}} иG2={{0, 1, 2}{(1, 0), (2, 1), (0, 2)}} (рис. 1.8).
Разметка графа G1определяется формулами:
Разметка графа G2определяется формулами
Графы равны.
Определение.
Последовательность вершин (а0,а1, …,аn), n1 называется путем длиныnиз вершиныа0в вершинуаn, если для каждого 1i nсуществует дуга, выходящая изаi-1 и входящая в вершинуаi.
Циклом называется путь (а0, а1, …, аn), в которома0 = аn .
Граф называется сильно связанным, если для двух различных вершин aиbсуществует путь изавb.
Степенью по входувершиныаназовем число входящих в нее дуг, степенью по выходу– число выходящих из нее дуг.
Рис. 1.8. Равные помеченные графы
Ориентированные ациклические графы
Ациклическим графомназывается граф, не имеющий циклов (рис. 1.9).
Вершина, степень по входу которой 0, называется базовой.
Вершина, степень по выходу которой 0, называется листом(или концевой вершиной).
Если (a, b) – дуги ациклического графа, тоаназывается прямым предкомb, аb – прямым потомкома.
Рис. 1.9. Пример ациклического графа
Деревья
Определение.
Деревом Тназывается ориентированный графG=(A,R) со специальной вершинойrA, называемой корнем, у которого:
степень по входу rравна 0;
степень по входу всех остальных вершин дерева Травна 1;
каждая вершина достижима из r.
Определение.
Поддеревом дерева Т=(A, R) называется любое деревоТ=(A, R), у которого (рис. 1.10):
Aне пусто и содержится вА;
R=(AA)R;
ни одна вершина A - Aне является потомком вершиныA.
Рис. 1.10. Примеры дерева
Упорядоченные графы
Упорядоченным графом называется пара (A, R), гдеА- множество вершин, аR– множество линейно упорядоченных списков дуг, каждый элемент которого имеет вид ((a, b1), (a, b2),…,(a,bn)) (рис. 1.11).
Этот элемент показывает, что из вершины авыходитnдуг, причем первой из них считается дуга, приходящая вb1 , второй - вb2 и т.д.
Разметкой упорядоченного графаG=(A, R) назовем такую пару функцийf иg, что:
f:ASдля некоторого множестваS (fпомечает вершины);
gотображаетR в последовательность символов из некоторого множества Ттак, что образом списка ((a, b)). ((a, b)) является последовательность изn символов (помеченные дуги).
Рис. 1.11. Упорядоченный граф
Контрольные вопросы
Операции над множествами.
Отношения.
Замыкание отношений.
Отношения порядка.
Отображения.
Множества цепочек.
Операции над цепочками.
Языки.
Операции над языками.
Итерация языка.
Гомоморфизм.
Алгоритмы.
Частичные алгоритмы.
Полные алгоритмы.
Рекурсивные алгоритмы.
Задание алгоритмов.
Ориентированные графы.
Ориентированные ациклические графы.
Деревья. Упорядоченные графы.