Целью освоения дисциплины является получение базовых знаний в области теоретических основ проектирования компиляторов, а также овладение навыками практического применения программных средств, обеспечивающих реализацию: лексического и синтаксического анализаторов. В курсе рассматриваются основные методы синтаксического анализа, способы построения абстрактных синтаксических деревьев для исходных программ, и генерация промежуточного представления программ на базе таких деревьев. Рассматриваются вопросы низкоуровнвой генерации кода, вопросы связывания и семантического анализа.
-
Теория формальных языков. Распознаватели для формальных языков.
1.1. Понятие порождающей грамматики. Классификация грамматик и формальных языков.
1.2. Распознаватели для регулярных языков. Конечные автоматы.
1.3. Распознаватели для контекстно-свободных языков. МП автоматы.
-
Конструирование лексических анализаторов
2.1. Фаза лексического анализа. Понятие лексем.
2.2. Конструирование лексического анализатора с применением Flex.
-
Конструирование синтаксических анализаторов
3.1. Фаза синтаксического анализа. Неоднозначность контекстно-свободных грамматик.
3.2. Нисходящие и восходящие синтаксические анализаторы. LL(1) и LR(1) анализаторы.
3.3. Конструирование синтаксических анализаторов с применением Bison.
-
Семантический анализ и генерация кодакода.
4.1. Конструирование абстрактного синтаксического дерева. Вычисление семантических атрибутов.
4.2. Промежуточное представление программы. Трехадресный код.
4.3. Генерация машинного кода. Понятие оптимизации.