
- •Анотація
- •1. Огляд методів та способів проектування трансляторів
- •1.1. Введення в трансляцію
- •1.2. Структура транслятора
- •1.3. Проходи транслятора
- •1.4. Засоби побудови трансляторів
- •2. Формальний опис вхідної мови програмування
- •2.1 Деталізований опис вхідної мови в термінах ebnf
- •2.2 Опис термінальних символів та ключових слів
- •3. Розробка транслятора вхідної мови
- •3.1 Вибір технології програмування
- •3.2 Проектування таблиць транслятора та вибір структур даних
- •3.3 Розробка лексичного аналізатора
- •Розробка граф-схеми алгоритму
- •Опис програми реалізації лексичного аналізатора
- •3.4 Розробка синтаксичного та семантичного аналізатора
- •Розробка граф-схеми алгоритму
- •Опис програми реалізації синтаксичного та семантичного аналізатора
- •3.5 Розробка генератора коду
- •Розробка граф-схеми алгоритму
- •Опис програми реалізації генератора коду
- •Повне дерево граматичного розбору
- •Результат роботи генератора коду:
- •4. Опис інтерфейсу та інструкції користувача
- •5. Відлагодження та тестування програми
- •5. 1. Виявлення лексичних помилок
- •Виявлення синтаксичних помилок
- •Для початку протестуємо наступний код в якому навмисно допущено різноманітні помилки. Як видно з (рис. 5.2) транслятор коректно виявляє різноманітні синтаксичні помилки.
- •Виявлення семантичних помилок
- •5.2. Загальна перевірка коректності роботи транслятора
- •Висновки
- •Список літератури
- •Додаток а: Завдання на курсову роботу
- •Додаток б: Загальний алгоритм роботи транслятора
- •Додаток в. Текст коректної програми на мові z30
Міністерство освіти, науки, молоді та спорту України.
Національний університет “Львівська політехніка”
ІКТАМ
Кафедра ЕОМ
КУРСОВА РОБОТА
з дисципліни:
“Системне програмування”
на тему:
“Розробка системних програмних модулів та компонент систем програмування”
Виконав:
Ст.гр. КІ-35
Жміковський Ю. С.
Перевірив: Грос В. В
Львів-2013
ЗАВДАННЯ
Варіант 30;
Розробити транслятор вхідної мови програмування , короткий опис якої подано нижче:
тип даних: integer_4;
арифметичні операції над цілими: add; sub; *; /; %;
операції порівняння: =; <>; !>; !<
операції над логічними !!; &&; ||
символи групування арифметичних операцій: “(”, “)”;
оператор присвоєння: “>>” ;
оператори блоку: “ startblok variable…; ”, “endblock”;
коментар //…
оператор циклу IF [–ELSE] (СІ)
оператори вводу, виводу: read, write
Для отримання виконавчого файлу на виході розробленого транслятора скористатися програмами MASM32.
Анотація
В даній курсовій роботі розроблено транслятор з мови Z30 на мову асемблер. Даний транслятор розроблений в середовищі програмування Visual Studio 2010. Мова програмування на якій написано проект С#. Також тут подано огляд існуючих методів розробки трансляторів, детальний опис мови, описано процес розробки програми транслятора на рівні тексту програми, граф схеми алгоритму усіх етапів трансляції. До роботи додано результати тестування програми та текст програми транслятора.
ЗМІСТ
ВСТУП
1. Огляд методів та способів проектування трансляторів …………………….6
1.1. Введення в трансляцію ………………………………………………………..6
1.2. Структура транслятора ………………………………………………………...7
1.3. Проходи транслятора ………………………………………………………..8
1.4. Засоби побудови трансляторів ………………………………………………9
2. Формальний опис вхідної мови програмування …………………………….10
2.1. Деталізований опис вхідної мови в термінах розширеної нотації Бекуса-Наура. ……………………………………………………………………………..10
2.2. Термінальні символи та ключові слова …………………………………….11
3. Розробка транслятора вхідної мови програмування ………………………12
3.1. Вибір технології програмування ……………………………………………12
3.2. Проектування таблиць транслятора ……………………………………….12
3.3. Розробка лексичного аналізатора …………………………………………..15
3.4. Розробка синтаксичного аналізатора ………………………………………17
3.5. Розробка генератора коду …………………………………………………..20
4. Опис інтерфейсу та інструкція користувача …………………………………26
5. Відлагодження та тестування програми …………………………………….27
5.1. Виявлення помилок ………………………………………………………….27
5.2. Загальна перевірка коректності роботи транслятора ……………………30
ВИСНОВКИ ………………………………………………………………………31
СПИСОК ЛІТЕРАТУРИ ………………………………………………………….32
Додаток A. Завдання на курсову роботу …………………………………33
Додаток Б. Загальний алгоритм роботи транслятора ………………….34
Додаток В. Текст коректної програми на мові Z30 …………………….35
ВСТУП
Транслятори та компілятори є одною з невід’ємних частин системного програмного забезпечення. Одним із їх завдань є переведення написаного тексту програми у машинний код чи код іншої мови програмування, який повинен відповідати комп‘ютерній системі. Оскільки теперішній час – час стрімкого розвитку комп‘ютерної техніки, то створений машинний код з часом стає застарілим, тобто не відповідає принципу оптимального використання апаратних ресурсів. І одним із способів запобігання цієї проблеми стало створення нових трансляторів, які б відповідали потребам теперішнього часу.
По своїй суті транслятор – це той самий компілятор, з тією різницею, що генерую він не об’єктний код а код на іншій мові програмування. [1]
Проблема трансляції полягає в пошуку відповідності тексту вхідної програми конструкціям, що визначені граматикою. Граматика визначає форму або синтаксис допустимих виразів мови. Тому текст вхідної мови зручно подавати у вигляді послідовності лексем, що є неподільними одиницями мови. За допомогою транслятора програміст повинен мати можливість редагувати текст вхідної мови. Для цього він має виявляти всі невідповідності тексту програми конструкціям мови і у випадку відсутності помилок генерувати код.
На сьогодні існує досить багато мов програмування. Нарівні з традиційними мовами, такими, як Fortran, широке поширення отримали так звані «універсальні мови» (Паскаль, Сі, Модула-2, Ада та інші), а також деякі спеціалізовані (наприклад, мова обробки облікових структур Лісп).
Для деяких мов є досить багато реалізацій. Наприклад, реалізацій Паскаля, Модули-2 або Сі для ЕОМ типу IBM/PC на ринку десятки. З іншого боку, постійно зростаюча потреба в нових компіляторах пов’язана з бурхливим розвитком архітектури ЕОМ. Цей розвиток йде у різних напрямах. Удосконалюється стара архітектура, як в концептуальному відношенні, так і по окремих, конкретних лініях. Отже, це вимагає нових компіляторів, трансляторів (або модифікації старих).