Содержание Предисловие ....................................................................................... 10 Введение .............................................................................................. 12 От издательства ..................................................................................... 13 Глава 1. Формальные языки и грамматики .......................... 14 Языки и цепочки символов. Способы задания языков ....................... 14 Цепочки символов. Операции над цепочками символов............. 14 Понятие языка. Формальное определение языка.......................... 16 Способы задания языков. Синтаксис и семантика языка .......... 17 Особенности языков программирования ...................................... 19 Грамматики и распознаватели ............................................................. 20 Формальное определение грамматики. Форма Бэкуса—Наура .. 20 Принцип рекурсии в правилах грамматики ................................. 2 2 Другие способы задания грамматик ............................................. 23 Распознаватели. Общая схема распознавателя .......................... 26 Виды распознавателей..................................................................... 29 Задача разбора.................................................................................. 30 Классификация языков и грамматик .................................................. 31 Классификация грамматик. Четыре типа грамматик по Хомскому .................................................................................... 32 Классификация языков.................................................................... 34 Классификация распознавателей.................................................... 36 Примеры классификации языков и грамматик ............................ 38 Цепочки вывода. Сентенциальная форма ........................................... 41 Вывод. Цепочки вывода .................................................................. 41 Сентенциальная форма грамматики. Язык, заданный грамматикой..................................................................................... 43 Левосторонний и правосторонний выводы................................... 44 Дерево вывода. Методы построения дерева вывода .................... 44 Проблемы однозначности и эквивалентности грамматик ................ 46 Однозначные и неоднозначные грамматики ................................. 46 Проверка однозначности и эквивалентности грамматик ............ 48 Правила, задающие неоднозначность в грамматиках................... 50 Контрольные вопросы и задачи ........................................................... 50 Вопросы ........................................................................................ 50 Задачи ............................................................................................ 51 Глава 2. Основные принципы построения трансляторов……….. 54 Трансляторы, компиляторы и интерпретаторы - общая схема работы .................................................................................... 54 Определения транслятора, компилятора, интерпретатора .......... 54 Этапы трансляции. Общая схема работы транслятора ................. 58 Понятие прохода. Многопроходные и однопроходные компиляторы .................................................................................... 61 Современные компиляторы и интерпретаторы.................................. 63 Компиляторы с языков высокого уровня...................................... 63 Интерпретаторы. Особенности построения интерпретаторов .... 67 Трансляторы с языка ассемблера («ассемблеры»)......................... 70 Макроязыки и макрогенерация ...................................................... 73 Таблицы идентификаторов. Организация таблиц идентификаторов 77 Назначение и особенности построения таблиц идентификаторов 77 Простейшие методы построения таблиц идентификаторов ....... 79 Построение таблиц идентификаторов по методу бинарного дерева ................................................................................................ 80 Хэш-функции и хэш-адресация...................................................... 83 Комбинированные способы построения таблиц идентификаторов ............................................................................. 91 Контрольные вопросы и задачи ........................................................... 93 Вопросы ....................................................................................... 93 Задачи ............................................................................................ 94 Глава 3. Лексические анализаторы ............................................. 96 Лексические анализаторы (сканеры). Принципы построения сканеров................................................................................................. 96 Назначение лексического анализатора.......................................... Принципы построения лексических анализаторов ........................ Регулярные языки и грамматики ........................................................ Регулярные и автоматные грамматики ..................................... Конечные автоматы......................................................................... Детерминированные и недетерминированные конечные автоматы .......................................................................................... Минимизация конечных автоматов .......................................... Регулярные множества и регулярные выражения........................ Свойства регулярных языков ..................................................... Построение лексических анализаторов ............................................... Три способа задания регулярных языков ..................................... Построение регулярного выражения для языка, заданного леволинейной грамматикой ......................................................... Построение конечного автомата на основе леволинейной грамматики … … … … … … … … … … … … … … … . . Примеры построения лексических анализаторов........................ Автоматизация построения лексических анализаторов (программа LEX) . . ………………………………………………. Контрольные вопросы и задачи .......................................................... Вопросы ........................................................................................... Задачи ............................................................................................ Глава 4. Синтаксические анализаторы ............................... Основные принципы работы синтаксических анализаторов ........... Назначение синтаксических анализаторов ............................... Автоматы с магазинной памятью.................................................. Построение синтаксических анализаторов .............................. Преобразование КС-грамматик. Приведенные грамматики ........... Преобразование грамматик. Цель преобразования ..................... Приведенные грамматики .............................................................. Удаление бесплодных символов.................................................... Удаление недостижимых символов .............................................. Устранение ^.-правил .................................................................. Устранение цепных правил ........................................................ Устранение левой рекурсии........................................................... Синтаксические распознаватели с возвратом ................................... Принципы работы распознавателей с возвратом......................... Нисходящий распознаватель с возвратом .................................... Распознаватель на основе алгоритма «сдвиг-свертка» ................ Нисходящие распознаватели КС-языков без возвратов ................... Левосторонний разбор по методу рекурсивного спуска ............ Расширенные варианты метода рекурсивного спуска ................ Щк)-грамматики ....................................................................... Синтаксический разбор для Щ1)-грамматик ............................. Восходящие распознаватели КС-языков без возвратов ................... 1_Р!(к)-грамматики........................................................................... Синтаксический разбор для 1_Р1(0)-грамматик............................. Синтаксический разбор для 1_П(1)-грамматик ............................ SLR(1) и LALR(1)-rpaMMaTHKH .................................................... Автоматизация построения синтаксических анализаторов (программа YACC)........................................................................ Синтаксические распознаватели на основе грамматик предшествования . . . . Общие принципы грамматик предшествования .......................... Грамматики простого предшествования...................................... Грамматики операторного предшествования .............................. Контрольные вопросы и задачи.......................................................... Вопросы ........................................................................................... Задачи............................................................................................... Глава 5. Генерация и оптимизация кода ......................................... Семантический анализ и подготовка к генерации кода ................... Назначение семантического анализа ............................................ Этапы семантического анализа ..................................................... Идентификация лексических единиц языков программирования ......................................................................... Распределение памяти ......................................................................... Принципы распределения памяти ................................................. Виды переменных и областей памяти........................................... 96 98 103 103 107 109 112 114 120 121 121 122 124 129 139 141 141 142 144 144 144 145 148 153 153 154 154 155 156 158 160 162 162 164 170 176 176 180 184 187 197 198 203 209 214 221 223 223 224 234 245 245 247 249 249 249 250 256 259 259 260 Виды областей памяти. Статическое и динамическое связывание ...................................................................................... Дисплей памяти процедуры (функции). Стековая организация дисплея памяти ........................................................... ............... Исключительные ситуации и их обработка ............................. Память для типов данных (RTTI-информация) ............................ Генерация кода. Методы генерации кода .......................................... Общие принципы генерации кода ................................................ Синтаксически управляемый перевод.......................................... Способы внутреннего представления программ ..................... Обратная польская запись операций............................................. Схемы СУ-перевода ....................................................................... Оптимизация кода. Основные методы оптимизации ........................ Общие принципы оптимизации кода ........................................ Оптимизация линейных участков программы ............................. Другие методы оптимизации программ....................................... Машинно-зависимые методы оптимизации ................................ Контрольные вопросы и задачи .......................................................... Вопросы ........................................................................................... Задачи ............................................................................................... 263 267 272 279 281 281 282 285 291 294 301 301 305 312 319 321 321 324 Глава 6. Современные системы программирования ............ 327 Понятие и структура системы программирования ...........................327 Понятие о системе программирования ........................................327 Возникновение систем программирования .................................328 Появление интегрированных сред разработки ........................330 Структура современной системы программирования ................332 Принципы функционирования систем программирования..............335 Функции текстовых редакторов в системах программирования…………………………………………………335 Компилятор как составная часть системы программирования 338 Компоновщик. Назначение и функции компоновщика..............339 Загрузчики и отладчики. Функции загрузчика ...........................341 Библиотеки подпрограмм...................................................................345 Библиотеки подпрограмм как составная часть систем программирования ………………………………………………….345 Статические библиотеки подпрограмм........................................347 Динамические библиотеки подпрограмм ....................................348 Ресурсы пользовательского интерфейса. Редакторы ресурсов ..350 Мобильность и переносимость программного обеспечения 351 Разработка приложений в архитектуре «клиент-сервер» ..................357 История возникновения приложений с архитектурой «клиент-сервер»…………………………………………………….357 Структура приложения, построенного в архитектуре «клиент-сервер»..............................................................................358 Современные серверы данных. Язык запросов данных..............360 Принципы создания приложений в архитектуре «клиент-сервер» ..............................................................................363 Разработка программ в многоуровневой архитектуре .....................365 Принципы разработки приложений в многоуровневой архитектуре .....................................................................................365 Технологии взаимодействия с сервером приложений................367 Организация серверов приложений ..............................................371 Возможности многоуровневой архитектуры ...............................372 Разработка программного обеспечения для сети Интернет .......373 Контрольные вопросы и задачи ..........................................................382 Вопросы ...........................................................................................382 Задачи.............................................. ................................................384 Указатель литературы .................................................................. 386 Алфавитный указатель.................................................................. 390