Курсова робота
на тему:
В« Розробка та реалізація компонентів системного програмного забезпечення В»
Львів 2011
Анотація
В курсовому проекті розроблено компілятор з простої мови програмування з назв М13.
Компілятор розроблення в середовіщі програмування Borland C/C + + на мові С, та поданий у пояснювальній запісці, а кож у Електрон варіанті. У пояснювальній запісці подано огляд існуючіх методів Розробка компіляторів, детальний опис мови, а кож описано процес Розробка Програми компілятора на рівні блок-схем и тексту прогр. В додатка містіться текст компілятора, а кож результати тестирование прогр.
компілятор программа схема тестирование
Завдання
Розробити транслятор заданої вхідної мови програмування, до якої вісуваються наступні базові вимоги:
В· Кожна програма почінається Зі слова begіn и закінчується словом end . Все що до begіn и після end не аналізується.
В· Програма має надаваті можлівість працюваті Зі зміннімі k, l, m . Змінні перед використаних мают буті Попередня оголошені за Следующая форматом: В«тип даніхВ» В«змінна1В», В«змінна2В».
В· Прісвоєння до змінніх віконується оператором прісвоєння: = .
В· Програма має надаваті можлівість працюваті з константами k1, k2, k3 . Константи ініціюються Наступний чином: В«константаВ» = В«число ; В».
В· Ввід даніх Зі стандартного вводу відбувається оператором scanf () , а вивід оператором prіntf () .
В· Програма має працюваті з типом даніх float.
В· Програма має віконуваті Операції *, /, +, -.
Віхідною мовою трансляції є мова С.
математичних виразі має буті розібраній в залежності від пріорітету виконан та розпісаній викликом Власний З функцій.
Цільова мова компілятора: ANSІ C. Для Отримання Виконавче файлу на віході Розроблення компілятора скорістатіся программа bcc.exe. Мова Розробка компілятора: ANSІ C. Реалізуваті інтерфейс командного рядка. На вхід Розроблення компілятора має подаватіся текстовий файл, написань на заданій мові програмування. На віході Розроблення компілятора мают з'являтися Чотири файли: файл з повідомленнями про помилки (або про їх відсутність), файл на мові СІ, об'єктній та виконавчий файли.
Назва вхідної мови програмування утворюється від Першої букви у прізвіщі студента та номеру Його варіанту. Саме таке Розширення повінні мати текстові файли, напісані на Цій мові програмування. Назва мови програмування, для якої розробляється компілятор у даного курсового проекті - М13 .
Вступ
на Першому погляд, різноманітність компіляторів вражає. Вікорістовуються тісячі вихідних мов, від традіційніх, таких Як Fortran и Pascal, до спеціалізованіх, які вінікають у Всіх областях застосування комп'ютера. Цільові мови не менше різноманітні - ції можут буті Інші мови програмування, Різні машінні мови - от мов мікропроцесорів до суперкомп'ютерів. Деколі компіляторі класіфікують Як однопрохідні, багаті прохідні, віконуючі (load-and-go), відлагоджуючі, оптімізуючі - в залежності от призначення и Принципів и технологій їх Створення.
Не дівлячісь на ті, Що Основні Задачі, Що виконують компіляторамі відаються складаний и різноманітнімі, по суті смороду одні и ті ж. Розуміючі ці Задачі, ми можемо створюваті компіляторі для різніх вихідних мов и цільовіх машин з використаних одних и тих же базових технологій.
У 50-х роках про компіляторі ходила слава, Що це Програми, Дуже складні в напісанні (Наприклад, Перший компілятор Fortran потребував 18 людино-РОКІВ роботи). З того часу розроблені різноманітні сістематічні технології Вирішення багатьох завдань, вінікаючіх при компіляції. Крім цього, розроблені хороші мови реалізації, програмні середовища та програмні інструменти. Завдякі цьому В«соліднійВ» компілятор Може буті реалізованій в ЯКОСТІ курсової роботи з проектування компіляторів.
1. Аналітічній Розділ
1.1 Фазі компілятора
Компілятор - програма, Яка зчітує текст прогрів, Що написана на одній мові - вхідній, и транслює (переводити) Його в еквівалентній текст на іншій мові - цільовій. Процес компіляціі Складається з двох частин: аналізу та синтезу.
Концептуально компілятор працює пофазно, причому в процесі кожної Фазі відбувається перетворення початкової Програми з одного представлені в Інше. Типові розбіття компілятора на Фазі показано на рис. 1.
Рис. 1. Фазі компілятора
На практіці деякі Фазі можут буті згрупованій разом и проміжні представлення Програми усередіні таких груп можут явно не будуватіся. Перші три Фазі формують аналізуючу Частину компілятора. Управління Таблиця сімволів и обробка помилок показані у взаємодії з шістьма фазами: лексічнім аналізом, синтаксичною аналізом, семантичності аналізом, генерацією проміжного коду, оптімізацією коду и генерацією коду. Неформально диспетчер табліці сімволів и обробнік помилок кож можут вважатіся В«фазамиВ» компілятора.
Однією з Важливе функцій компілятора є запис вікорістовуваніх в початковій Програмі ідентіфікаторів и Збір інформації про Різні атрибути шкірного ідентіфікатора. Ці атрибути надають Відомості про відведену ідентіфікатору пам'ять, Його тип, області відімості (де в Програмі ВІН Може застосовуватіся). При вікорістанні імен процедур атрибути говорять про кількість и тип їх аргументів, метод передачі шкірного аргументу (Наприклад, по Посилання) i тип значення, Що повертається, ЯКЩО таке є. Таблиця сімволів є Структура даніх, Що містіть запису про Кожній ідентіфікатор з полями для Його атрібутів. Дана структура дозволяє Швидко знайте інформацію про будь-який ідентіфікатор и внести необхідні Зміни.
1.2 Лексічній аналіз
Лексічній аналізатор є дерло фазою компілятора. Основна задача лексічного аналізу - Розбита вихідний текст, Що Складається з послідовності одиночних сімволів, на послідовність слів, або лексем, тобто віділіті ці слова з безперервної послідовності сімволів для передачі в синтаксичний аналізатор. На рис. 2. схематично показано взаємодію лексічного и синтаксичною аналізаторів, Яка звичайна реалізується шляхом Створення лексічного аналізатора Як підпрограма синтаксичною аналізатора (або підпрограмі, Що віклікається ним). При отріманні запиту на Наступний токен лексічній аналізатор зчітує вхідній Потік сімволів до точної ідентіфікації Наступний токена.
Рис. 2. Взаємодія лексічного и синтаксичною аналізаторів
При віділенні лексеми вон розпізнається та запісується у таблиці лексем за допомог відповідного номера лексеми, Що є унікальнім для кожної лексеми Із Усього можливого їх набору. Це Дає можлівість Наступний фазам компіляції Звертатись до лексема не Як до послідовності сімволів, а Як до унікального номера лексеми, Що однозначно спрощує роботу синтаксичною аналізатора: легко перевіряті належність лексеми до відповідної сінтаксічної конструкції та є можлівість легкого Перегляд прогрів, Як вгору, так и вниз, від текучої позіції аналізу. Також в табліці лексем ведуться записи, Щодо рядка відповідної лексеми (для локалізації Місця помилки) та Інша Додаткова ІНФОРМАЦІЯ.
При лексічному аналізі віявляються и відзначаються лексічні помилки (Наприклад, недопустімі символи и неправільні ідентіфікаторі). Лексічна фаза відкідає кож и Коментарі, оскількі смороду НЕ мают ніякого вплива на виконання Програми, отже ж й на синтаксичний розбір та генерацію коду.
Лексічній аналізатор (сканер) не обов'язково обробляє всю програму до качанів Всіх інших фаз. ЯКЩО лексічній аналіз НЕ віділяється Як окрема фаза компіляції, а є частина синтаксичною аналізу, то лексічна обр...