- Артикул:00-01015197
- Автор: Гагарина Л.Г., Кокорева Е.В.
- ISBN: 978-5-8199-0404-6
- Обложка: Твердая обложка
- Издательство: Форум (все книги издательства)
- Город: Москва
- Страниц: 176
- Формат: 60х90/16
- Год: 2016
- Вес: 297 г
- Серия: Учебное пособие для ВУЗов (все книги серии)
Приведен систематизированный курс освоения теории формальных языков и грамматик - как регулярных, так и контекстно-свободных. Рассмотрены современные задачи лексического, синтаксического и семантического анализа, известные принципы их использования для решения практических задач создания программного обеспечения. Строгий стиль изложения сопровождается многочисленными примерами, а также задачами для самостоятельного решения в составе практических заданий, необходимых для глубокого усвоения материала.
Для студентов, аспирантов, научных сотрудников, преподавателей высших учебных заведений, а также для тех, кто интересуется математическими основами программирования.
Оглавление
Предисловие
Глава 1. Основы теории формальных языков
1.1. Терминология предметной области
1.2. Основные понятия и определения
1.3. Способы задания схем грамматик
1.3.1. Форма Бэкуса - Наура
1.3.2. Итерационная форма
1.3.3. Синтаксические диаграммы
1.4. Классификация грамматик и языков по Хомскому
1.4.1. Иерархия Хомского
1.4.2. Соотношения между типами грамматик и языков
1.4.3. Примеры грамматик и порождаемых ими языков
1.5. Разбор цепочек
1.5.1. Виды разбора
1.5.2. Дерево вывода. Нисходящий и восходящий разбор
1.5.3. Неоднозначность грамматик
1.6. Распознаватели. Некоторые подходы к классификации
1.6.1. Общая схема распознавателя
1.6.2. Виды распознавателей
1.6.3. Классификация распознавателей по типам языков
Глава 2. Лексический анализ
2.1. Лексический анализатор как конечный автомат
2.1.1. Диаграмма состояний-переходов конечного автомата
2.1.2. Формальное определение конечного автомата
2.1.3. Алгоритм разбора по диаграмме состояний конечного автомата
2.2. Регулярные грамматики и языки
2.2.1. Алгоритм разбора цепочки для леволинейной грамматики
2.2.2. Построение конечного автомата на основе регулярной грамматики
2.2.3. Построение леволинейной грамматики на основе конечного автомата
2.3. Преобразование конечных автоматов
2.3.1. О недетерминированном разборе
2.3.2. Преобразование недетерминированного конечного автомата в детерминированный
2.3.3. Построение детерминированного конечного автомата с минимальным числом состояний
2.4. Построение лексических анализаторов
2.4.1. Роль лексических анализаторов
2.4.2. Задачи лексического анализа
2.4.3. Токены, шаблоны, лексемы
2.4.4. Атрибуты токенов
2.4.5. Лексические ошибки
2.4.6. Определение токенов
2.4.7. Распознавание токенов
Глава 3. Синтаксический анализ
3.1. Приведенные грамматики
3.1.1. Удаление бесплодных символов
3.1.2. Удаление недостижимых символов
3.1.3. Исключение цепных правил
3.1.4. Исключение аннулирующих правил
3.2. КС-грамматики в нормальной форме
3.2.1. Грамматики в нормальной форме Хомского
3.2.2. Грамматики в нормальной форме Грейбах
3.3. Виды контекстно-свободных грамматик
3.3.1. Отношения между символами формальной грамматики
3.3.2. S-грамматики
3.3.3. Q-грамматики
3.3.4. LL-грамматики
3.3.5. LR-грамматики
3.3.6. Грамматики предшествования
3.4. Недетерминированные и детерминированные магазинные автоматы
3.4.1. Распознаватели на основе автоматов с магазинной памятью
3.4.2. Работа магазинного автомата
3.4.3. Язык, допускаемый магазинным автоматом
3.4.4. Построение магазинного автомата
3.5. Распознаватели КС-грамматик
3.5.1. Распознаватели с возвратом
3.5.2. Табличные распознаватели для КС-языков
3.5.3. Метод рекурсивного спуска
3.5.4. Нисходящий распознаватель без возвратов на основе LL(k)-грамматик
3.5.5. Восходящий распознаватель без возвратов на основе LR(k)-грамматик
3.5.6. Метод предшествования
3.6. Пример простейшего синтаксического анализатора выражений
3.7. Пример разработки синтаксического анализатора заданных конструкций языка СИ++
3.7.1. Обобщенная модель синтаксического анализатора
3.7.2. Обработка синтаксических ошибок
3.7.3. Стратегии восстановления состояния анализатора после ошибок
3.7.4. Нерекурсивный предиктивный анализ
3.7.5. Построение таблиц предиктивного анализа
3.7.6. Восстановление после ошибок в предиктивном анализе
Глава 4. Семантический анализ, промежуточное представление программы и генерация кода
4.1. Семантический анализ
4.1.1. Место семантического анализатора в общем процессе трансляции
4.1.2. Семантические таблицы
4.2. Промежуточное представление программы
4.2.1. Формы промежуточного представления
4.2.2. Уровень промежуточного представления
4.3. Генерация кода
4.4. Проектирование компилятора
Глава 5. Примеры разработки трансляторов
5.1. Разработка интерпретатора
5.1.1. Общие сведения
5.1.2. Спецификация языка СBAS
5.1.3. Некоторые особенности построения интерпретаторов
5.1.4. Циклы
5.1.5. Порядок построения выражений
5.2. Разработка процессора языка разметки документа
5.2.1. Некоторые способы разметки
5.2.2. Спецификация языка разметки eMark
5.3. Разработка ядра скриптового языка
5.3.1. Понятие сценария
5.3.2. Спецификация скриптового языка rManager
Рекомендуемая литература
Практические задания
К главе 1
К главе 2
К главе 3