Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Zapiska_-_31_1 (1).docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
536.65 Кб
Скачать

3.3.2. Розробка граф-схеми алгоритму

Рис 3.1.Граф-схема роботи лексичного аналізатора

Блок 1 – Початок роботи лексичного аналізатора

Блок 2 – Відкриття і порядкове читання вхідного файлу з текстом програми

Блок 3 – Перевірка чи не досягнутий кінець файлу

Блок 4 – Виділення першого символу нової лексеми

Блок 5 – Перевіряє чи ключове слово

Блок 6 – Збереження його в таблицю лексем

Блок 7 – Перевіряє чи ідентифікатор

Блок 8 – Збереження його в таблицю лексем та ідентифікаторів

Блок 9 – Перевіряє чи число

Блок 10 – Збереження його в таблицю лексем

Блок 11 – Перевіряє чи оператор

Блок 12 – Збереження його в таблицю лексем

Блок 13 – Перевіряє чи коментар

Блок 14 – Ігнорування вмістимого коментаря

Блок 15 – Перевіряє чи розділювач

Блок 16 – Збереження його в таблицю лексем

Блок 17 – Якщо перший символ не є жодним з вищеперечислених

Блок 18 – Збереження його в таблицю лексем

Блок 19 – Якщо файл прочитано, завершення роботи лексичного аналізатора

    1. Розробка синтаксичного та семантичного аналізатора

      1. Опис синтаксичного аналізатора

Синтаксичний аналіз – це процес, в якому досліджується послідовність лексем, яку повернув лексичний аналізатор, і визначається, чи відповідає вона структурним умовам, що сформульовані у визначені синтаксису мови.

Синтаксичний аналізатор – це частина компілятора, яка відповідає за виявлення основних синтаксичних конструкцій вхідної мови. В задачу синтаксичного аналізатора входить: знайти та виділити основні синтаксичні конструкції мови в послідовності лексем програми, встановити тип та правильність побудови кожної синтаксичної конструкції і представити синтаксичні конструкції у вигляді, зручному для подальшої генерації тексту результуючої програми. Як правило, синтаксичні конструкції мови програмування можуть бути описані за допомогою контекстно-вільних граматик. Розпізнавач дає відповідь на питання, належить чи ні, ланцюжок вхідних лексем заданій мові.

В даному трансляторі синтаксичний аналізатор працює паралельно почергово з генератором коду, частиною якого він і є. Принцип роботи такий: на основі нижче наведеного дерева граматичного розбору (рис.4) аналізується черговий набір послідовних лексем та викликається відповідна генерація асемблерного коду. Потім знову вище описані дії повторюються поки не обробляться всі лексеми.

Нижче показано блок-схему роботи синтаксичного аналізатора.

Рис.3.2. Блок-схема роботи синтаксичного аналізатора

      1. Повне дерево граматичного розбору

Рис.3.3. Повне дерево граматичного розбору

    1. Розробка генератора коду

      1. Опис генератора коду

Генерація коду – це машинно-залежний етап компіляції, під час якого відбувається побудова машинного еквівалента вхідної програми. Зазвичай входом для генератора коду служить проміжна форма представлення програми, а на виході може з’являтися об’єктний код або модуль завантаження.

У компілятора, реалізованого в даній курсовій роботі, вихідна мова - програма на мові Assembler. Ця програма записується у файл, що має таку ж саму назву, як і файл з вхідним текстом, але розширення “asm”. Генерація коду відбувається одразу ж після синтаксичного аналізу.

В даному трансляторі генератор коду послідовно викликає окремі функції, які записують у вихідний файл частини коду.

BeginASMFile();

Записує код заголовку програми.

CheckPresentInputOutput();

Визначає присутність операторів вводу/виводу для наступної функції.

PrintData(f);

Записує сегмент даних (визначені змінні та службові буфери та змінні),

BeginCodeSegment();

Записує код ініціалізації сопроцесора.

PrintCode(f);

Записує сегмент коду.

PrintEnding(f);

Записує завершення програми та необхідні процедури.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]