Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kursova_metodychka(2).doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.39 Mб
Скачать

Теоретичні відомості

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

1. Лексичний аналіз

Лексичний аналіз – це перша фаза роботи компілятора чи транслятора довільної мови програмування. Він полягає у перетворенні послідовності символів тексту вхідної програми в послідовність токенів (токен - об'єкт, що утворюється із лексеми в процесі лексичного аналізу). В процесі роботи він вирішує задачі: побудова таблиці ідентифікаторів; побудова таблиці лексем шляхом ідентифікації токенів в тексті вхідної програми; видалення пробілів і коментарів оскiльки вони не мають нiякого впливу на виконання програми, отже ж й на синтаксичний розбір та генерацію коду; передача таблиці ідентифікаторів і таблиці лексем на вхід синтаксичному аналізатору (рис.1).

Рис.1.1. Взаємодія лексичного і синтаксичного аналізаторів

Таблиця ідентифікаторів містить перелік ідентифікаторів, наприклад, назв змінних, функцій. Таблиця лексем містить ідентифіковані токени тексту вхідної програми у форматі внутрішнього представлення. Цей формат може включати таку інформацію:

  • позиція лексеми в тексті вхідної програми (рядок і стовпець);

  • тип токена;

  • лексему;

  • значення (для чисел, рядкових констант);

  • адресу ідентифікатора в таблиці ідентифікаторів.

Таблиці лексем і ідентифікаторів можуть бути суміщеними. Приклад таблиці лексем зображено в табл. 1.1.

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

  • «режим паніки» - записати повідомлення про помилку у файл і припинити лексичний розбір;

  • видалення зайвих символів;

  • вставка пропущених символів;

  • заміна невірного символу вірним;

  • перестановка двох сусідніх символів місцями.

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

Таблиця 1.1. Таблиця лексем

Рядок

Токен

Лексема

Значення

Адреса в таблиці ідентифікаторів

5

Vartype

Int

0

0

5

Variable

Var

0

1

6

Vartype

Char*

0

0

6

Variable

Var

0

2

7

Variable

Var

0

1

7

Assign

<<

0

0

7

Num

Num

25

0

8

Condition

If

0

0

8

Variable

Var

0

1

8

Relation

eq

0

0

8

Num

Num

25

0

9

Variable

Var

0

2

9

Assign

<<

0

0

9

Literal

Literal

“Hello, World”

Зауваження: в колонках «токен» і «лексема» таблиці.1.1 під літеральним позначенням в дійсності стоїть унікальний цифровий ідентифікатор (який може бути заданий за допомогою типу enum мови С), який однозначно ідентифікує токени і лексеми. Наявність літерального позначення лексем і токенів допускається в цілях відлагодження, але є необов’язковою.

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