- 2 подхода к конструктивному описанию языка
- Приложения
- Примеры за пределами синтаксического анализа исходного кода:
- примитивный язык запросов к БД
- формальный верификатор ПО для работы с каналом связи
- статический анализ работы приложения с памятью
- регулярные выражения: языковые формулы, выход за пределы регулярных языков.
- почему регулярных языков недостаточно?
- примеры построения лексеров. flex. Обгон утилиты wc по производительности.
Магазинные автоматы; Рекурсивные автоматы. Свойства замкнутости КС языков. Композиция, прямое произведение и пересечение.
- примеры для языка Дика с несколькими типами скобок.
- Нормальная Форма Хомского, Ослабленная Нормальная Форма Хомского.
- Алгоритм приведения к НФХ.
- CYK-алгоритм синтаксического анализа для строк.
- Расширенная форма Бекуса-Наура.
- Генерация МП-автомата по грамматике. И наоборот.
- 4 типа языков по Хомскому.
- "Промежуточные типы грамматик". Мягко-контекстно-зависимые языки. Грамматики с контекстами.
- Обобщение CYK на графы.
- Алгоритм Хеллингса.
- КС-достижимость через операции линейной алгебры (перенесено на весну).
- Рекурсивный спуск.
- LL(k) - анализ. Множества FIRST и FOLLOW.
- Теория и практика. Практика построения LL-анализаторов.
- Boost::Spirit QI. Примеры. (Забыл рассказать. Не критично, рассмотрим).
- Устранение левой рекурсии.
- Обобщенный LL.
- SLR/LALR - реализации.
- Практика построения LR-анализаторов. ANTLR. Bison. Исправление сдвиг-свёртка и свёртка-свёртка конфликтов.
- Атрибутные грамматики. Наследуемые и синтезируемые атрибуты.
- Семантические действия.
- Последовательность преобразования программ при компиляции.
- Связь дерева синтаксического разбора и абстрактного синтаксического дерева.
- Семантический анализ.
- Оптимизационные проходы.
- Теория и современность.
- Clang как фронтенд: как это устроено на самом деле... <-- 1-е прочтение курса состоялось.
- Абстрактное синтаксическое дерево. Повторение.
- Обходы по дереву. AST Consumers. Паттерн ООП "посетитель", выполнение операций на вершинах AST. Примеры.
- Статический анализ программ на абстрактном синтаксическом дереве.
- Использование libclang + python clang для работы с астрактным синтаксическим деревом Clang.
- Реализация простейшего статического анализатора С/C++ кода на python при помощи libclang.
- Трансляция AST в промежуточное представление.
- Иерархия Хомского. Повторение.
- О некоторых грамматиках промежуточного типа: мягко-контекстно-зависимые грамматики (Mildly context-sensitive grammars).
- Грамматики с контекстами.
- Рассмотрение приложений: пример реализации анализатора подмножества языка Си с семантическим анализом, реализуемым непосредственно грамматическим разбором.
- Другие грамматики типа MCS: грамматики надстройки деревьев, параллельные грамматики.
- Матричный подход
- Тензорный подход
- О GLR-алгоритме
- О GLL-алгоритме на примере инструмента Iguana parser