Название спецкурса на русском языке
Теория и практика разработки компиляторов
Перевод названия курса на английский язык
Theory and Practice of Compiler Development
Авторы курса
Борисенко Владимир Витальевич, Леонов Александр Георгиевич
Целевая аудитория
3 курс
4 курс
5 курс
6 курс
Магистранты
Подразделение
[Кафедра теоретической информатики]
Семестр
Полгода (весна)
Тип курса
Спецкурс по выбору студента
Учебный год
2021/22
День недели
среда
Время
16:45-18:20
Формат проведения
Дистанционно
Аудитория
[Дистанционно]
Аннотация
Рассматривается применение теории формальных языков и грамматик в практических задачах, связанных с обработкой текстов. Используются утилиты lex и и yacc. Утилита lex разбивает текст на лексемы, заданные в виде регулярных выражений, и выполняет связанные с этим действия, определенные в программе пользователя. Разбор выполняется сканером с помощью конечного автомата, построенного по набору лексем. Утилита yacc предназначена для синтаксического разбора языка, заданного контекстно-свободной грамматикой. По записи грамматики и указанным семантическим программам, связанным со свертками по правилам грамматики, утилита yacc строит парсер, которые осуществляет алгоритм разбора с помощью конечного автомата со стеком. Парсер является основной частью компилятора формального языка, он переводит текст с исходного языка в промежуточное представление (например, на язык виртуальной стековой машины либо на язык RTL, представляющий собой обобщенный Ассемблер). Затем по промежуточному представлению либо генерируется выходной код программы, либо реализуется интерпретатор, который исполняет промежуточный код непосредственно.

В конце курса рассматривается компилятор модельного алгоритмического языка. Это язык с динамической типизацией, похожий на язык Python, но синтаксис которого ближе к C/С++. Компилятор переводит программу в промежуточный код, представляющий собой язык виртуальной стековой машины (аналогичный промежуточный код используют языки Java, C#, Python). Затем этот код интерпретируется при выполнении программы. Рассматриваемый проект объединяет в себе компилятор и интерпретатор языка, он реализован на C++ c использованием утилит lex и yacc (вернее, их свободных версий flex и bison) и стандартной библиотеки классов STL языка C++.
Дополнительная информация

Ссылка на сайт курса: http://mech.math.msu.su/~vvb/FormLang/index.html