Смекни!
smekni.com

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

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

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

Так як генерація коду тісно пов’язана з синтаксичним аналізом, тобто код конструкції генерується відразу після розпізнавання.

Рис 3.Граф-схема роботи генератора коду

Блок 1 – Початок синтаксичного аналізатора

Блок 2 – Основна функція аналізатора

Блок 3 – Перевіряє чи наступний символ Var

Блок 4 – Генерація блоку даних

Блок 5 - Перевіряє чи наступний символ INT32_t

Блок 6 – Генерація 4-х байтних хмінних

Блок 7 - Виконання функції ParseVAR()

Блок 8 - Перевіряє чи наступний символ BOOLEAN

Блок 9 – Генерація однобайтних змінних

Блок 10 - Виконання функції ParseVAR()

Блок 11 - Перевіряє чи наступний символ START

Блок 12 - Перевіряє чи наступний символ WRITE

Блок 13 – Генерація процедури виводу

Блок 14 - Виконання функції ParseSTART()

Блок 15 - Перевіряє чи наступний символ READ

Блок 16 - Генерація процедури вводу

Блок 17 - Виконання функції ParseSTART()

Блок 18 - Перевіряє чи наступний символ <ident>

Блок 19 - Генерація виразів

Блок 20 - Виконання функції ParseSTART()

Блок 21 - Перевіряє чи наступний символ WHILE

Блок 22 – Генерація блоку While

Блок 23 - Виконання функції ParseSTART()

Блок 24 – Перевіряє чи наступний символ FINISH

Блок 25 – Генерація завершення програми

Блок 26 - Завершення Синтаксичного аналізатора

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

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

Реакція на лексеми розроблена так, що пустий код не буде включений в асемблерний файл. Для того щоб уникнути помилок, імена ідентифікаторів, дані у вхідній програмі користувачем, вносяться у асемблерний файл із змінами. Наприклад, невідомо, як буде працювати згенерований код, якщо у ньому будуть зустрічатись створені користувачем змінні end, loop.

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


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

Програма NotepadProg можна запустити з виконавчого файлу NotepadProg.exe, або вибрати пункт меню Пуск/Виконати і ввести шлях до файлу і назву програми. NotepadProg є програмою, яка працює на платформі .NET і є візуальною програмою, тому для її запуску повинна бути встановлена платформа net framework не нижче версії 2.0. NotepadProg містить редактор тексту і транслятор. Редактор тексту дозволяє відкривати файли з розширенням *.prog.

Рис 4.Вікно редактора тексту

В редакторі присутні наступні функції:

- Ведення і редагування тексту

- Відкриття нового файл

- Збереження файлу

- Закриття файлу

- Копіювання тексту

- Зміна шрифту програми

- Зміна режимів розташування вікон редактора (каскадний, горизонтальний, вертикальний)

Після введення тексту програми код потрібно з транслювати. Під час першого запуску програми потрібно задати шлях до папки masm32 щоб в згенерований код транслятор коректо додав адресу бібліотек Win32. Щоб задати шлях потрібно виконати команду tools/Folders

Рис 5.Вікно введення шляху до папки masm32

Після цього можна запустити транслятор вхідної мови це можна зробити за допомогою пункту меню Build/Run (F5). Вікно транслятора складається з 5 вкладок:

- Таблиця лексем

- Таблиця Ідентифікаторів

- Таблиця рядкових констант

- Таблиця помилок

- Файл Асемблерного коду

Рис 6.Вікно транслятора

Щоб отримати виконавчий файл потрібно згенерований код скомпілювати за допомогою ml.exe який вбудований в MS Visual Studio 2010.

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

Відлагодження програми відбувається на основі спеціально створених тестів за допомогою автоматизованого відлагоджувача який присутній в середовищі Ms Visual Studio 2010, в покроковому режимі перевіряється значення потрібних змінних і вмістиме потрібних структур даних. За допомогою breakpoints відбувається запинка виконання програми в тих місцях де відбулася логічна помилка або в місцях визначених студентом.

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

До помилок виявлених на етапі лексичного аналізу відносить тільки одна помилка – виявлення нерозпізнаної лексеми. Якщо було виявлено нерозпізнану лексему – в таблицю лексем заноситься поле з коментарем «нерозпізнана лексема», і їй присвоюється код -1, і на етапі синтаксичного аналізу буде згенерована помилка пов’язана з цією лексемою.Приклад виявлення нерозпізнаної наведений на рис. 7:

