- •Лекции по построению компилятора на Pascal Автор неизвестен Оглавление
- •1. Введение введение
- •2. Синтаксический анализ выражений начало
- •Одиночные цифры
- •Выражения с двумя цифрами
- •Общая форма выражения
- •Использование стека
- •Умножение и деление
- •Круглые скобки
- •Унарный минус
- •Слово об оптимизации
- •3. Снова выражения введение
- •Переменные
- •Функции
- •Подробнее об обработке ошибок
- •Присваивание
- •Многосимвольные токены.
- •Пробелы
- •4. Интерпретаторы введение
- •Интерпретатор
- •Немного философии
- •5. Управляющие конструкции введение
- •Немного основ
- •Оператор if
- •Оператор while
- •Оператор loop
- •Цикл for
- •Оператор do
- •Оператор break
- •Заключение
- •6. Булевы выражения введение
- •Грамматика
- •Операторы отношений
- •Исправление грамматики
- •Синтаксический анализатор
- •Объединение с управляющими конструкциями
- •Добавление присваиваний
- •7. Лексический анализ введение
- •Лексический анализ
- •Конечные автоматы и альтернативы
- •Эксперименты по сканированию
- •Конечные автоматы
- •Новые строки
- •Операторы
- •Списки, запятые и командные строки.
- •Становится интересней
- •Возвращение символа
- •Распределенные сканеры против централизованных
- •Объединение сканера и парсера
- •Пара комментариев:
- •Заключение
- •8. Немного философии введение
- •Дорога домой
- •Почему это так просто?
- •Здесь нет ничего сложного!
- •Заключение
- •9. Вид сверху введение
- •Верхний уровень
- •Структура паскаля
- •Расширение
- •Объявления
- •Структура си
- •10. Представление "tiny" введение
- •Подготовка
- •Объявления
- •Объявления и идентификаторы
- •Инициализаторы
- •Выполнимые утверждения
- •Булева логика
- •Управляющие структуры
- •Лексический анализ
- •Многосимвольные имена переменных
- •Снова операторы отношений
- •Ввод/вывод
- •Заключение
- •11. Пересмотр лексического анализа введение
- •Предпосылка
- •Проблема
- •Решение
- •Исправление компилятора
- •Заключение
- •12. Разное введение
- •Точки с запятой
- •Синтаксический сахар
- •Работа с точками с запятой
- •Компромисс
- •Комментарии
- •Односимвольные разделители
- •Многосимвольные разделители
- •Односторонние комментарии
- •Заключение
- •13. Процедуры введение
- •Последнее отклонение
- •Основа для экспериментов
- •Объявление процедуры
- •Вызов процедуры
- •Передача параметров
- •Семантика параметров
- •Передача по значению
- •Что неправильно?
- •Передача по ссылке
- •Локальные переменные
- •Заключение
- •14. Типы введение
- •Что будет дальше?
- •Добавление записей
- •Распределение памяти
- •Объявление типов
- •Присваивания
- •Трусливый выход
- •Более приемлемое решение
- •Литеральные аргументы
- •Аддитивные выражения
- •Почему так много процедур?
- •Мультипликативные выражения
- •Умножение
- •Деление
- •Завершение
- •Приводить или не приводить
- •Заключение
- •15. Назад в будущее введение
- •Новое начало, старое направление
- •Начинаем заново?
- •Модуль input
- •Модуль output
- •Модуль error
- •Лексический и синтаксический анализ
- •Модуль scanner
- •Решения, решения
- •Синтаксический анализ
- •16. Конструирование модулей введение
- •Совсем как классический?
- •Расширение синтаксического анализатора
- •Термы и выражения
- •Присваивания
- •Булева алгебра
Лекции по построению компилятора на Pascal
Лекции по построению компилятора на Pascal Автор неизвестен Оглавление
1. Введение 5
ВВЕДЕНИЕ 5
ОСНОВА 7
2. Синтаксический анализ выражений 10
НАЧАЛО 10
ОДИНОЧНЫЕ ЦИФРЫ 10
ВЫРАЖЕНИЯ С ДВУМЯ ЦИФРАМИ 11
ОБЩАЯ ФОРМА ВЫРАЖЕНИЯ 13
ИСПОЛЬЗОВАНИЕ СТЕКА 13
УМНОЖЕНИЕ И ДЕЛЕНИЕ 14
КРУГЛЫЕ СКОБКИ 15
УНАРНЫЙ МИНУС 16
СЛОВО ОБ ОПТИМИЗАЦИИ 17
3. Снова выражения 19
ВВЕДЕНИЕ 19
ПЕРЕМЕННЫЕ 19
ФУНКЦИИ 20
ПОДРОБНЕЕ ОБ ОБРАБОТКЕ ОШИБОК 21
ПРИСВАИВАНИЕ 22
МНОГОСИМВОЛЬНЫЕ ТОКЕНЫ. 23
ПРОБЕЛЫ 24
4. Интерпретаторы 30
ВВЕДЕНИЕ 30
ИНТЕРПРЕТАТОР 31
НЕМНОГО ФИЛОСОФИИ 34
5. Управляющие конструкции 39
ВВЕДЕНИЕ 39
ПЛАН 39
НЕМНОГО ОСНОВ 40
ОПЕРАТОР IF 42
ОПЕРАТОР WHILE 44
ОПЕРАТОР LOOP 45
REPEAT-UNTIL 46
ЦИКЛ FOR 47
ОПЕРАТОР DO 48
ОПЕРАТОР BREAK 49
ЗАКЛЮЧЕНИЕ 52
6. Булевы выражения 57
ВВЕДЕНИЕ 57
ПЛАН 57
ГРАММАТИКА 57
ОПЕРАТОРЫ ОТНОШЕНИЙ 58
ИСПРАВЛЕНИЕ ГРАММАТИКИ 59
СИНТАКСИЧЕСКИЙ АНАЛИЗАТОР 61
ОБЪЕДИНЕНИЕ С УПРАВЛЯЮЩИМИ КОНСТРУКЦИЯМИ 68
ДОБАВЛЕНИЕ ПРИСВАИВАНИЙ 68
7. Лексический анализ 71
ВВЕДЕНИЕ 71
ЛЕКСИЧЕСКИЙ АНАЛИЗ 71
КОНЕЧНЫЕ АВТОМАТЫ И АЛЬТЕРНАТИВЫ 73
ЭКСПЕРИМЕНТЫ ПО СКАНИРОВАНИЮ 73
ПРОБЕЛ 74
КОНЕЧНЫЕ АВТОМАТЫ 75
НОВЫЕ СТРОКИ 76
ОПЕРАТОРЫ 77
СПИСКИ, ЗАПЯТЫЕ И КОМАНДНЫЕ СТРОКИ. 78
СТАНОВИТСЯ ИНТЕРЕСНЕЙ 79
ВОЗВРАЩЕНИЕ СИМВОЛА 83
РАСПРЕДЕЛЕННЫЕ СКАНЕРЫ ПРОТИВ ЦЕНТРАЛИЗОВАННЫХ 85
ОБЪЕДИНЕНИЕ СКАНЕРА И ПАРСЕРА 85
Пара комментариев: 91
ЗАКЛЮЧЕНИЕ 97
8. Немного философии 99
ВВЕДЕНИЕ 99
ДОРОГА ДОМОЙ 99
ПОЧЕМУ ЭТО ТАК ПРОСТО? 100
ЗДЕСЬ НЕТ НИЧЕГО СЛОЖНОГО! 101
ЗАКЛЮЧЕНИЕ 105
9. Вид сверху 106
ВВЕДЕНИЕ 106
ВЕРХНИЙ УРОВЕНЬ 106
СТРУКТУРА ПАСКАЛЯ 107
РАСШИРЕНИЕ 108
ОБЪЯВЛЕНИЯ 109
СТРУКТУРА СИ 111
10. Представление "TINY" 116
ВВЕДЕНИЕ 116
ПОДГОТОВКА 116
ОБЪЯВЛЕНИЯ 119
ОБЪЯВЛЕНИЯ И ИДЕНТИФИКАТОРЫ 120
ИНИЦИАЛИЗАТОРЫ 121
ТАБЛИЦА ИДЕНТИФИКАТОРОВ 123
ВЫПОЛНИМЫЕ УТВЕРЖДЕНИЯ 123
БУЛЕВА ЛОГИКА 128
УПРАВЛЯЮЩИЕ СТРУКТУРЫ 132
ЛЕКСИЧЕСКИЙ АНАЛИЗ 134
МНОГОСИМВОЛЬНЫЕ ИМЕНА ПЕРЕМЕННЫХ 138
СНОВА ОПЕРАТОРЫ ОТНОШЕНИЙ 140
ВВОД/ВЫВОД 141
ЗАКЛЮЧЕНИЕ 143
11. Пересмотр лексического анализа 159
ВВЕДЕНИЕ 159
ПРЕДПОСЫЛКА 159
ПРОБЛЕМА 160
РЕШЕНИЕ 161
ИСПРАВЛЕНИЕ КОМПИЛЯТОРА 164
ЗАКЛЮЧЕНИЕ 166
TINY VERSION 1.1 166
12. Разное 179
ВВЕДЕНИЕ 179
ТОЧКИ С ЗАПЯТОЙ 179
СИНТАКСИЧЕСКИЙ САХАР 180
РАБОТА С ТОЧКАМИ С ЗАПЯТОЙ 181
КОМПРОМИСС 184
КОММЕНТАРИИ 184
ОДНОСИМВОЛЬНЫЕ РАЗДЕЛИТЕЛИ 184
МНОГОСИМВОЛЬНЫЕ РАЗДЕЛИТЕЛИ 186
ОДНОСТОРОННИЕ КОММЕНТАРИИ 187
ЗАКЛЮЧЕНИЕ 188
13. Процедуры 189
ВВЕДЕНИЕ 189
ПОСЛЕДНЕЕ ОТКЛОНЕНИЕ 189
ОСНОВЫ 190
ОСНОВА ДЛЯ ЭКСПЕРИМЕНТОВ 190
ОБЪЯВЛЕНИЕ ПРОЦЕДУРЫ 195
ВЫЗОВ ПРОЦЕДУРЫ 199
ПЕРЕДАЧА ПАРАМЕТРОВ 200
СЕМАНТИКА ПАРАМЕТРОВ 202
ПЕРЕДАЧА ПО ЗНАЧЕНИЮ 205
ЧТО НЕПРАВИЛЬНО? 209
ПЕРЕДАЧА ПО ССЫЛКЕ 212
ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕ 213
ЗАКЛЮЧЕНИЕ 216
14. Типы 218
ВВЕДЕНИЕ 218
ЧТО БУДЕТ ДАЛЬШЕ? 218
ТАБЛИЦА ИДЕНТИФИКАТОРОВ 219
ДОБАВЛЕНИЕ ЗАПИСЕЙ 223
РАСПРЕДЕЛЕНИЕ ПАМЯТИ 224
ОБЪЯВЛЕНИЕ ТИПОВ 225
ПРИСВАИВАНИЯ 226
ТРУСЛИВЫЙ ВЫХОД 229
БОЛЕЕ ПРИЕМЛЕМОЕ РЕШЕНИЕ 230
ЛИТЕРАЛЬНЫЕ АРГУМЕНТЫ 232
АДДИТИВНЫЕ ВЫРАЖЕНИЯ 233
ПОЧЕМУ ТАК МНОГО ПРОЦЕДУР? 236
МУЛЬТИПЛИКАТИВНЫЕ ВЫРАЖЕНИЯ 237
УМНОЖЕНИЕ 237
ДЕЛЕНИЕ 239
ЗАВЕРШЕНИЕ 241
ПРИВОДИТЬ ИЛИ НЕ ПРИВОДИТЬ 242
ЗАКЛЮЧЕНИЕ 244
15. Назад в будущее 245
ВВЕДЕНИЕ 245
НОВОЕ НАЧАЛО, СТАРОЕ НАПРАВЛЕНИЕ 245
НАЧИНАЕМ ЗАНОВО? 247
МОДУЛЬ INPUT 247
МОДУЛЬ OUTPUT 249
МОДУЛЬ ERROR 250
ЛЕКСИЧЕСКИЙ И СИНТАКСИЧЕСКИЙ АНАЛИЗ 251
МОДУЛЬ SCANNER 253
РЕШЕНИЯ, РЕШЕНИЯ 255
СИНТАКСИЧЕСКИЙ АНАЛИЗ 256
ССЫЛКИ 259
16. Конструирование модулей 260
ВВЕДЕНИЕ 260
СОВСЕМ КАК КЛАССИЧЕСКИЙ? 261
РАСШИРЕНИЕ СИНТАКСИЧЕСКОГО АНАЛИЗАТОРА 263
ТЕРМЫ И ВЫРАЖЕНИЯ 265
ПРИСВАИВАНИЯ 268
БУЛЕВА АЛГЕБРА 268