Анотация
Дисциплината "Компилатори и интерпретатори" има за цел да даде нa студентите от специалност "Компютърни системи и технологии" познания в областта на приципите на функциониране и методите за създаване на компилиращи и интерпретиращи програмни системи. Разглеждат се въпросите свързани с лексичния, синтактичния и семантичен анализ на езиците за програмиране. Отделно се разглеждат възходящият и низходящ синтактичен анализ. Обърнато е внимание и на методите за генерация и оптимизация на код. Освен това се разглеждат и принципите на интерпретация на различни нива на междинен код. Отделено е място и за интерпретация на езици от високо ниво (HLLM), както и за системи за генерация на асемблери, компилатори и интерпретатори. Подчертава се определящата роля на езиците за програмиране при дефиниране на изискванията към архитектурата на компютрите.
Дисциплината Дисциплината се основава на предхождащите я дисциплини: "Базово програмиране", "Дискретни структури", "Организация на компютъра", "Синтез и анализ на алгоритми", "Компютърни архитектури", "Програмни езици", "Операционни системи", "Софтуерни технологии" и други. Дисциплината осигурява: “Разпределено програмиране”, “Диалогови системи”, “Семантика на езиците за програмиране”, дипломното проектиране.
Съдържание
Тема 1. Компилатори и интерпретатори - основни понятия. Предназначение и класификация. Основни изисквания. Структура. Еднопасови и многопасови компилатори.
Тема 2. Формално дефиниране на езиците за програмиране. Граматики. Класификация на Хомски. БНФ. Проблем на разбора. Еднозначни и многозначни граматики.
Тема 3. Лексичен анализ.
3.1. Граматики и крайни автомати - съответствие.
3.2. Методика за реализация на лексичния анализатор.
3.3. Организиране на таблиците. Търсене, хеш функция, колизии.
3.4. Проблеми, свързани с конкретни езици за програмиране.
Тема 4. Синтактичен анализ "отгоре-надолу". на метода.
4.1. LL(1) и LL(k) граматики. Избягване на лявата рекурсия - методи.
4.2. Правила за построяване на синтактичен граф. Преход от граф към програма. Предимства и недостатъци.
Тема 5. Синтактичен анализ "отдолу-нагоре".
5.1. LR и SLR граматики. Методика на разбора.
5.2. Построяване на таблицата на разбора. Оптимизация на таблиците.
5.3. Сравнение на двата метода за синтактичен анализ.
Тема 6. Организация на паметта по време на изпълнение на програмата.
6.1. Отделяне на памет за елементарни типове данни. Памет за масиви и структурни типове данни.
6.2. Информационни вектори.
6.3. Параметри на процедурите - съответствие между формални и фактически параметри.
6.4. Памет за обекти, статични и динамични методи.
Тема 7. Семантичен анализ.
7.1. Област на видимост.
7.2. Съответствие на типовете данни.
7.3. Атрибути. Организация на таблиците.
Тема 8. Вътрешни форми на програмата.
8.1. Междинен код. Триади, тетради, дървета и ОПЗ.
8.2. Семантични процедури. Семантична обработка при низходящия и възходящ анализи.
Тема 9. Генерация на код.
9.1. Генерация на код за триади, тетради и ОПЗ.
9.2. Оптимизация на междинен и машинен код.
Тема 10.Системи за генериране на асемблери и компилатори. Основна структура. Ограничения. Съществуващи системи - обзор и сравнение.
Тема 11.Интерпретатори. Класификация. Основна структура. Функции.
Тема 12.Методи за интерпретация на междинни кодове. Структура на интерпретатора. Изисквания.
Тема 13.Методи за интерпретация на езици от високо ниво. HLLM. Основна структура на интерпретатора. Ограничения.
Тема 14.Преобразуване на типовете. Управление на паметта по време на интерпретация на програмата.
Тема 15.Средства за тестване и дебъгинг. Дъмп на символните таблици. Сравнение на по-известните интерпретиращи системи.