- •Курсова робота
- •Виконав ст. Гр. Кі-35:
- •Завдання на курсову роботу:
- •Анотація
- •1. Огляд методів та способів проектування трансляторів 7
- •Огляд методів та способів проектування трансляторів
- •Формальний опис вхідної мови програмування
- •Деталізований опис вхідної мови в термінах розширеної нотації Бекуса-Наура(Backus/NaurForm - bnf).
- •2.2.Термінальні символи та ключові слова
- •Розробка транслятора вхідної мови програмування
- •Вибір технології програмування
- •Проектування таблиць транслятора
- •Розробка лексичного аналізатора
- •Опис лексичного аналізатора
- •3.3.2. Розробка граф-схеми алгоритму
- •Розробка синтаксичного та семантичного аналізатора
- •Опис синтаксичного аналізатора
- •Повне дерево граматичного розбору
- •Розробка генератора коду
- •Опис генератора коду
- •Опис програми(в тому числі граф-схем)
- •Опис інтерфейсу та інструкція користувачеві
- •Відлагодження та тестування програми
- •Виявлення лексичних помилок.
- •Список літератури
- •Додаток а. Лістингпрограми.
- •Додаток б. Приклад програми із лексичними та синтаксичними помилками та текст файлу з повідомленням про помилки.
- •Додаток в. Приклад коректної програми та результат її виконання.
- •Додаток г. Граф-схема алгоритму виконання програми через використання функцій.
3.3.2. Розробка граф-схеми алгоритму
Рис 3.1.Граф-схема роботи лексичного аналізатора
Блок 1 – Початок роботи лексичного аналізатора
Блок 2 – Відкриття і порядкове читання вхідного файлу з текстом програми
Блок 3 – Перевірка чи не досягнутий кінець файлу
Блок 4 – Виділення першого символу нової лексеми
Блок 5 – Перевіряє чи ключове слово
Блок 6 – Збереження його в таблицю лексем
Блок 7 – Перевіряє чи ідентифікатор
Блок 8 – Збереження його в таблицю лексем та ідентифікаторів
Блок 9 – Перевіряє чи число
Блок 10 – Збереження його в таблицю лексем
Блок 11 – Перевіряє чи оператор
Блок 12 – Збереження його в таблицю лексем
Блок 13 – Перевіряє чи коментар
Блок 14 – Ігнорування вмістимого коментаря
Блок 15 – Перевіряє чи розділювач
Блок 16 – Збереження його в таблицю лексем
Блок 17 – Якщо перший символ не є жодним з вищеперечислених
Блок 18 – Збереження його в таблицю лексем
Блок 19 – Якщо файл прочитано, завершення роботи лексичного аналізатора
Розробка синтаксичного та семантичного аналізатора
Опис синтаксичного аналізатора
Синтаксичний аналіз – це процес, в якому досліджується послідовність лексем, яку повернув лексичний аналізатор, і визначається, чи відповідає вона структурним умовам, що сформульовані у визначені синтаксису мови.
Синтаксичний аналізатор – це частина компілятора, яка відповідає за виявлення основних синтаксичних конструкцій вхідної мови. В задачу синтаксичного аналізатора входить: знайти та виділити основні синтаксичні конструкції мови в послідовності лексем програми, встановити тип та правильність побудови кожної синтаксичної конструкції і представити синтаксичні конструкції у вигляді, зручному для подальшої генерації тексту результуючої програми. Як правило, синтаксичні конструкції мови програмування можуть бути описані за допомогою контекстно-вільних граматик. Розпізнавач дає відповідь на питання, належить чи ні, ланцюжок вхідних лексем заданій мові.
В даному трансляторі синтаксичний аналізатор працює паралельно почергово з генератором коду, частиною якого він і є. Принцип роботи такий: на основі нижче наведеного дерева граматичного розбору (рис.4) аналізується черговий набір послідовних лексем та викликається відповідна генерація асемблерного коду. Потім знову вище описані дії повторюються поки не обробляться всі лексеми.
Нижче показано блок-схему роботи синтаксичного аналізатора.
Рис.3.2. Блок-схема роботи синтаксичного аналізатора
Повне дерево граматичного розбору
Рис.3.3. Повне дерево граматичного розбору
Розробка генератора коду
Опис генератора коду
Генерація коду – це машинно-залежний етап компіляції, під час якого відбувається побудова машинного еквівалента вхідної програми. Зазвичай входом для генератора коду служить проміжна форма представлення програми, а на виході може з’являтися об’єктний код або модуль завантаження.
У компілятора, реалізованого в даній курсовій роботі, вихідна мова - програма на мові Assembler. Ця програма записується у файл, що має таку ж саму назву, як і файл з вхідним текстом, але розширення “asm”. Генерація коду відбувається одразу ж після синтаксичного аналізу.
В даному трансляторі генератор коду послідовно викликає окремі функції, які записують у вихідний файл частини коду.
BeginASMFile();
Записує код заголовку програми.
CheckPresentInputOutput();
Визначає присутність операторів вводу/виводу для наступної функції.
PrintData(f);
Записує сегмент даних (визначені змінні та службові буфери та змінні),
BeginCodeSegment();
Записує код ініціалізації сопроцесора.
PrintCode(f);
Записує сегмент коду.
PrintEnding(f);
Записує завершення програми та необхідні процедури.
