- •Лабораторна робота № 2 Проектування лексичного аналізу
- •Граматики передування
- •Алгоритм «зсув-згортка» для граматик операторного передування
- •Вимоги до виконання роботи Порядок виконання роботи
- •Вимоги до оформлення звіту Звіт повинен містити наступні розділи:
- •Основні контрольні питання
- •Варіанти завдань Варіанти початкових граматик
- •Початкові граматики і типи допустимих лексем
- •Приклад виконання роботи Завдання для прикладу
- •Побудова матриці операторного передування Побудова множини крайніх правих і крайніх лівих символів
- •Побудова множини крайніх правих і крайніх лівих термінальних символів
- •Заповнення матриці передування
- •Приклади виконання розбору пропозицій вхідної мови
- •Реалізація синтаксичного розпізнавача. Розбиття на модулі
- •Модуль опису матриці передування і правил граматики
- •Модуль структур даних для синтаксичного аналізу і реалізації алгоритму «зсув -згортка»
- •Текст програми розпізнавача
- •Висновки по виконаній роботі
- •Синтаксично керований переклад
- •Способи внутрішнього представлення програм
- •Багатоадресний код з неявно іменованим результатом (тріади)
- •Схеми су-перекладу
- •Загальні принципи оптимізації коду
- •Принципи оптимізації лінійних ділянок
- •Згортка об'єктного коду
- •Виключення зайвих операцій
- •Загальний алгоритм генерації й оптимізації об'єктного коду
- •Вимоги до виконання роботи Порядок виконання роботи
- •Приклад виконання роботи
- •Побудова схем су-перекладу
- •Реалізація генератора списку тріад Розбиття на модулі
- •Модуль опису допустимих типів тріад
- •Модуль опису структур даних для тріад
- •Модуль побудови списку тріад по дереву синтаксичного розбору
- •Модуль обчислення значень тріад на етапі компіляції
- •Модуль, що реалізує алгоритми оптимізації
- •Текст програми генератора списку тріад
- •Висновки по проробленій роботі
Висновки по проробленій роботі
У результаті лабораторної роботи № 4 побудований генератор списку тріад, що породжує тріади для логічних операцій, оператора присвоювання й умовного оператора. Генератор списку тріад виявляє семантичні помилки, пов'язані із присвоюванням значень константам (коли перший операнд оператора присвоювання - константа). При наявності однієї помилки користувачеві видається повідомлення із вказівкою місця розташування помилки. При наявності декількох помилок виявляється тільки перша з них, і подальший аналіз вихідного тексту припиняється.
Побудований генератор також виконує оптимізацію списку тріад методом згортки об'єктного коду й виключення зайвих операцій, що дозволяє скоротити обсяг результуючого списку тріад і час виконання об'єктного коду, що може бути побудований на його основі. Після виконання оптимізації генератор списку тріад може видаляти зі списку тріади спеціального виду С і same залежно від настроювань, зроблених користувачем.
Побудований при виконанні даної лабораторної роботи генератор списку тріад входить до складу компілятора, у який також входять: лексичний аналізатор, побудований при виконанні лабораторної роботи № 2, і синтаксичний аналізатор, побудований при виконанні лабораторної роботи № 3. Цей компілятор одержує на вхід вихідну програму відповідно до заданої граматики й породжує результуючу програму у вигляді списку тріад.
Компілятор дозволяє виявляти наступні однократні помилки:
будь-які лексичні помилки (неправильні лексеми);
будь-які синтаксичні помилки (невідповідність вихідної програми синтаксису заданої вхідної мови);
семантичні помилки типу «присвоювання значення константі».
При виявленні помилки користувачеві видається повідомлення про тип помилки (лексична, синтаксичне або семантична) і про місцезнаходження помилки в тексті вихідної програми. Подальший аналіз типу виявленої помилки не проводиться. При наявності декількох помилок у вихідній програмі виявляється тільки перша з них.
У результаті виконання лабораторних робіт № 1 - 4 побудований компілятор, що виконує обробку вихідної програми за п'ять проходів:
Лексичний аналіз вихідного тексту й побудова таблиці лексем.
Синтаксичний аналіз по таблиці лексем і побудова дерева синтаксичного розбору.
Побудова списку тріад по дереву синтаксичного розбору.
Оптимізація списку тріад методом згортки об'єктного коду.
Оптимізація списку тріад методом виключення зайвих операцій.
На кожному проході компілятора вихідними даними є результати, отримані при виконанні попереднього проходу.
Кількість проходів побудованого компілятора може бути істотно скорочено, оскільки всі операції виконуються послідовно, незалежно один від одного, однак це не входить до завдання виконаних лабораторних робіт.
