Розробка системних програмних модулів та компонент систем програмування
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
µних нижче прикладів подібна аналізатору звичайного компілятора.
Форматування тексту. Програма форматування тексту одержує на вхід потік символів, більшість з яких представляє текст, що виводиться, але багато символів означає абзаци, малюнки або математичні структури, наприклад верхні або нижні індекси.
Кремнієві компілятори (Silicon compilers). Такий компілятор має початкову мову, схожу із звичною мовою програмування. Проте змінні мови представляють не місце в памяті, а логічні сигнали (0 або 1) або групи сигналів в комутованих лініях. На виході такого компілятора виходить схема пристрою на відповідній мові.
Інтерпретатори запитів. Дані інтерпретатори транслюють предикати, що містять оператори відношення і логічні оператори, в командах пошуку в базі даних записів, що задовольняють даному предикату.
1.3 Контекст компілятора
При створенні цільової програми, окрім компілятора, може бути потрібним і ряд інших програм. Початкова програма може бути розділена на модулі, що зберігаються в окремих файлах. Задача збору початкової програми іноді доручається окремій програмі препроцесору, який може також розкривати в тексті початкової програми скорочення, так звані макроси.
Цільова програма, створювана компілятором, може зажадати додаткову обробку перед запуском. Компілятор, створює асемблерний код, який переводиться асемблером в машинний код, а потім звязується (лінкуєтся) спільно з деякими бібліотечними програмами в код, що реально запускається на машині.
2. Формальний опис вхідної мови програмування
2.1 Деталізований опис вхідної мови в термінах розширеної нотації Бекуса-Наура
:= 0|1|2|3|4|5|6|7|8|9
:= A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z
:= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
}]
}]
:= Integer|Bool
:= +|
:= Mul|Div|Mod
:=!!|&&| ||
:= ==|!=|Le|Ge
:= Input
:= Output
] Finish
]
2.2 Опис термінальних символів та ключових слів
Program означає початок тексту програми, наступним описується імя програми;
Var блок опису змінних;
Start початок тіла програми (циклу);
Finish кінець тіла програми (циклу);
Input оператор вводу змінних;
Output оператор виводу (змінних і рядкових констант).
:= оператор присвоєння;
For початок циклу, наступним описується початкове значення відліку;
DownTo опис кінцевого значення відліку (крок циклу 1);
+ операція додавання;
операція віднімання;
Mul операція множення;
Div операція ділення;
Mod операція знаходження залишку від ділення;
== операція перевірки на рівність;
!= перевірка на нерівність;
Le перевірка чи менше/рівно;
Ge перевірка чи більше/рівно;
!! операція логічного заперечення;
&& конюнкція;
|| дизюнкція;
Integer 32ох розрядні знакові цілі;
Bool однобайтні логічні змінні;
/* початок коментарів;
*/ кінець коментарів;
<< початок рядкової константи при операції виводу;
>> кінець рядкової константи при операції виводу;
розділювач між аргументами;
; ознака кінця оператора;
( відкриваюча дужка;
) закриваюча дужка;
Як термінальні символи використовуються також усі індійські цифри (09), латинські букви (a-z, A-Z), символи табуляції, символ переходу на нову стрічку, пробіл та синтаксичні знаки (!,?,\,/, %,$,@,^,_).
3. Розробка транслятора вхідної мови програмування
3.1 Вибір технології програмування
Необхідно вибрати ефективні методи розвязку загальних задач, таких як розпізнавання лексем, синтаксичний розбір, семантичний аналіз та організація вводу/ виводу, обчислення арифметичних виразів та організація вкладених операторів. Для реалізації лексичного аналізу в курсовій роботі використано метод перебору, тобто до чергової лексеми додається наступна буква, а тоді здійснюється пошук лексеми в таблицях ключових слів, та ідентифікаторів, якщо лексема не знайдена, тоді видається повідомлення про помилку. Під час аналізу поточних лексем здійснюється перевірка на наявність коментарів та рядкових констант при виводі. Окремим проходом формується таблиця лексем, в яку коментарі не вносяться. Таблиця лексем містить рядок, в якому була знайдена лексема, саму лексему, клас лексеми та її код. Синтаксичний аналіз базується на перевірці послідовності класів лексем, наприклад, якщо після оператора присвоєння слідує синтаксична лексема, чи після математичного оператора слідує лексема з класу порівнянь, то буде сформовано повідомлення по помилку. Для розробки синтаксичного аналізатора використано модель автомата з магазинною памяттю. На фазі семантичного аналізу здійснюється перевірка на відповідність типів. На цьому етапі перевіряється, чи не використовуються в одному виразі змінні одного типу, та чи не застосовано до них недопустимих операцій. Генератор коду починає свою роботу, якщо на попередніх фазах не було виявлено помилок. В залежності від коду лексеми в асемблерний файл вставляєт