Языки программирования и компиляторы

Санкт-Петербург, осень 2013

Описание

Курс предназначен для тех, кто интересуется внутренним устройством языков программирования.

Видео всех лекций курса можно найти на канале CS центра на YouTube.

Преподаватели

Список лекций

Языки программирования, синтаксис, семантика, прагматика

Языки программирования, синтаксис, семантика, прагматика. Когнитивные особенности человеческого мышления и их влияние на развитие языков программирования. Языки программирования в ретроспективе. Процедурное, объектно-ориентированное, логическое и функциональное программирование. Предметно-ориентированные языки. Языки вне классификации. Абстрактный и конкретный синтаксис. Статическая и динамическая семантика.

Компиляция и интерпретация

Смешанные вычисления. Проекции Футамуры-Ершова. Техника раскрутки (bootstrapping). Принципы организации компилятора. Просмотры, промежуточное представление.

Cинтаксический анализ. Нисходящий синтаксический анализ

Порождающие грамматики, иерархия Хомского. Магазинные автоматы, предпросмотр, LL(k)-языки и грамматики.

Нисходящий анализ (продолжение)

Рекурсивный спуск, монадические парсер-комбинаторы.

Лексический анализ. Восходящий анализ

Лексический анализ; взаимодействие лексического и синтаксического анализаторов. Проблемы контекстно-зависимой лексики. Восходящий анализ типа перенос-свертка, класс LR(k). Инструменты восходящего анализа.

Нормальная форма Хомского.

Окружение программы

Взаимодействие аппаратной платформы, операционной системы, библиотеки поддержки времени исполнения, прикладных библиотек и скомпилированной программы. Представление объектного и исполняемого файлов; перемещаемые модули, таблицы релокаций. Принципы работы редактора связей и загрузчика.

Экзистенциальные типы и абстрактные типы данных

Некоторые аномалии, возникающие при использовании универсальных поверхностных типов. Экзистенциальное представление потоков. Объектно-ориентрованные аналогии. Структурный и номинальный сабтайпинг. Объектная система языка Objective Caml.