Языки программирования Теория разработки трансляторов и практическая применимость технологий генерации компиляторов Лекционный курс Тема 1.Введение в теорию трансляции. Задачи и подходы трансляции. Тема 2.Грамматики Хомского и классификация языков программирования. Тема 3. Классификация языков программирования Тема 4. Компиляторы-компиляторов. Схема работы и применимость. Тема 5. Лексический анализ. Тема 6. Функции First и Follow и их роль в синтаксическом анализе контекстносвободных языков. Тема 7. Синтаксический анализ контекстно-свободных языков. Классификация и схема работы. Тема 8. Нисходящий синтаксический анализ. Рекурсивный спуск с возвратами и без возвратов. Тема 9. Восходящий синтаксический анализ. Грамматики простого предшествования, LR(k)-грамматики, SLR(k)-грамматики, LALR(k)-грамматики. Тема 10-11. Универсальные методы синтаксического анализа. Алгоритм Эрли и алгоритм Кока-Янгера-Касами Тема 12. Семантический анализ. Тема 13. Генерация промежуточного представления. Тема 14. Оптимизация Тема 15. Основы создания интерпретаторов и генераторов байт-кода. Тема 16. Основы создания компиляторов и ассемблеров. Практическое задание Лабораторная работа №1. Разработка грамматики нового языка программирования в форме Бэкуса — Наура или в виде грамматики выбранного компилятора компилятора. Лабораторная работа №2. Создание лексического анализатора выбранного языка в соответствии с утвержденной грамматикой и с использованием выбранного компилятора компилятора. Лабораторная работа №3. Создание синтаксического анализатора выбранного языка в соответствии с утвержденной грамматикой и с использованием выбранного компилятора компилятора. Лабораторная работа №4. Создание семантического анализатора и модуля контроля совместимости типов для выбранного языка в соответствии с утвержденной грамматикой и с использованием выбранного компилятора компилятора. Лабораторная работа №5. Разработка генератора промежуточного языка исполнения для разработанного ранее синтаксического анализатора. Лабораторная работа №6. Разработка интерпретатора выбранного промежуточного языка или разработка генератора байт-кода внешнего интерпретатора. Представление полученного транслятора как единого программного комплекса, включающего результаты лабораторных работ 2-5. Контрольные сроки сдачи 1 семестр 1 четверть 3 неделя Контр. сессия 17.10.2012 21.10.2012 Лабораторная 1 - Грамматика 5 неделя Контр. сессия 01.10.2012 06.10.2012 Лабораторная 2 – Лексический анализатор 1 семестр 2 четверть 9 неделя Контр. сессия 29.10.2012 03.11.2012 Лабораторная 3 – Синтаксический анализатор 1 семестр 3 четверть 15 неделя Контр. сессия 03.12.2012 08.12.2012 Лабораторная 4 – Генерация промежуточного кода 1 семестр 4 четверть 20 неделя Экз. сессия 14.01.2013 Лабораторная 5 – Итоговая 21 неделя Экз. сессия 21.01.2013 Экзамен 19.01.2013 26.01.2013 Ограничения по заданию 1. Реализуемый язык: 1. 2. 3. 4. 5. 6. 7. 8. Паскалеподобный Сиподобный Сиподобный/С++/C# с поддержкой объектов Java-подобный Скриптовый Python/Perl/Ruby PHP-подобный Basic/Visual basic Прочие - 7 - 6 -2 -5 -7 -3 -3 -5 Ограничения по заданию 2. Вид транслятора 1. 2. 3. 4. 5. 6. 7. Интерпретатор Трансляция в другой язык высокого уровня Трансляция в ассемблер JIT IL (MSIL) JVM LLVM? - 10 3 7 3 10 3 2 Ограничения по заданию 3. Компилятор-компилаторов 1. 2. 3. 4. 5. 6. 7. Coco/R Lex/flex + Yacc/Bizon SableCC ELI ANTLR VisualLangLab Прочее - 10 10 5 2 2 2 7