ПРОЕКТ Министерство образования Российской федерации Нижегородский государственный университет им. Н.И. Лобачевского Факультет вычислительной математики и кибернетики Кафедра интеллектуальных информационных систем и геоинформатики «Утверждаю» Декан факультета ВМК, доц. ______________________(В. П. Савельев) УЧЕБНАЯ ПРОГРАММА ОБЩЕГО КУРСА «Модели и методы трансляции языков программирования» для специальности «Информационные технологии» 51.19.00 Программу разработали: к.т.н, доцент кафедры ИИСГео Кузин С.Г. Митин Р.Г. Нижний Новгород, 2003 Цели. Данный курс знакомит студентов с теорией и практикой трансляции языков программирования. Темы курса включают в себя устройство компиляторов, лексический анализ, синтаксический анализ, таблицы символов, обработку объявлений, управление памятью, генерацию кода и методы оптимизации. Предшествующие модули. Логические основы вычислительных машин. Архитектура вычислительных машин. Языки программирования. Математическая логика и теория алгоритмов. Теория автоматов и формальных языков. Содержание модуля A. Проблематика языков программирования (обзор) 1. Конструирования формального языка из символов Формальный язык как множество цепочек символов. Конечные и бесконечные языки. Формальные языки, не имеющие модели. Синтаксическая модель (грамматика) формального языка – компактное конечное описание множества составляющих его предложений. Грамматики Хомского. Вывод в грамматике Хомского и синтаксическое дерево. Автоматные и контекстно-свободные грамматики. 2. Распознавание предложения формального языка Постановка задачи распознавания. Конечность алгоритма распознавания. Распознавание конечных языков. Распознавание бесконечных языков на основании синтаксической модели. Дерево разбора и его построение в процессе распознавания. 3. Семантика формального языка. Формальные языки как коды (обозначения) классов сущностей. Декларативные языки. Действия, исполнители и императивные языки. Определение семантики императивного языка через действия. 4. Языки программирования. Структура действия и структура данных, понятие программы. Алгоритмическая и объектно-ориентированная парадигма программирования. Трансляция языков программирования как преобразование, сохраняющее семантику. Императивные и объектно-ориентированные языки программирования. B. Связь между языками и вычислительными машинами (обзор) 1. Вычислительные машины. Линейная память. Регистры. Команды процессора и команды управления. Понятие виртуальной машины. Особенности архитектур (обзорно). Влияние наличия конвейера 2. Языки символьного кодирования. Ядро языка ассемблера. Псевдокоманды. Ручное распределение памяти. Сегментация программ. 3. Транслятор ассемблирующего типа. Таблица распределения памяти. Проходы транслятора. Связывание и загрузка. 4. Языки программирования высокого уровня. Выражения и присваивания. Циклы. Блоки. Процедуры: подпрограммы и функции. Макросы. Модули. Автоматическое распределение памяти. Особенности объектноориентированных языков программирования. 5. Трансляция языков высокого уровня. Интерпретация программы виртуальной машиной. Компиляция программы аппаратной машиной. Технологическая схема компиляции. Сборка программы на стадии трансляции из модулей – препроцессоры. Динамическая загрузка подпрограмм. C. Классические модели и методы компиляции 1. Введение в компиляцию. 1.1 Анализ исходной программы Автоматные синтаксические структуры и лексический анализ. Контекстносвободные синтаксические структуры и синтаксический анализ. Семантический анализ. 1.2 Фазы компилятора Лексический и синтаксический анализ. Управление таблицей символов. Дерево грамматического разбора. Обнаружение ошибок. Генерация промежуточного кода. Оптимизация кода. 2. Алгоритмы грамматического разбора текста программы 2.1 Лексический анализ и конечные автоматы 2.2 Синтаксический анализ и стековые автоматы 2.3 Результат синтаксического анализа – дерево разбора. 3. Атрибутные грамматики и синтаксически управляемая трансляция 3.1 Синтаксически управляемые определения Расширение дерева разбора за счет добавления атрибутов и семантических правил. Синтезируемые и наследуемые атрибуты. Графы зависимости и порядок вычисления атрибутов. 3.2 Построение синтаксических деревьев. 3.3 Анализ контекстной зависимости. Проверка типов, управления, единственности, парности имен. 3.4 Транслирующие грамматики 4. Связывание имен и объектов данных (среды времени исполнения) 4.1 Вопросы исходного языка Процедуры, Деревья активации. Стеки управления. Области видимости. Связывание имен. 4.2 Автоматическое распределение памяти. Организация памяти. Стратегия выделения памяти: статическое и динамическое выделение памяти. Технология динамического распределения памяти. 4.3 Доступ к нелокальным именам. Передача параметров. 4.4 Таблица распределения памяти 5. Генерация промежуточного кода 5.1 Языки промежуточных представлений Трехадресный код и линеаризованное представление дерева. Постфиксная запись выражения. 5.2 Обработка деклараций, распределение памяти и области видимости 5.3 Инструкции обработки данных 5.4 Инструкции управления 5.5 Вызовы процедур 5.6 Промежуточное представление исходной программы и таблица распределения памяти 6. Генерация кода 6.1 Вход генератора кода 6.2 Целевые программы 6.3 Управление памятью 6.4 Распределение регистров 6.5 Простой генератор кода 7. Специфика трансляции объектно-ориентированной программы 7.1 Виртуальные базовые классы 7.2 Множественное наследование 7.3 Единичное наследование 8. Введение в оптимизацию кода 8.1 Критерии оптимизации 8.2 Оптимизация потока управления 8.3 Оптимизация потока данных D. Графовые модели трансляции 1. Модель языка в виде расширенной рекурсивной сети Вудса Описание автоматных и контекстно-свободных конструкций языка. Возможность представления контекстной зависимости. Сеть Вудса как преобразователь текста в дерево разбора. 2. Синтаксические диаграммы Вирта 3. Конструирование формального языка из элементарных языков 3.1 Понятийные и сетевые модели языка Понятийная модель языка программирования в виде дескриптивного графа. Сетевая модель языка программирования. Представление контекста. Иерархия сетевых моделей. 3.2 Эквивалентность моделей формального языка. Трансформация дескриптивного графа в сетевую модель. Трансформация дескриптивного графа в грамматику Хомского. 3.3 Примеры графовых моделей Дескриптивные графы и E-сети автоматных конструкций языка программирования. Дескриптивные графы и ER-сети рекурсивных конструкций языка программирования. Представление контекстных зависимостей. 3.4 Универсальный алгоритм трансляции, управляемой сетевой моделью E. Системы автоматизации построения трансляторов (Обзор)