В.А.Серебряков, М.П.Галочкин, Д.Р.Гончар, М.Г.Фуругян

 

«Теория и реализация языков программирования»,

 

учебное пособие для ВУЗов по специальности

прикладная физика и математика

(М.: МЗ-Пресс, 2003 г.)

 

 

 

Содержание

 

 

Предисловие

1.            Введение

1.1.         Место компилятора в программном обеспечении

1.2.         Структура компилятора

 

Страницы

по 1-му

изданию

 

7

8

8

9

 

 

 

2.            Языки и их представление

               2.1.         Алфавиты, цепочки и языки

               2.2.         Представление языков

               2.3.         Грамматики

                              2.3.1.     Формальное определение грамматики

                              2.3.2.     Типы грамматик и их свойства

               2.4.         Машины Тьюринга

                              2.4.1.     Неразрешимость проблемы останова

                              2.4.2.     Класс рекурсивных множеств

               2.5.         Связь машин Тьюринга и грамматик типа 0

               2.6.         Линейно-ограниченные автоматы и их

                              связь с контекстно-зависимыми грамматиками

 

13

13

15

17

17

19

20

22

23

24

 

27

 

 

3.            Лексический анализ

               3.1.         Регулярные множества и выражения

               3.2.         Конечные автоматы

               3.3.         Алгоритмы построения конечных автоматов

                              3.3.1.     Построение недетерминированного конечного

                                             автомата по регулярному выражению

                              3.3.2.     Построение детерминированного конечного

                                             автомата по недетерминированному

                              3.3.3.     Построение детерминированного конечного

                                             автомата по регулярному выражению

                              3.3.4.     Построение детерминированного конечного

                                             автомата с минимальным числом состояний

               3.4.         Связь регулярных множеств, конечных автоматов и

                               регулярных грамматик

               3.5.         Программирование лексического анализа

               3.6.         Конструктор лексических анализаторов LEX

 

32

34

36

40

 

40

 

42

 

43

 

47

 

49

53

57

 

 

 

4.            Синтаксический анализ

               4.1.         Контекстно-свободные грамматики и автоматы с

                              магазинной памятью

               4.2.         Преобразования КС-грамматик

                              4.2.1.     Алгоритм Кока-Янгера-Касами

               4.3.         Предсказывающий разбор сверху-вниз

                              4.3.1.     Алгоритм разбора сверху-вниз

                              4.3.2.     Функции FIRST и FOLLOW

                              4.3.3.     Конструирование таблицы

                                             предсказывающего анализатора

                              4.3.4.     LL(1)-грамматики

                              4.3.5.     Удаление левой рекурсии

                              4.3.6.     Левая факторизация

                              4.3.7.     Рекурсивный спуск

                              4.3.8.     Восстановление анализа после

                                             синтаксических ошибок

               4.4.         Разбор снизу-вверх типа сдвиг-свёртка

                              4.4.1.     Основа

                              4.4.2.     LR(1)- анализаторы

                              4.4.3.     Конструирование LR(1)-таблицы

                              4.4.4.     LR (1)-грамматики

                              4.4.5.     Восстановление анализа после

                                             синтаксических ошибок

                              4.4.6.     Варианты LR-анализаторов

 

62

 

62

69

70

71

71

74

 

77

78

79

80

81

 

83

83

83

85

89

92

 

95

95

 

 

 

5.            Элементы теории перевода

               5.1.         Преобразователи с магазинной памятью

               5.2.         Синтаксически управляемый перевод

                              5.2.1.     Схемы синтаксически управляемого перевода

                              5.2.2.     Обобщенные схемы синтаксически

                                             управляемого перевода

               5.3.         Атрибутные грамматики

                              5.3.1.     Определение атрибутных грамматик

                              5.3.2.     Классы атрибутных грамматик и их реализация

                              5.3.3.     Язык описания атрибутных грамматик

 

97

97

99

99

 

101

103

104

108

111

 

 

 

6.            Проверка контекстных условий

               6.1.         Описание областей видимости и блочной структуры

               6.2.         Занесение в среду и поиск объектов

 

115

115

117

 

 

 

7.            Организация таблиц символов

               7.1.         Таблицы идентификаторов

               7.2.         Таблицы расстановки

               7.3.         Таблицы расстановки со списками

               7.4.         Функции расстановки

               7.5.         Таблицы на деревьях

               7.6.         Реализация блочной структуры

               7.7.         Сравнение методов реализации таблиц

124

124

