
- •Курсова робота
- •Виконав ст. Гр. Кі-35:
- •Завдання на курсову роботу:
- •Анотація
- •1. Огляд методів та способів проектування трансляторів 7
- •Огляд методів та способів проектування трансляторів
- •Формальний опис вхідної мови програмування
- •Деталізований опис вхідної мови в термінах розширеної нотації Бекуса-Наура(Backus/NaurForm - bnf).
- •2.2.Термінальні символи та ключові слова
- •Розробка транслятора вхідної мови програмування
- •Вибір технології програмування
- •Проектування таблиць транслятора
- •Розробка лексичного аналізатора
- •Опис лексичного аналізатора
- •3.3.2. Розробка граф-схеми алгоритму
- •Розробка синтаксичного та семантичного аналізатора
- •Опис синтаксичного аналізатора
- •Повне дерево граматичного розбору
- •Розробка генератора коду
- •Опис генератора коду
- •Опис програми(в тому числі граф-схем)
- •Опис інтерфейсу та інструкція користувачеві
- •Відлагодження та тестування програми
- •Виявлення лексичних помилок.
- •Список літератури
- •Додаток а. Лістингпрограми.
- •Додаток б. Приклад програми із лексичними та синтаксичними помилками та текст файлу з повідомленням про помилки.
- •Додаток в. Приклад коректної програми та результат її виконання.
- •Додаток г. Граф-схема алгоритму виконання програми через використання функцій.
Формальний опис вхідної мови програмування
Деталізований опис вхідної мови в термінах розширеної нотації Бекуса-Наура(Backus/NaurForm - bnf).
<program> |
::= STARTPROGRAM VARIABLE <declaration>; STARTBLOK<block>ENDBLOK |
< block> |
::= < operator > | [{< operator>}] |
<declaration> |
::= <ident> [ {,<ident>} ] <type> |
<type> |
::= INTEGER16_T |
<is> |
::= := |
<ident> |
::= “_”<h_letter>[<l _letter>|<l_letter>] |
<leter> |
::=< h_letter >|<l_letter> |
<h_letter> |
::= A|B|C|D|E|F|G|H|I|J|K|L|N|M|O|P|Q|R|S|T|U|V|W|X|Y|Z |
<l_letter> |
::=a|b|c|d|e|f|g|h|i|j|k|l|n|m|o|p|q|r|s|t|u|v|w|x|y|z |
<number> |
::= 0|1|2|3|4|5|6|7|8|9 |
<const> |
::= [“-”]<number>[{number}] ; |
<name_const> |
::=”{<letter >|<number> [{<letter>}]|[{<number>}]}” |
<operator> |
::= <equation >| <print>|<scan>|<branching>|<operator_block> |
<equation> |
::= <ident><is><expression> |
<expression> |
::= [(] <operand> [)] [{ [)]<operation>[(]<operand> [)] }] |
<operand> |
::= <ident>|<const> |<ident> |
<operation> |
::= <arifmetic>|<logic> |
<arifmetic> |
::=<arifmetic>+<harifmetic>|<arifmetic>-<harifmetic> | harifmetic |
<harifmetic> |
::=< harifmetic>*<farifmetic>|< harifmetic>DIV<farifmetic>| < harifmetic>%<farifmetic>|<farifmetic> |
<farifmetic> |
::=<operand>|(<arifmetic>) |
<logic> |
::=<egual>|[<egual>]|<logic_b> |
<logic_b> |
::=<logic_b>AND<logic_h>|<logic_h> |
<logic_h> |
::= NOT< logic_h>| <logic_bh> |
<logic_bh> |
::=(<logic>)OR<egual> |
<egual> |
::= (< operand ><eg_op><operand>) |
<eg_op> |
::= ==, <>, >>, << |
<branching > |
IF(<expression >) THEN STARTBLOCK <operator>;|[{<operator>;}] | [{<branching >}] ENDBLOK; [ ELSE STARTBLOCK <operator>;|[{<operator>;}] | [{<branching >}] ENDBLOK;] |
<scan> |
::= SCANDATA(<ident>); |
< print> |
::= PRINTDATA(<ident>); |
<operator_block> |
::= STARTBLOK < operator > | [{< operator>}] ENDBLOK |
Отже, вхідну мову можна описати за допомогою 14 виразів.
2.2.Термінальні символи та ключові слова
Визначимо окремі термінальні символи та нерозривні набори термінальних символів (ключові слова):
STARTPROGRAM |
VARIABLE |
; |
STARTBLOK |
ENDBLOK |
SCANDATA |
PRINTDATA |
:= |
( |
) |
, |
IF |
THEN |
ELSE |
+ |
- |
* |
DIV |
% |
== |
<> |
>> |
<< |
NOT |
AND |
OR |
INTEGER16_T |
@@ |
До термінальних символів віднесемо також усі цифри (0-9), латинські букви (a-z,A-Z), символ підкреслення, символи табуляції, символ переходу на нову стрічку та пробілу. Отже, всього: 28 + 10 + 52 + 4 = 94 термінальних виразів.