ВСТУП
компілятор програма граматика
Компілятор - програмний модуль, завданням якого є переклад програми, написаної на одній з мов програмування (вихідний мова) в програму на мову асемблера або мову машинних команд.
Більшість компіляторів переводять програму з деякого високорівневого мови програмування в машинний код, який може бути безпосередньо виконаний комп'ютером.
Метою даної курсової роботи є вивчення складових частин, основних принципів побудови і функціонування компіляторів, практичне освоєння методів побудови складових частин компілятора для заданого вхідного мови.
Курсова робота полягає у створенні окремих частин компілятора заданого мови.
У першій частині роботи ставиться завдання розробити програму, яка отримує на вході набір ідентифікаторів, організовує таблицю по заданому алгоритму і дозволяє здійснити багаторазовий пошук ідентифікатора в цій таблиці.
У другій частині роботи потрібно розробити програму, яка виконує лексичний аналіз вхідного тексту по заданій граматиці і породжує таблицю лексем із зазначенням їх типів і значень.
У третій частині роботи потрібно розробити програму, яка на підставі таблиці лексем виконує синтаксичний розбір тексту по заданій граматиці з побудовою дерева розбору.
Результатами курсової роботи є програмна реалізація заданого компілятора і пояснювальна записка, оформлена відповідно до вимог стандартів та завдання на курсову роботу.
В якості середовища розробка для реалізації програми використаний мова програмування C ++ і середу програмування Visual Studio C ++ 2012 .
1. ОПИС ВХІДНОГО МОВИ
Вхідний мова являє собою підмножина мови програмування Pascal.
Програма на даній мові може включати в себе символи латиниці, цифри, знак _, символьні константи, різні оператори. Текст на вхідній мові міститься в текстовому файлі.
Набір ідентифікаторів організовуються в таблицю за методом впорядкованого списку. Необхідна можливість здійснення багаторазового пошуку ідентифікатора в цій таблиці. Список ідентифікаторів вважати заданим у вигляді текстового файлу. Довжина ідентифікатора обмежена 32 символами. Він може включати в себе символи кирилиці і латиниці, цифри, знаки ^ і _. Ідентифікатор не може починатися з цифри.
Передбачені наступні варіанти операторів вхідний програми:
- оператор присвоювання (: =);
- зарезервовані слова If, Else, Then, While, Do, Prog, End;
- арифметичні операції (+, -, /, *);
- операндами у виразах можуть виступати ідентифікатори і константи (один символ, укладений в одинарні лапки);
- все ідентифікатори повинні сприйматися як змінні;
- допускається присутність коментарів оформлених вигляді://коментар
Для виділення лексем заздалегідь будується кінцевий автомат.
Даний мова належить до КС-мов, тому може бути описаний наступною граматикою:
lt; буква gt;? A | .... | < i align="justify"> Z | .... | a |.... | z | _
lt; аріфм.опер. gt;? + | - | * | /
lt; цифра gt;? 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
lt; ID gt;? Lt; буква gt;
| lt; ID gt; lt; буква gt;
| lt; ID gt; lt; цифра gt;
lt; сімв.конст. gt; ? lt; буква gt;
| lt; цифра gt;
lt; операнд gt;?...