Рис 7.Виявлення помилок на етапі лексичного аналізу

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

На етапі синтаксичного аналізу виявляється основна кількість помилок. Ці помилки пов’язані з невірними записами конструкцій вхідної мови. Всі помилки виявленні на етапі синтаксичного аналізу заносяться в таблицю помилок, Таблиця помилок містить лексему яка спричинила помилку, коментар і рядок в якому виникла помилка. Приклад таблиці помилок наведений на рис. 8:

Рис 8.Виявлення помилок на етапі синтаксичного аналізу


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

Суттю виявлення семантичних помилок є перевірка числових констант на відповідність типу INT32_t , тобто знаковому цілому числу з відповідним діапазоном значень і перевірку на коректність використання змінних INT32_t і BOOLEAN у цілочисельних і логічних виразах. Результат роботи семантичного аналізу наведений на рис. 9:

Рис 9.Виявлення помилок на етапі семантичного аналізу

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

Загальна перевірка полягає в транслюванні завідомо коректної вхідної програми з використанням всіх можливостей мови в асемблерний код та перевірці на правильність виконання програми попередньо скомпільованої та злінкованої за допомогою ml.exe

Текст програми:

PROGRAMM n1

VAR

INT32_t a >> 665, b >> 664, z>>4, x>> 3,y;

BOOLEAN d >> TRUE,f >> FALSE, e>>TRUE;

INT32_t c1 >> 678;

START

c1 >> (aSUB548)MUL((fSUBb)MUL(zADDx));

d >> f & d | e;

WRITE(c1);

WHILE(a LE b)START

WRITE("z = ");

READ(z);

WHILE(f)START

WRITE(c1);

FINISH;

WRITE("New message");

WRITE("Hello");

b >> b ADD 1;

FINISH;

a ADD b;

FINISH

Результати роботи програми:

Висновки

Підчас виконання курсової роботи:

1. Складено формальний опис мови програмування Prog у формі розширеної нотації Бекуса-Наура, дано опис усіх символів та ключових слів.

2. Створено транслятор мови програмування Prog, а саме:

2.1.1. Розроблено лексичний аналізатор, здатний розпізнавати лексеми, що є описані в формальному описі мови програмування, та додані під час безпосереднього використання транслятора.

2.1.2. Розроблено синтаксичний аналізатор на основі рекурсивного спуску. Дерево виклику функцій згідно правил записаних в нотації у формі Бекуса-Наура.

2.1.3. Розроблено генератор коду, який починає свою роботу під час коректного виявлення кожної конструкції і генерує код який відповідає кожній конструкції вхідної мови. Проміжним кодом генератора є програма на мові Assembler(i586). Вихідним кодом є машинний код, що міститься у виконуваному файлі

3. Проведене тестування транслятора за допомогою тестових програм за наступними пунктами: Виявлення лексичних помилок. Виявлення синтаксичних помилок. Загальна перевірка роботи компілятора. Тестування не виявило помилок в роботі компілятора, а всі помилки в тестових програмах мовою prog були виявлені і дано попередження про їх наявність. В результаті виконання даної курсової роботи було успішно засвоєно методи розробки та реалізації компонент системного програмного забезпечення.
Список використаної літератури

1. Ахо и др. Компиляторы: принципы, технологии и инструменты.: Пер с англ. – М.: Издательський дом «Вильямс». 2003. – 768 с.: ил. Парал. тит. англ.

2. Шильдт Г. С#. – Санкт-Петербург: BXV, 2002. – 688 с.

3. Компаниец Р.И., Маньков Е.В., Филатов Н.Е. Системное программирование. Основы построения трансляторов. – СПб.: КОРОНА принт, 2004. – 256 с.

4. Б. Керниган, Д. Ритчи «Язык программирования Си». – Москва «Финансы и статистика», 1992. – 271 с.

5. Л. Дао. Программирование микропроцессора 8088. Пер.с англ.‑М. «Мир», 1988.

6. Ваймгартен Ф. Трансляция языков программирования. – М.: Мир, 1977.

За деталями звертатись -> Моя сторінка