 
        
        - •Лекція №1. Тема 1: Компілятори, інтерпретатори, критерії розробки, основні етапи та їх взаємозв’язок . Основні поняття.
- •Критерії розробки трансляторів:
- •Етапи трансляції:
- •Фази трансляції:
- •Лекція №2. Тема 2 : Лексичний аналізатор та його основні задачі. Основна задача лексичного аналізатора.
- •Макроалгоритм та структури даних лексичного аналізатора.
- •Структура даних для розпізнавання роздільників та знаків операцій.
- •Таблиця зарезервованих слів.
- •Таблиця ідентифікаторів.
- •Таблиця типів.
- •Таблиця типів, враховуючи блоки та процедури.
- •Лекція №3. Тема 3 : Синтаксичний аналіз.
- •Метод рекурсивного спуску.
- •Ll(1)-граматика.
- •Приведення до ll(1)-граматики.
- •Алгоритм перевірки належності граматики до класу ll(1)-граматик.
- •Лекція №4. Синтаксичний розбір за допомогою lr(1)-граматики.
- •Лекція №5. Формування lr-таблиці розбору.
- •Лекція №6. Тема 4 : Аналіз контекстних умов.
- •Аналіз контекстних умов за допомогою програмних граматик.
- •Класифікація програмних граматик:
- •Лекція №7. Граматики Ван Вейнгаарда.
- •Розбір з використанням граматики Ван Вейнгаарда та лінійно-обмеженого автомату.
- •Лекція №8. Тема 5 : Генерація коду. Метод включення дій в граматику.
- •Метод включення дій в граматику.
- •Розбір декларативної частини програми.
- •Лекція №9. Тема 6 : Розподіл пам’яті під час виконання (прогону).
- •Структури даних, які необхідні для генерації коду.
- •Лекція №10.
- •Лекція №11. Генерація коду для циклу for.
- •Генерація коду для циклу while.
- •Генерація коду для нескінченого циклу.
- •Генерація коду для декларативної частини програми.
- •Генерація коду вході в процедуру та виході з неї.
- •Лекція №12. Тема 7: Діагностика та виправлення помилок.
- •Точність діагностики помилок.
- •Виправлення помилок.
- •Діагностика помилок.
- •Лекція №13. Тема 8 : Проектування транслятора. Визначення кількості проходів під час трансляції.
- •Тема 9 : Оптимізація коду.
- •Локальна та глобальна оптимізація коду.
- •Критерії оптимізації.
- •Локальна оптимізація коду.
- •Оптимізація лінійної ділянки.
- •Глобальна оптимізація коду.
- •Тема 10 : Генератори компіляторів.
Лекція №1. Тема 1: Компілятори, інтерпретатори, критерії розробки, основні етапи та їх взаємозв’язок . Основні поняття.
Транслятор - це програма для перекладу із однієї формальної мови (є вихідна) в іншу (є об’єктною). Мови транслятора діляться на групи :
за призначенням:
- універсальні ( Pascal, Ci); 
- спеціалізовані (мови управління базами даних: Кобол); 
за ступеню близькості до ЕОМ:
- машинно-залежні (Assembler); 
- машинно-орієнтовані (MASM); 
- машинно-незалежні ; 
за функціональним призначенням:
- мови опису алгоритмів (будують об’єктний код за алгоритмом); 
- мови специфікацій (будують об’єктний код за специфікацією). 
Розрізняють два підходи трансляції:
- Компіляція - будується об’єктний код усієї програми , а потім виконується об’єктний 
модуль;
2. Інтерпретація - будується об’єктний код одного оператора і тут же виконується . Цей
підхід використаний у такій мові програмування як Бейсік.
Також існує таке поняття як крос-компілятор - об’єктний код не можливо виконати на машині
самого компілятора.
Критерії розробки трансляторів:
- Ефективність об’єктного коду ; 
- Розробка мінімальних об’єктних програм; 
- Мінімальний час компіляції програми; 
- Розробка компілятора мінімального об’єму; 
- Точність виявлення і виправлення помилок; 
- Час розробки транслятора. 
Вибір критеріїв залежить від області використання, особливостей (як буде використовуватися,
хто буде складати програму, як буде проводитися процес складання, з якою метою і т.п.).
Етапи трансляції:
- Аналіз (вихідного тексту, його правильності); 
- Синтез (формування об’єктного коду за допомогою об’єктної мови). 
Фази трансляції:
1. Лексичний аналіз;
2. Синтаксичній аналіз (перевірка правильності слідування лексем);
3. Генерація коду;
4. Фаза оптимізації (не обов’язкова).
Найпростіший лінійний підхід реалізації транслятора:
	 генерація коду
Недоліком такого підходу є те , що текст проходиться (аналізується) три - чотири рази. В одно-
прохідному трансляторі схема взаємодії інша. Основною ланкою являється синтаксичний аналізатор. Організовується цикл чергового перегляду лексем:
- запит чергової лексеми у лексичного аналізатора; 
- перевірка синтаксису (правильності слідування лексем); 
- передача управління генератору коду; 
- оптимізація або , якщо вона відсутня , знову управління передається синтаксичному аналізатору. 
Синтаксичний аналізатор по черзі дає управління лексичному аналізатору, генератору і т. д. Лексичний аналізатор, при зверненні до нього, виділяє і передає решті фаз чергову лексему. Синтаксичний аналізатор перевіряє правильність слідування лексем, а генератор будує чергову частину коду. Фази виконуються одночасно. Оптимізація, якщо вона присутня, може виконуватися після закінчення побудови коду, хоча частково може виконуватися і під час побудови.
Лекція №2. Тема 2 : Лексичний аналізатор та його основні задачі. Основна задача лексичного аналізатора.
Основна задача лексичного аналізатора – це виділення лексеми. Результатом його роботи є
виділена лексема, а також номер класу та її номер в класі. Класи лексем визначаються розроблювачем. Існують такі класи:
- ідентифікатори; 
- зарезервовані слова; 
- роздільники (; , . : ^ | і т.п.); 
- знаки операції (+ - / * = := < > і т. п.); 
- службові слова (begin, end); 
- літерали (явні значення: “a”, 1..5, a:=1.8 і т. п.); 
- терми (a[i]^.b і т.п.); 
- коментарі. 
В розроблюваному трансляторі не обов’язково всі вони повинні бути присутніми. Після виділення лексеми необхідно визначити номер класу та номер в класі цієї лексеми Винятками є:
- коментарі - лексичний аналізатор пропускає; 
- директива - по признаку у генератора коду; 
- літерали - не нумеруються, а відразу генератор коду переводить у внутрішнє представлення. 
Для лексичного аналізатора розрізняють : ідентифікатор в декларативній частині (те що відповідає синтаксису і стоїть на своєму місці) та ідентифікатор в недекларативній частині (повинен бути описаний в декларативній частині).