125

128

129

131

135

136

 

 

 

8.            Промежуточное представление программы

               8.1.         Представление в виде ориентированного графа

               8.2.         Трёхадресный код

               8.3.         Линеаризованные представления

               8.4.         Виртуальная машина Java

                              8.4.1.     Организация памяти

                              8.4.2.     Набор команд виртуальной машины

               8.5.         Организация информации в генераторе кода

               8.6.         Уровень промежуточного представления

 

137

137

139

142

144

145

145

147

148

 

 

 

9.            Генерация кода

               9.1.         Модель машины

               9.2.         Динамическая организация памяти

                              9.2.1.     Организация магазина со статической цепочкой

                              9.2.2.     Организация магазина с дисплеем

               9.3.         Назначение адресов

               9.4.         Трансляция переменных

               9.5.         Трансляция целых выражений

               9.6.         Трансляция арифметических выражений

               9.7.         Трансляция логических выражений

               9.8.         Выделение общих подвыражений

               9.9.         Трансляция объектно-ориентированных свойств

                              языков программирования

                              9.9.1.     Виртуальные базовые классы

                              9.9.2.     Множественное наследование

                              9.9.3.     Единичное наследование и виртуальные

                                             функции

                              9.9.4.     Множественное наследование и виртуальные

                                             функции

                              9.9.5.     Виртуальные базовые классы с виртуальными                                                      функциями

               9.10.      Генерация оптимального кода методами синтаксического

                              анализа

                              9.10.1.   Сопоставление образцов

                              9.10.2.   Синтаксический анализ для Т-грамматик

                              9.10.3.   Выбор дерева вывода наименьшей стоимости

                              9.10.4.   Атрибутная схема для алгоритма сопоставления

                                             образцов

 

149

150

152

154

158

159

160

163

164

172

180

 

184

184

185

 

186

 

187

 

189

 

191

191

195

200

 

202

 

 

 

10.          Системы автоматизации построения трансляторов

               10.1.      Система СУПЕР

               10.2.      Система YACC

 

207

207

209

 

 

 

А.           Семантика контекстно-свободных языков

               А.1.        Введение

               А.2.        Формальные свойства

               А.3.        Проверка на зацикленность

               А.4.        Простой язык программирования

               А.5.        Обсуждение

 

212

212

218

223

228

238

 

 

 

B.           Атрибутные грамматики

               В.1.        Введение

               В.2.        Определение атрибутных грамматик

               В.3.        Атрибутированное дерево разбора

               В.4.        Незацикленные атрибутные грамматики

               В.5.        Вычислительные последовательности и корректность.

                              Определение визита

               В.6.        Чистые многовизитные грамматики

               В.7.        Абсолютно незацикленные атрибутные грамматики

               В.8.        Простые многовизитные атрибутные грамматики

               В.9.        Одновизитные атрибутные грамматики

               В.10.      Многопроходные грамматики

 

245

245

246

247

248

250

 

251

253

257

259

260

 

 

 

C.           Задачи по разделам книги

               С.2.        Языки и их представление

                              С.2.1.     Алфавиты, цепочки и языки

                              С.2.2.     Представление языков

                              С.2.3.     Грамматики

               С.3.        Лексический анализ

                              С.3.1.     Регулярные множества и выражения

                              С.3.2.     Конечные автоматы

                              С.3.3.     Алгоритмы построения конечных автоматов

                              С.3.4.     Регулярные множества и их представления

                              С.3.5.     Алгебраические свойства регулярных множеств.

                                             Лемма о разрастании

               С.4.        Синтаксический анализ

                              С.4.1.     КС-грамматики и МП-автоматы

                              С.4.2.     Алгебраические свойства КС-языков.

                                             Лемма о разрастании

                              С.4.3.     Преобразования КС-грамматик

                              С.4.4.     Предсказывающий разбор сверху-вниз

                              С.4.5.     Разбор снизу-вверх типа сдвиг-свёртка

               С.5.        Элементы теории перевода

                              С.5.3.     Атрибутные грамматики

               С.9.        Генерация кода

                              С.9.1.     Трансляция арифметических выражений

                              С.9.2.     Трансляция логических выражений

                              С.9.3.     Генерация оптимального кода методами

                                             синтаксического анализа

 

Литература

 

268

268

268

268

269

274

274

276

277

277

277

 

278

278

281

 

282

285

287

290

290

291

291

292

 

292

 

293

 

 

 

 

 

 



Используются технологии uCoz