Введення
У сучасному програмуванні великою популярністю користуються мови високого рівня. Це викликано тим, що програмувати на цих мовах істотно простіше і програми, написані з їх допомогою наочніше, ніж еквівалентні їм програми, виконані на мовах низького рівня. Саме тому в даній роботі необхідно розробити свій невеликий мова та здійснити його підготовку до написання компілятора до даному мови. Ця мова має показати деякі можливості сучасних мов програмування і дозволити розробнику цієї мови зміцнити знання, отримані раніше і більш глибоко вивчити предмет «Теорія трансляції».
Для цього необхідно виконати завдання, описане вище з урахуванням пропонованих технічних вимог щодо розроблюваного мови.
Ця курсова робота має велике навчальне значення, так як в даний час все більше уваги приділяють мов програмування високого рівня, тому що писати програми на них набагато простіше (програми стали більшими) і зручніше. У майбутньому ці знання можуть стати в нагоді нам у розробці власних мов або брати участь у розробці потужного мови високого рівня. Саме тому велике практичне значення має розробка власної мови, хай не дуже потужного, але високорівневого, на якому буде видно всі можливості мов сучасних.
Щоб створити подібний мову в рамках даної курсової роботи необхідно відповідно до вимог до мови розробити граматику, в якій буде описаний синтаксис мови, а потім налагодити її за допомогою методів простого і паралельного передування.
Для методу паралельного передування необхідно розробити алгоритм машинного представлення методу; потім провести лексичний аналіз, побудувати автоматні граматики виділення лексем і схему сканера, описати принцип його роботи.
Призначення і область застосування
Розробка мови C + + несе виключно навчальну мету і проводиться з метою поглибити і розширити пізнання автора в дисципліні «Теорія трансляцій», а також у придбанні навичок розробці навчального мови і проведення роботи, що готують мову до побудови транслятора.
Розроблюваний мова дозволяє мені, систематизувати і зміцнити знання, отримані в минулому і підготуватися до подальшого поглиблення їх. Саме тому дана мова є навчальним і не має практичної області застосування.
Технічні характеристики
Постановка завдання на розробку
Перелік вимог щодо розроблюваного мови програмування:
Процедура Sub.
Оператор оголошення констант.
Опис типу змінних за допомогою суфікса: Sin 99 gle, Integer.
Масиви фіксованого розміру з макс. розмірністю 2
Оператори введення / виведення MsgBox, InputBox.
Арифметичні операції: + \ ^.
Логічні операції: Not, And, Or.
Операції порівняння.
Умовний оператор типу If ... Then
Оператор циклу типу For ... Next.
Оператор присвоювання.
Оператор безумовного переходу.
Функції: конкатенація рядків, Cbool, Format, GetAllSettings.
Елементи управління: TextBox, CommandButton, CheckBox, PictureBox.
Опис застосовуваних математичних методів
Введемо декілька визначень:
Визначення 1. Контекстно-вільною граматикою G називається четвірка впорядкованих множин:
G = {Vт, Vn, P, S}, де
Vт - словник термінальних символів граматики;
Vn - словник нетермінальних символів граматики;
P - множина правил граматики:
P = {(A, ) | A-> & A Vn & V *}
S - початковий символ граматики (S Vт);
V * - множина рядків, складених із символів повного словника
V (V = Vт Vn);
V * = { | = п ( x V) ( Q V *) = Qx}
п - порожня ланцюжок.
Визначення 2. Ланцюжок o породжує нетривіальним чином ланцюжок o (записують o => + W), якщо існує послідовність безпосередніх висновків:
o => 1 => ... n, n> = 1.
Визначення 3. Ланцюжок породжує ланцюжок Q (записують => * Q), якщо => + Q, або = Q.
Визначення 4. Ланцюжок називається сентенціальной формою граматики G, якщо вона виводиться з початкового символу граматики, тобто якщо S-> * .
Визначення 5. Пропозиція мови - це сентенціальная форма, що складається тільки з термінальних символів.
Визначення 6. Мова L (G) - це безліч пропозицій
L (G) = { | S-> + Vт *}.
Визначення 7. Символи A, B контекстно-вільної граматики пов'язані ставленням FIRST, якщо виконується умова
A -> B ,
де A Vn, B V, V *.
Визначення 8. Символи A і B граматики пов'язані ставленням .=., Якщо у граматиці є правило види:
W A У .
Визначення 9. Ставлення>. Між символами A і B граматики знаходиться з правила:
(>.) = (LAST +) T (. =.).
Визначення 10. Ставлення <. Між символами A і B граматики знаходиться з правила:
(<.) = (. =.) (FIRST +).
Розробка граматики з неформального опису мови
Відповідно до технічного завдання на розробку мови напишемо граматику, лістинг якої наведений у Додатку 1.
Щоб перевірити її коректність складемо контрольний приклад:
Sub D11 ()
Dim A As Integer,
B% As Integer
Const D As Single
Dim M (2) As Integer A = (B * 2 + 9) ^ 10
If ((IsNumeric (A) <> 0 and A> 0) Then
MsgBox («A is number», vbOkOnly) EndI
Text. Text = A
End Sub
Дерево до цього прикладу наведено на аркуші А1.
Розробка сканера
Лексичний аналіз проводиться сканером (лексичним аналізатором). Сканер виділяє найпростіші мовні конструкції (лексеми) і класифікує їх тип.
Сканер працює з таблицями, які є базою даних сканера.
Таблиці діляться на постійні і тимчасові.
Постійні таблиці створюються розробником сканера і включають в себе:
ТТС1 - таблиця термінальних символів (однолітерних).
ТТС2 - таблиця термінальних символів (двулітерних).
ТКС - таблиця ключових слів.
Тимчасові таблиці створюються в процесі роботи сканера і залежать від вихідного модуля (програми, що перевіряється сканером). Тимчасові таблиці включають в себе:
ТІ - таблиця ідентифікаторів.
ТК - таблиця констант.
ТФ - таблиця функцій.
ТСС - таблиця стандартних символів.
ТСС є результатом роботи сканера. Це взаємно-однозначне відображення вихідного модуля.
Формальне визначення лексем.
Лексичні одиниці:
арифметичні операції: «+», «/», «^».
операції порівняння: «>», «<», «=», «>=», «<=», «<>»
операція присвоювання: «=»
дужка відкриває «(«
дужка закриваюча «)»
службові слова:
«Dim», «As», «Private», «Public», «Sub», «End», «goto», «Optional», «MsgBox», «InputBox».
умовний оператор: «If», «Then»
оператор циклу: «For», «Next»
тип и даних: «Single», «Byte», »Date», «Integer», «Boolean», «String», «Variant», «Object».
елементи управління: «TextBox», «ComandButton», «CheckBox», «PictureBox»
властивості елементів управління: «Caption», «Text», «With», «Height», «Visible»
спеціальні константи: «VbOkOnly», «VbOkCansel», «VbAbortRetryIgnore»,
«VbCritical»
логічні функції: «Not», «And», «Or»
функції: «Format», «CBool», «GetAllSettings». нижнє підкреслення: «_»
точка: «."
лапки: «@»
десяткові цілі константи
ідентифікатор
Розробляємо структури даних, які будуть використовуватися сканером.
Таблиця 1. Однолітерние термінальні символи TTC 1:
Адреса | Символ | KTL |
1 26 27 54 | a ... z A ... Z | 1 |
55 ... 64 | 0 ... 9 | 2 |
65 | = | 3 |
66 | > | 3 |
67 | < | 3 |
68 | ^ | 3 |
69 | * | 3 |
70 | - | 3 |
71 | \ | 3 |
2 липня | # | 3 |
7 березня | % | 3 |
7 Квітень | . |