Кафедра математических и информационных технологий
Санкт-Петербургского академического университета.
Лекции по теории формальных языков.
Весенний семестр 2010/11 учебного года
Примерная программа курса
Введение. Языки и операции над ними
- Введение. Схема компилятора.
- Языки и операции над ними.
Распознаватели языков
- Детерминированные конечные автоматы.
- Недетерминированные конечные автоматы.
- Операции над автоматными языками.
- Регулярные языки.
- Автоматы с магазинной памятью.
Контекстно-свободные грамматики
- Грамматики и порождаемые ими языки. Классы грамматик и языков.
- Контекстно-свободные грамматики и языки.
- Лемма о накачке.
- Операции над контекстно-свободными языками.
- Контекстно-свободные грамматики и автоматы с магазинной памятью.
- Неукорачивающие контекстно-свободные грамматики.
- Приведённые контекстно-свободные грамматики.
- Устранение циклов, левой рекурсии и левая факторизация контекстно-свободных грамматик.
Лексический анализ
- Основные понятия лексического анализа. Работа лексического анализатора.
Нисходящий синтаксический анализ
- Разделённые грамматики.
- LL(1)-грамматики.
- Алгоритм анализа LL(1)-грамматик.
- Вычисление множеств выбора правил.
- Обработка синтаксических ошибок при LL-анализе.
- LL(k)-грамматики.
- Метод рекурсивного спуска.
Синтаксический анализ на основе отношений предшествования
- Общая схема восходящего анализа.
- Грамматики простого предшествования.
- Грамматики слабого предшествования.
- Отношения операторного предшествования.
LR-анализ
- Общая схема LR-анализа.
- Активные префиксы и LR(k)-пункты.
- LR(0)- и SLR(1)-анализ.
- LR(1)- и LALR(1)-анализ.
- LR-анализ с неоднозначными грамматиками.
- Обработка синтаксических ошибок при LR-анализе.
- LR(k)-грамматики.
Основная литература
- Замятин А. П., Шур А. М. Языки, грамматики, распознаватели: Учебное пособие. Екатеринбург : Изд-во Урал. ун-та, 2007.
Дополнительная литература
- Ахо А., Лам М., Сети Р., Ульман Дж. Компиляторы: принципы, технологии и инструментарий. М.: ООО "И.Д. Вильямс", 2008.
- Ахо А., Ульман Дж. Теория синтаксического анализа, перевода и компиляции. М.: Мир, 1978.
- Мартыненко Б. К. Языки и трансляции: Учеб. пособие. СПб.: Издательство С.-Петербургского университета, 2004.
Слайды лекций
-
Введение. Языки и операции над ними.
Детерминированные конечные автоматы.
-
Недетерминированные конечные автоматы.
Операции над автоматными языками. Регулярные языки.
Автоматные фрагменты языков программирования.
-
Автоматы с магазинной памятью. Грамматики.
-
Контекстно-свободные грамматики и языки: определения и примеры.
Лемма о накачке.
-
Операции над контекстно-свободными языками.
Контекстно-свободные языки и автоматы с магазинной памятью.
Контекстно-свободные грамматики и языки программирования.
Аннулирующие нетерминалы контекстно-свободной грамматики.
-
Преобразования контекстно-свободных грамматик.
-
Преобразования контекстно-свободных грамматик (окончание).
Лексический анализ.
Разделённые грамматики.
-
Синтаксический анализ для LL(1)-грамматик.
-
Синтаксический анализ для LL(1)-грамматик (окончание).
LL(k)-грамматики.
Синтаксический анализ методом рекурсивного спуска.
Общая схема восходящего синтаксического анализа.
-
Грамматики простого предшествования.
-
Грамматики слабого предшествования.
Отношения операторного предшествования.
-
Общая схема LR-анализа.
Активные префиксы и LR(k)-пункты.
-
LR(0)-, SLR(1)-, LR(1)- и LALR(1)-анализ.
-
LR-анализ с неоднозначными грамматиками.
Обработка синтаксических ошибок при LR-анализе.
LR(k)-грамматики.
Итоги.
Вопросы к экзамену
- Цепочки, вхождения, языки.
- Операции над языками.
- Детерминированные конечные автоматы (ДКА): основные определения и примеры.
- Приведённые ДКА.
Лемма о стабильности отношения эквивалентности состояний ДКА.
- Теорема о приведённом ДКА.
- Алгоритм построения классов эквивалентных состояний ДКА.
- Недетерминированные конечные автоматы (НКА): основные определения и примеры.
Теорема Рабина-Скотта.
- Алгоритм построения ДКА по НКА.
- Недетерминированные конечные автоматы с ε-переходами (ε-НКА):
основные определения.
Теорема о классе языков, распознаваемых ε-НКА.
- Алгоритм построения ДКА по ε-НКА.
- Замкнутость класса автоматных языков относительно некоторых операций.
- Регулярные языки. Теорема Клини.
- Регулярные выражения.
Построение конечного автомата по регулярному выражению.
Регулярные фрагменты языков программирования.
- Пример нерегулярного языка.
- Автоматы с магазинной памятью (МПА): основные определения и примеры.
- Сравнение распознающих возможностей ДМПА и НМПА.
- Грамматики: основные определения и примеры.
- Иерархия Хомского, соотношения между некоторыми классами языков.
- КС-грамматики, КС-языки, деревья вывода: определения и примеры.
Однозначность КС-грамматики.
- Лемма о накачке.
- Примеры применения леммы о накачке.
- Теорема о языках в однобуквенных алфавитах и периодических множествах.
- Замкнутость класса КС-языков относительно некоторых операций.
- Незамкнутость класса КС-языков относительно некоторых операций.
Теорема о пересечении КС-языка с регулярным языком.
- Распознавание КС-языка НМПА.
- Форма Бэкуса-Наура.
- Доказательство того, что язык программирования Паскаль не является КС-языком.
Контекстные условия в спецификациях языков программирования.
- Нахождение аннулирующих нетерминалов КС-грамматики.
- Построение эквивалентной неукорачивающей КС-грамматики.
- Нахождение производящих нетерминалов КС-грамматики.
- Нахождение достижимых нетерминалов КС-грамматики.
- Построение эквивалентной приведённой КС-грамматики.
- Устранение циклов из КС-грамматики.
- Устранение левой рекурсии из КС-грамматики.
- Левая факторизация КС-грамматики.
- Лексический анализ.
- Синтаксический анализ для разделённых грамматик.
- Определение LL(1)-грамматики, вспомогательные определения и примеры.
- Теорема о равносильных определениях LL(1)-грамматики.
- Теорема о нелеворекурсивности LL(1)-грамматики.
- Синтаксический анализ для LL(1)-грамматик.
- Вычисление множеств выбора правил.
- Обработка синтаксических ошибок при LL(1)-анализе.
- LL(k)-грамматики.
- Синтаксический анализ методом рекурсивного спуска.
- Общая схема восходящего синтаксического анализа.
- Отношения простого предшествования.
- Синтаксический анализ для грамматик простого предшествования.
- Синтаксический анализ для грамматик слабого предшествования.
- Синтаксический анализ, основанный на отношениях операторного предшествования.
- Общая схема и пример LR-анализа.
- Активные префиксы, LR(k)-пункты, автомат пунктов.
Лемма об активном префиксе и базисном пункте.
Лемма о достижимости допустимого пункта из базисного пункта.
- Основная теорема LR-анализа, её следствия. LR(0)-автомат.
- Алгоритм и пример построения LR(0)-автомата.
- LR(0)-анализ.
- SLR(1)-анализ.
- LR(1)-анализ.
- LALR(1)-анализ.
- LR-анализ с неоднозначными грамматиками.
- Обработка синтаксических ошибок при LR-анализе.
- LR(k)-грамматики.