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

бесплатно 0
4.5 93
Методика розробки компілятору з вхідної мови програмування Pascal, оболонка, якого розроблена в середовищі програмування Borland C під операційну систему Windows. Блок-схема програми. Розробка оптимізатора та генератора коду. Тестування компілятора.


Аннотация к работе
Компілятор - це програма, яка читає текст програми, написаної на одній мові - початковій, і транслює (переводить) його в еквівалентний текст на іншій мові - цільовій. Оскільки сьогоднішній час - час великого розвитку комп‘ютерної галузі, то створений машинний код з часом стає застарілим, тобто не відповідає принципу оптимального використання комп‘ютерних ресурсів. Граматика визначає форму або синтаксис допустимих виразів мови. Для цього компілятор має виявляти всі невідповідності тексту програми конструкціям мови і у випадку відсутності помилок генерувати обєктний код або виконавчий модуль. В 50-х роках про компілятори ходила слава як про програми, украй складні в написанні (наприклад, на написання першого компілятора Fortran було витрачено людиною 18 - років роботи).Розробити компілятор з вхідної мови програмування короткий опис якої подано нижче (у відповідності з заданим варіантом) з виводом необхідної проміжної інформації на кожному кроці. Розробити інтерфейс користувача (інтегроване середовище програмування вхідною мовою).Розробити компілятор заданої вхідної мови програмування. · три типи даних: логічний тип даних (boolean), знаковий цілочисельний тип (1byte) та беззнаковий цілочисельний тип розміром 1 байт; · арифметичні операції над цілими: ,-, *, /, “-” (унарний мінус), ^ (операція піднесення до степеню); · оператор виводу (print); · Визначимо окремі термінальні символи та нерозривні набори термін.Їх базові оператори, операції, команди та директиви можна класифікувати по трьох основних групах: а) Безумовні оператори (statements) обрахунків та перетворень; В загальному випадку віртуальна машина складається з інформаційного, операційного, управляючого та комунікаційного компонентів. Будь-яка віртуальна машина повинна мати: 1) Память різних видів та типів для збереження кодів програм і даних (інформаційний компонент) і механізми доступу до неї; 2) Вказівник поточної операції (основа управляючої компоненти), що змінюється при підрахунку номера оператора; 3) Блок виконання операцій (operators), який реалізує функції операційних та управляючих компонентів.Інтерпретатор - це програма, яка обробляє вхідну програму, написану на вхідній мові і проводить обчислення, задані цією мовою. Транслятор - програма, що обробляє вхідну програму, написану на вхідній мові і генерує програму на обєктній мові. Обєктна мова як правило є мовою деякої ЕОМ і таку програму одразу можна виконувати. Транслятори можна поділити на асемблери і компілятори, які транслюють відповідно мови низького і високого рівня. Ця граматика визначає форму або синтаксис допустимих виразів мови.Для побудови компілятора необхідно спроектувати його будову на рівні функцій і їх взаємозвязків, тобто правил виклику.Синтаксичний аналіз - це процес, в якому досліджується послідовність лексем, яку повернув лексичний аналізатор, і визначається, чи відповідає вона структурним умовам, що сформульовані у визначені синтаксису мови. Синтаксичний аналізатор - це частина компілятора, яка відповідає за виявлення основних синтаксичних конструкцій вхідної мови. В задачу синтаксичного аналізатора входить: знайти та виділити основні синтаксичні конструкції мови в послідовності лексем програми, встановити тип та правильність побудови кожної синтаксичної конструкції і представити синтаксичні конструкції у вигляді, зручному для подальшої генерації тексту результуючої програми. Синтаксичний аналізатор повинен мати деяку результуючу мову, за допомогою якої він передає наступним фазам компіляції інформацію про знайдені і розібрані синтаксичні конструкції, якщо відокремлюється фаза генерації обєктного коду. Додатковою перевагою автоматичного створення аналізатора є можливість виявлення синтаксичних неоднозначностей та інших складних для розпізнавання конструкцій мови, які інакше могли б залишитися непоміченими на початкових фазах створення мови і його компілятора.Проте дуже часто програмісти пишуть програми з помилками, і добрий компілятор повинен допомогти програмісту знайти їх і локалізувати. Примітно, що хоча помилки - явище надзвичайно поширене, лише в декількох мовах питання обробки помилок розглядалося ще на фазі створення мови. Більшість специфікацій мов програмування, проте, не визначає реакції компілятора на помилки - це питання віддається на відкуп розробникам компілятора. Проте планування системи обробки помилок з самого початку роботи над компілятором може як спростити його структуру, так і поліпшити його реакцію на помилки. Наприклад, помилки можуть бутиКрім того, з боку мови програмування можуть бути додаткові вимоги. Наприклад поле запису повинне бути унікально в межах структури (або рівня структури), але може співпадати з імям обєктів зовні запису (або іншого рівня запису). В той же час імя поля може відкриватися оператором приєднання, і тоді може виникнути конфлікт імен (або неоднозначність в трактуванні імені). Якщо мова має блокову структуру, то необхідно забезпечити такий спосіб зберігання інформації, щоб, по-перше підтримувати блоковий механізм видимості,

План
Зміст

Вступ

1. Завдання на курсовий проект

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

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

3.1 Розробка лексичного аналізатора

3.1.1 Розробка блок-схеми програми

3.2 Розробка синтаксичного аналізатора

3.2.1 Обробка синтаксичних помилок

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

3.4 Розробка оптимізатора коду

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

4. Відладка та тестування компілятора

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

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

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

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

Висновки

Література

Додатки
Заказать написание новой работы



Дисциплины научных работ



Хотите, перезвоним вам?