На сайті 11893 реферати!

Усе доступно безкоштовно, тому ми не платимо винагороди за додавання.
Авторські права на реферати належать їх авторам.

Розробка системних програмних модулів та компонент систем програмування

Реферати > Комп'ютерні науки > Розробка системних програмних модулів та компонент систем програмування

Анотація

В курсовій роботі був розроблений транслятор з вхідної мови програмування, заданої завданням, на мову асемблер, з подальшою компіляцією отриманого коду і створення виконавчого файлу. Даний транслятор виконує лексичний аналіз, синтаксичний і семантичний, при наявності помилок у вхідному тексті програми створює список помилок і попереджень. У курсовій роботі створений лексичний аналізатор на базі скінченного автомата, а синтаксичний аналізатор на основі низхідного методу з використанням рекурсивного спуску.

Транслятор був розроблений за допомогою технології C# в середовищі MS Visual Studio 2010.

Зміст

Анотація……………………………………………………………………………………2

Зміст………………………………………………………………………………………3

Завдання на курсову роботу…………………………………………………………… 4

Вступ………………………………………………………………………………………5

1. Огляд методів та способів проектування трансляторів………………………….7

2. Формальний опис вхідної мови програмування………………………………….8

2.1. Деталізований опис вхідної мови в термінах розширеної нотації

Бекуса-Наура…………………………………………………………………………………….8

2.2. Опис термінальних символів та ключових слів…………………………………… 10

3. Розробка транслятора вхідної мови програмування……………………………12

3.1. Вибір технології програмування………………………………………………………12

3.2. Проектування таблиць транслятора та вибір структур даних………………13

3.3. Розробка лексичного аналізатора……………………………………………………16

3.3.1. Розробка граф-схеми алгоритму…………………………………………17

3.3.2. Опис програми реалізації лексичного аналізатора………………… 17

3.4. Розробка синтаксичного та семантичного аналізатора……………………….19

3.4.1. Розробка дерев граматичного розбору…………………………………20

3.4.2. Розробка граф-схеми алгоритму…………………………………………21

3.4.3. Опис програми реалізації синтаксичного та

семантичного аналізатора………………………………………………………………… 22

3.5. Розробка генератора коду…………………………………………………………….23

3.5.1. Розробка граф-схеми алгоритму…………………………………………23

3.5.2. Опис програми реалізації генератора коду…………………………….24

4. Опис інтерфейсу та інструкції користувача…………………………………… 25

5. Відлагодження та тестування програми…………………………………………27

5.1. Виявлення лексичних помилок………………………………………………………….27

5.2. Виявлення синтаксичних помилок…………………………………………………….28

5.3. Виявлення семантичних помилок…………………………………………………… 29

5.4. Загальна перевірка коректності роботи транслятора…………………………30

Висновки…………………………………………………………………………………31

Список літератури…………………………………………………………………… 32

Додатки………………………………………………………………………………….33

А. Лістинг програм……………………………………………………………………………33

Завдання на курсову роботу

Тема: Розробка транслятора з вхідної мови програмування.

- типи даних: INT32_t, BOOLEAN, const string;

- оператор вводу: READ;

- оператор виводу: WRITE;

- блок тіла програми: START, FINISH

- оператор: WHILE DO (Паскаль);

- регістр ключових слів: Up;

- регістр ідентифікаторів: Low2 ;

- операції арифметичні: ADD, SUB, MUL, DIV,MOD;

- операції порівняння: =, <>, LE, GE

- операції логічні: !, &, |;

- коментар: $$ .

- ідентифікатори змінних, числові константи, рядкові константи;

- оператор присвоєння: >>;

Для отримання виконавчого файлу з вихідного асемблерного коду потрібно використовувати ml.ex (MASM32) вбудований в MS Visual Studio 2010.

Вступ

Транслятор – програма або технічний засіб, що виконує трансляцію програми. Транслятор зазвичай виконує також діагностику помилок, формує словники ідентифікаторів, видає для друку тексти програми і т. д.

Трансляція програми – перетворення програми, представленої на одній з мов програмування, в програму на іншій мові, в певному сенсі, рівносильну з першою. Мова, на якій представлена вхідна програма, називається вихідним мовою, а сама програма – вихідним кодом. Вихідна мова називається цільовою мовою або об'єктним кодом.

Поняття трансляції відноситься не тільки до мов програмування, але і до інших комп'ютерних мов, на зразок мов розмітки, аналогічних HTML, і до природних мов, на зразок англійської або російської

Транслятори поділяються на:

- Адресний.

- Діалоговий.

- Багатопрохідної.

- Зворотний. (детранслятор).

- Однопрохідної.

- Оптимізуючий.

- Синтаксично-орієнтований (синтаксично-керований).

- Тестовий.

Мова процесорів (машинний код) зазвичай є низькорівневою. Існують платформи, які використовують в якості машинної мову високого рівня (наприклад, iAPX-432), але вони є винятком із правила через складність і високу вартість. Транслятор, який перетворює програми в машинну мову, який приймає і виконуваний безпосередньо процесором, називається компілятором.

Процес компіляції як правило складається з декількох етапів: лексичного, синтаксичного та семантичного аналізів (англ. Semantic analysis), генерації проміжного коду, оптимізації та генерації результуючого машинного коду. Крім цього, програма як правило залежить від сервісів, наданих операційною системою і сторонніми бібліотеками (наприклад, файловий ввід-висновок або графічний інтерфейс), і машинний код програми необхідно пов'язати з цими сервісами. Для зв'язування зі статичними бібліотеками виконується редактор зв'язків або компонувальник (який може представляти із себе окрему програму або бути частиною компілятора), а з операційною системою і динамічними бібліотеками зв'язування виконується на початку виконання програми завантажувача.

1. Огляд методів та способів проектування трансляторів

Є такі методи створення компіляторів:

1. Прямий метод- цільовою мовою і мовою реалізації є асемблер.

2. Метод розкрути- саме цей метод і використовується у даній курсовій роботі, тобто вибирається інструмент (в даній курсовій це мова асемблер), для якого вже існує компілятор.

3.Використання крос-трансляторів.

4.З використанням віртуальних машин–дає спосіб отримати переносимо програму.

5. Компіляція на ходу.

В даній курсовій роботі згідно із завданням для парних варіантів необхідно реалізувати низхідний метод граматичного розбору. Низхідний розбір — один з методів визначення приналежності вхідного рядка деякій формальній мові, описаній LL(k)-граматикою.

Для кожного нетермінального символу K будується функція, яка для будь-якого вхідного слова x робить дві речі:

· Знаходить найбільший початок z слова x, здатний бути початком виводжуваного з K слова

· Визначає, чи є початок z виводжуваним з K

Така функція має задовольняти наступні критерії:

· зчитувати із ще необробленого вхідного потоку максимальний початок A, який є початком деякого слова, виводжуваного з K

· визначати чи є A вивідним з K або просто невивідним початком виводжуваного з K слова

У випадку, якщо такий початок зчитати не вдається (і коректність функції для нетермінала K доведена), тоді вхідні дані не відповідають мові, і потрібно зупинити розбір.Розбір містить у собі виклики описаних вище функцій. Якщо для зчитаного нетермінала є складене правило, тоді при його розборі будуть викликані інші функції для розбору терміналів, що входять в нього. Дерево викликів, починаючи із самої«верхньої» функції еквівалентно дереву розбору.

Перейти на сторінку номер: 1  2  3  4  5  6 Версія для друкуВерсія для друку   Завантажити рефератЗавантажити реферат