p align="justify"> Вхідні дані поміщаються в масив vector sym_table (посимвольний).
Структура symbol передає символ, рядок, стовпець, довжину символу і позицію від початку.
Вихідні дані формуються у масиві vector scaner_result.
Структура cell містить опис типу, саму лексему, рядок, стовпець, довжину лексеми і позицію від початку.
Символ з масиву sym_table перевіряється на приналежність до певного класу лексем, якщо функція повертає значення істина, то символ листується в змінну curr_cell (об'єкт структури cell) і переходимо до наступного символу, так само перевіряємо на приналежність до цього ж класу лексем, якщо функція повертає значення брехня, то записуємо дані із змінної curr_cell в масив scanner_result, Обнуляємо змінну curr_cell, перевіряємо чи є в масиві sym_table ще символи, якщо він не порожній, то переходимо до наступного.
Дані про помилки зберігаються в масиві error_result.
Як тільки масив sym_table виявився порожній, дані з масивів scanner_result і error_result виводяться в таблиці.
Вихідний код програми, вибраної для розбору, представлений у Додатку А. Результат розбору коду лексичним аналізатором представлений на малюнку 1.
В
Рисунок 1 - Результат роботи лексичного аналізатора
У фазі лексичного аналізу можливі наступні помилки - не закрито коментар, незавершена рядок, помилка у визначенні речовій константи, помилка у визначенні символьної константи.
Так В«область видимостіВ» лексичного аналізатора вузька, то без допомоги інших компонентів компілятора йому досить складно виявити помилки в початковому тексті програми, наприклад, якщо в програмі токен F вперше зустрівся в контексті F = a * 33. Оскільки F є коректною лексемою, лексичний аналізатор повинен повернути цей токен синтаксичному аналізатору, який у свою чергу повинен обробити помилку В«Невизначений типВ». br/>В
Рисунок 2 - Результат роботи лексичного аналізатора із знайденими помилками
Отримана послідовність токенів, записана в масив scaner_result передається синтаксичному аналізатору. Компілятор переходить до наступної фази. br/>
Синтаксичний аналіз
Синтаксичний аналіз - друга фаза компіляції. На цьому етапі програма працює з послідовністю токенів, створеної лексичним аналізатором. Синтаксичний аналізатор, або парсер, повинен перевірити коректність послідовності токенів для трансльованого мови і на виході повинно вийти проміжне представлення програми. p align="justify"> Також від синтаксичного аналізатора очікуються повідомлення про всі виявлені помилки. У разі коректної програми синтаксичний аналізатор будує дерево розбору і передає його наступній частині компілятора для ...