Первая страница
Наша команда
Контакты
О нас

    Головна сторінка



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

Скачати 324.74 Kb.

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




Скачати 324.74 Kb.
Сторінка1/4
Дата конвертації08.05.2017
Розмір324.74 Kb.
  1   2   3   4

http://antibotan.com/ - Всеукраїнський студентський архів


Анотація
Згідно заданого завдання в даному курсовому проекті розроблено компілятор з вхідної мови програмування Pascal.
Студе́нт (лат. studens, родовий відмінок studentis - «ретельно працюючий», «такий, що займається») - учень вищого, у деяких країнах і середнього навчального закладу.
Мо́ва програмува́ння (англ. Programming language) - це штучна мова, створена для передачі команд машинам, зокрема комп'ютерам. Мови програмування використовуються для створення програм, котрі контролюють поведінку машин, та запису алгоритмів.
Оболонка компілятора розроблена в середовищі програмування Borland C під операційну систему Windows і в опис проекту не входить.
Проектува́ння - процес створення проекту, прототипу, прообразу майбутнього об'єкта, стану та способів його виготовлення. У проектуванні застосовують системний підхід, який полягає у встановлені структури системи, типу зв'язків, визначені атрибутів, аналізуванні впливів зовнішнього середовища.
Операці́йна систе́ма, скорочено ОС (англ. operating system, OS) - це базовий комплекс програм, що виконує управління апаратною складовою комп'ютера або віртуальної машини; забезпечує керування обчислювальним процесом і організовує взаємодію з користувачем.
Сам компілятор написанний на мові Pascal, та поданий у пояснювальній записці, а також разом з оболонкою в електронному варіанті.
Електро́ніка (від грец. Ηλεκτρόνιο - електрон) - наука про взаємодію електронів з електромагнітними полями і про методи створення електронних приладів і пристроїв, в яких ця взаємодія використовується для перетворення електромагнітної енергії, в основному для передачі, обробки і зберігання інформації.
Пояснювальна записка - документ, в якому: офіційна (юридична) доповідь про певні дії в певний проміжок часу (на яку може даватись позитивна або негативна оцінка, якщо пояснювальна залишилась без відповіді - це адміністративне порушення керівництва); міститься додаток чи доповнення до основного документа, в якому пояснюється зміст окремих його положень (мета, актуальність, структура, зміст призначення та ін. плану, звіту, проекту тощо). Пояснювальні записки можуть бути службовими (відтворюються, як правило, на бланках) й особистими (відтворюються на аркушах паперу за підписом автора). Пояснювальна записка до законопроекту - документ, який подається разом з законопроектом його автором до парламенту і містить (в Україні): обґрунтування необхідності прийняття законопроекту, цілей, завдань і основних його положень та місця в системі законодавства; обґрунтування очікуваних соціально-економічних, правових та інших наслідків застосування закону після його прийняття; інші відомості, необхідні для розгляду законопроекту.
В пояснювальній записці подано детальний опис мови, огляд існуючих методів розробки компіляторів, а також описано процес розробки програми компілятора на рівні блок-схем і тексту програми.
Компілятор (англ. Compiler від англ. to compile - збирати в ціле) - комп'ютерна програма (або набір к. програм), що перетворює (компілює) вихідний код, написаний певною мовою програмування (мова джерела, англ. source language)
Блок-схема (рос. блок-схема, англ. block scheme, flowchart, block diagram, flow diagram; нім. Block-schema) - Представлення задачі для її аналізу або розв'язування за допомогою спеціальних символів (геометричних образів), які позначають такі елементи, як операції, потік, дані тощо.
Початковий код (англ. source code; також перекладається українською як вихідний код, програмний код, джерельний код, первинний код, текст програми, у професійному середовищі також сирцевий код, у контексті код або сирці) - будь-який набір інструкцій або оголошень, написаних комп'ютерною мовою програмування у формі, що її може прочитати і модифікувати людина.
До проекту додано результати тестування програми.
Зміст
Вступ

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 Загальна перевірка коректності роботи транслятора

Висновки

Література

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

Створення компіляторів є одною з невід‘ємних частин системного програмного забезпечення.

Трансляція (від старофр. translater, від лат. translatus, прикметник минулого часу від transferre - «передавати», «переносити», передача)
Трансля́тор (англ. translator) - програма або технічний засіб, який виконує перетворення чи іншу обробку текстів програм.
Логічна еквівалентність (еквіваленція) - двомісна логічна операція, що має значення «істина» тоді і тільки тоді, коли обидва операнди мають однакове значення. В інших випадках еквіваленція буде хибною.
Кори́стува́ч - той, хто користується чим-небудь - майном, землею, комп'ютером тощо.
Системні програми (англ. system software) - це програми, що забезпечують інфраструктуру, на якій можуть працювати прикладні програми, тобто вони керують і контролюють комп'ютерним обладнанням, для можливості виконання прикладних програм.
Одним із завдань компілятора є переведення написаного тексту програми у машинний код, який повинен відповідати комп‘ютерній системі. Оскільки сьогоднішній час – час великого розвитку комп‘ютерної галузі, то створений машинний код з часом стає застарілим, тобто не відповідає принципу оптимального використання комп‘ютерних ресурсів. Тому для запобігання цього явища необхідно створювати нові компілятори, які б відповідали потребам теперішнього часу.
Необхідність - система зв'язків і відносин, що зумовлює зміну, поступальний рух, розвиток у жорстко визначеному напрямку з жорстко визначеними результатами. Іншими словами, необхідність - це такий зв'язок, що обов'язково призводить до певної події.
Принцип (лат. principium - начало, основа) - це твердження, яке сприймається як головне, важливе, суттєве, неодмінне або, принаймні, бажане. У повсякденному житті принципами називають внутрішні переконання людини, ті практичні, моральні та теоретичні засади, якими вона керується в житті, в різних сферах діяльності.
Теперішній час - в українській мові - форма дієслова, що в основному виражає дію або стан, сучасні з моментом мовлення. Часто, однак, вона набуває значень безвідносних до цього моменту (у приказках, правилах, описах і т. д., наприклад, «Тиха вода греблю рве», «Київ лежить над Дніпром»)

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

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

На перший погляд, різноманітність компіляторів приголомшує. Використовуються тисячі початкових мов, від традиційних, таких як Fortran і Pascal, до спеціалізованих, виникаючих у всіх областях комп'ютерних технологій.

Інформаці́йні техноло́гії, ІТ (використовується також загальніший / вищий за ієрархією термін інформаційно-комунікаційні технології (Information and Communication Technologies, ICT) - сукупність методів, виробничих процесів і програмно-технічних засобів, інтегрованих з метою збирання, опрацювання, зберігання, розповсюдження, показу і використання інформації в інтересах її користувачів.
Можливість - це дія, що може відбутися або ні (можливо, приїду, а, можливо, і ні). Можливість можна забезпечити чи покладатись на «авось» та якось буде. Альтернатива дає шанс, але не гарантує без відповідних дій забезпечення результату і адекватності та конструктиву діяльності.
Тради́ція - досвід, звичаї, погляди, смаки, норми поведінки і т. ін., що склалися історично і передаються з покоління в покоління; звичайна, прийнята норма, манера поведінки, усталені погляди, переконання когось; узвичаєння, узвичаєність, неписаний закон.
Цільові мови не менше різноманітні – це можуть бути інші мови програмування, різні машинні мови – від мов мікропроцесорів до суперкомп'ютерів.
Мікропроце́сор (англ. microprocessor) - інтегральна схема, яка виконує функції центрального процесора (ЦП) або спеціалізованого процесора. Сьогодні слово мікропроцесор є практично повним синонімом слова процесор, оскільки функціональний блок, що на ранніх стадіях розвитку обчислювальної техніки займали цілу плату чи навіть шафу, тепер вміщається в одну невеличку інтегральну схему із сотнями мільйонів транзисторів всередині. З середини 1980-х мікропроцесори витіснили інші види ЦП. Проте загалом це не так: центральні процесорні пристрої деяких суперкомп'ютерів навіть сьогодні є складними комплексами великих (ВІС) і надвеликих (НВІС) інтегральних схем.
Іноді компілятори класифікують як однопрохідні, багатопрохідні, виконуючі, відлагоджуючі, оптимізуючі — залежно від призначення і принципів та технологій їх створення.
Однопрохідні (Monotremata) чи яйцекладні - єдиний сучасний ряд інфракласу Першозвірі (Prototheria).
Не дивлячись на уявну складність і різноманітність, основні задачі, виконувані різними компіляторами, по суті, одні і ті ж. Розуміючи ці задачі, ми можемо створювати компілятори для різних початкових мов і цільових машин з використанням одних і тих же базових технологій. Знання про організацію і написання компіляторів істотно зросли з часів перших компіляторів, що з'явилися на початку 1950-х рр. Сьогодні складно визначити, коли саме з'явився на світ перший компілятор, оскільки в ті роки проводилося багато експериментів і розробок різними незалежними групами.
Організа́ція (від грец. ὄργανον - інструмент) - цільове об'єднання ресурсів для досягнення певної мети.
Експериме́нт (англ. experiment) - сукупність дослідів, об’єднаних однією системою їх постановки, взаємозв’язком результатів і способом їх обробки. В результаті експерименту отримують сукупність результатів, які допускають їхню сумісну обробку і зіставлення.
В основному метою цих розробок було перетворення в машинний код арифметичних формул.
Арифме́тика (дав.-гр. ἀριϑμητική - мистецтво лічби, вчення про числа, від дав.-гр. αριθμός - число) - наука про числа, їх властивості й операції над ними.
В 50-х роках про компілятори ходила слава як про програми, украй складні в написанні (наприклад, на написання першого компілятора Fortran було витрачено людиною 18 - років роботи). З тих пір розроблені різноманітні системні технології рішення багатьох задач, що виникають при компіляції. Крім того, розроблені хороші мови реалізації, програмні середовища і програмний інструментарій. Проблема компіляції полягає в пошуку відповідності тексту вхідної програми конструкціям, що визначені граматикою.
Про́даж - це оплатна передача майна однією особою у власність іншій особі.
Програма (фр. programme письмове оголошення, порядок денний, від грец. prógramma вказівка) - заздалегідь затверджена (визначена) дія.
Проблема - складне теоретичне або практичне питання, що потребує розв'язання, вивчення, дослідження. Проблема - об'єкт (питання, недолік чи потреба чогось,завада від надлишку чи наявності чогось, процес) явище збуджуючого характеру як стимул діяльності спонукаючого характеру - незадоволений попит чи нереалізовані потреби (нестача або відсутність, надлишок або наявність чого-небудь), дефект, вада, чи загроза що змушує цілеспрямовано ліквідувати проблему шляхом уникнення взаємодії чи зміни стану об'єкту, себе чи свого ставлення до подій.
Граматика визначає форму або синтаксис допустимих виразів мови.. Тому текст вхідної мови зручно подавати у вигляді послідовності лексем, що є неподільними одиницями мови. За допомогою компілятора програміст повинен мати можливість редагувати текст вхідної мови. Для цього компілятор має виявляти всі невідповідності тексту програми конструкціям мови і у випадку відсутності помилок генерувати об'єктний код або виконавчий модуль. Сьогодні від компілятора вимагається також створення оптимізованого коду програми. Тому створення ефективного виконавчого коду є дуже проблемою в наш час, бо для створення цього необхідно враховувати всі можливі варіанти покращеної апаратної частини, розвиток якої досяг сьогодні теоретичної межі продуктивності.

Завдяки цьому "солідний компілятор" може бути реалізований навіть як курсова робота по проектуванню компіляторів.

Тео́рія (від грец. θεωρία - розгляд, дослідження) - сукупність висновків, що відображає відносини і зв'язки між явищами реальності у вигляді інформаційноі моделі. Теорією стає гіпотеза, що має відтворюване підтвердження явищ та механізмів і дозволяє спостерігачу прогнозувати наслідки дій чи зміни стану об'єкта спостережень.
Курсова робота (Курсовий проект) - вид самостійної навчально-наукової роботи з елементами дослідження, що виконується студентами вищих або середніх-спеціальних навчальних закладів протягом семестру з метою закріплення, поглиблення і узагальнення знань, одержаних за час навчання та їх застосування до комплексного вирішення конкретного фахового завдання.


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

Розробити компілятор з вхідної мови програмування короткий опис якої подано нижче (у відповідності з заданим варіантом) з виводом необхідної проміжної інформації на кожному кроці. Розробити інтерфейс користувача (інтегроване середовище програмування вхідною мовою).

Варіант № 13

В таблиці варіанта завдання використано наступні позначення:

A: Тип даних: byte(1).

B: Додаткова арифметична операція: ^ (піднесення до степеня).

Арифметичні дії є двомісними операціями на множині чисел - на вході беруть два числа (операнда), і повертають одне число як результат.

C: Додаткова логічна операція: NOT.

D: Оператор циклу: do-while (2).






A

B

C

D

13

1 (byte)

^

NOT

do-while


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

  • три типи даних: логічний тип даних (boolean), знаковий цілочисельний тип (1byte) та беззнаковий цілочисельний тип розміром 1 байт;
    Ло́гіка (грец. λογιχη від грец. logos - слово, значення, думка, мова) - наука про закони і різновиди мислення, способи пізнання та умови істинності знань і суджень.
    Тип даних - характеристика, яку явно чи неявно надано об'єкту (змінній, функції, полю запису, константі, масиву тощо). Тип даних визначає множину припустимих значень, формат їхнього збереження, розмір виділеної пам'яті та набір операцій, які можна робити над даними.


  • змінних з довільної довжини;

  • арифметичні операції над цілими: , -, *, /, “-” (унарний мінус), ^ (операція піднесення до степеню);
    Підвищення (елевація) - кутова висота об'єкта спостереження (земного предмета, літального апарату, небесного світила тощо) над істинним горизонтом. Підвищення спільно з азимутом служить для визначення напрямку на об'єкт.


  • символи групування арифметичних операцій “(” , “)”

  • логічні операції над цілими: <, >, ==, | = ;

  • логічну операцію над логічними даними NOT;

  • оператор присвоєння “=”;

  • оператори блоку “{“ , “}”;

  • оператор виводу (print);

  • оператор виконання дії за умовою (if-then-else);

  • оператор циклу (do-while);

Визначимо окремі термінальні символи та нерозривні набори термін.

Символів(ключові слова);

{( usigned

} ) char


; < if

= > then


= = else

- <> while

^ NOT do

* program true

/ bool false

print


До термінальних символів віднесемо також усі цифри (0-9), латинські букви (a-z, A-Z) та символ пробілу (“ ”).
Си́мвол (англ. symbol символ) - знак, сутність, яка позначає іншу сутність.
Терміна́л (від лат. terminus - кінець, англ. terminal - кінцевий, заключний).
Лати́нська абе́тка, або латиниця, латинка - абетка латинської мови, історично є відгалуженням етруської абетки, що в свою чергу постала з грецької. Виникнення латинської абетки датують 7 ст. до н. е. Напрямок письма: спочатку справа наліво, потім справа наліво й, через рядок, зліва направо (так званий бустрофедон), з 4 ст.
Всього 28 10 52 1=91 термінальних виразів. Це “цеглинки”, з яких має будуватися текст будь-якої вхідної програми.

  • символ “ | ” розділяє альтернативи

  • символи “ [ ”,“ ] ” означає необов’язковість

  • символи “ { ”,“ } ” означає повтор

Формальний опис заданої мови BNF:

::= prog



::= { | [{}]}

::= |

::=;

::= | | |


::= = ;

::= if then [else]

::= while do

::= print | | ;



::= boolean | byte | ubyte

::= [{}]

::= [] [{}]

::= true | false

::= a | …| z | A | … | Z

::= 0 | 1 | … | 9

::= true | fals

::=||

::=[{}]

::=[{}]

::=[{|}]

::= () | |

::=() | |

::= * | / | | - | ^

::= < | > | = = | < >

::= [{NOT}]

:: () | |
3. Розробка компілятора вхідної мови програмування
Процедурно-орієнтовані мови програмування, такі як FORTRAN, Pascal, C, C та ін. засновані на принципі послідовного виконання операторів, команд або директив. Їх базові оператори, операції, команди та директиви можна класифікувати по трьох основних групах:

  1. Безумовні оператори (statements) обрахунків та перетворень;

  2. Оператори обробки розгалужень та передачі управління;

  3. Оператори організації циклічної обробки.

В загальному випадку віртуальна машина складається з інформаційного, операційного, управляючого та комунікаційного компонентів.
Компонент (англ. component, нім. Komponente f) - різновид, складова частина чогось.
Віртуальна машина - модель обчислювальної машини, створеної шляхом віртуалізації обчислювальних ресурсів: процесора, оперативної пам'яті, пристроїв зберігання та вводу і виводу інформації.
Будь-яка віртуальна машина повинна мати:

  1. Пам’ять різних видів та типів для збереження кодів програм і даних (інформаційний компонент) і механізми доступу до неї;
    Механі́зм (грец. μηχανή mechané - машина) - система тіл, що призначена для перетворення руху одного або декількох тіл у потрібний рух інших тіл. Механізм складає основу більшості машин і застосовується в різноманітних технічних об'єктах.


  2. Вказівник поточної операції (основа управляючої компоненти), що змінюється при підрахунку номера оператора;

  3. Блок виконання операцій (operators), який реалізує функції операційних та управляючих компонентів. Разом з інтерфейсним обладнанням він реалізує комунікаційний компонент, який забезпечує зв’язок ВМ із зовнішнім світом.
    Комуніка́ція (від лат. communicatio - єдність, передача, з'єднання, повідомлення, пов'язаного з дієсловом лат. communico - роблю спільним, повідомляю, з'єдную, похідним від лат. communis - спільний) - це процес обміну інформацією (фактами, ідеями, поглядами, емоціями тощо) між двома або більше особами, спілкування за допомогою вербальних і невербальних засобів із метою передавання та одержання інформації.
    Обла́днання (устаткування) (англ. equipment, нім. ausrüstung) f) - сукупність пристроїв, механізмів, приладів, інструментів або конструкцій, що використовуються в певній сфері діяльності, або з певною метою.


Загальна схема компілятора

Можна виділити сім різних логічних задач:



  1. Інтерпретація – визначення точного змістового навантаження, створення матриці та таблиць з допомогою програм інтерпретації;

  2. Машинно-незалежна оптимізація – створення оптимальнішої матриці;

  3. Лексичний аналіз – розпізнавання базових елементів та створення стандартних символів;

  4. Синтаксичний аналіз – розпізнавання базових синтаксичних конструкцій з використанням редукцій;
    Інтерпретатор мови програмування (interpreter) - програма чи технічні засоби, необхідні для виконання інших програм, вид транслятора, який здійснює пооператорну (покомандну, построкову) обробку, перетворення у машинні коди та виконання програми або запиту (на відміну від компілятора, який транслює у машинні коди всю програму без її виконання).
    Станда́рт - нормативний документ, заснований на консенсусі, прийнятий визнаним органом, що встановлює для загального і неодноразового використання правила, настанови або характеристики щодо діяльності чи її результатів, та спрямований на досягнення оптимального ступеня впорядкованості в певній сфері.
    Озна́чення, ви́значення чи дефіні́ція (від лат. definitio) - роз'яснення чи витлумачення значення (сенсу) терміну чи поняття. Слід зауважити, що означення завжди стосується символів, оскільки тільки символи мають сенс що його покликане роз'яснити означення.
    Си́нтаксис (дав.-гр. σύνταξις - "побудова, порядок, складання", від σύν - "з, разом" і ταξις - "впорядкування") - розділ граматики, що вивчає граматичну будову словосполучень та речень у мові.


  5. Розподіл пам’яті – модифікація таблиць ідентифікаторів та літералів.
    Мод (скор. від «модифікація», моддинґ ігор) - доповнення до відеогри, написане, як правило, сторонніми розробниками або любителями за допомогою SDK, який додається до гри або спеціальних, розроблених для модифікації любительських програм.
    Змінна - математична величина, значення якої може змінюватись у межах певної задачі. Цим змінна відрізняється від константи.
    В матриці розміщується інформація, з допомогою якої генерується код, який розподіляє динамічну пам’ять;

  6. Генерація коду – використання макропроцесора для отримання більш оптимального вихідного коду;

Фази з першої по четверту машинно-незалежні і визначаються тільки мовою. Фази з п’ятої по сьому – машинно-залежні і не залежать від мови. З метою забезпечення вищої ефективності ці фази можуть не розділятись так чітко.

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

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

Оптимальність - властивість, при якій забезпечується найбільша відповідність даному завданню, умовам тощо.
Проду́кція (рос. продукция, англ. production, output, produce, нім. Produktion f, Erzeugnisse n pl, Produkte n pl, Güter n pl) - матеріальний результат трудової діяльності або виробничих процесів, що має корисні властивості і призначений для використання споживачем.
Компроміс (грец. compromissum - угода, згода) - згода з ким-небудь у чомусь, що досягається взаємними поступками; поступка заради досягнення мети.
Лексичний розбір - це процес перетворення послідовності символів в послідовність токенів (груп символів що відповідають певним шаблонам), та визначення їх типів. Програма, чи функція що виконує лексичний аналіз, називається лексичним аналізатором, чи сканером.
Одним з варіантів є інтерпретатор.

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

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

Транслятор – програма, що обробляє вхідну програму, написану на вхідній мові і генерує програму на об’єктній мові. Об’єктна мова як правило є мовою деякої ЕОМ і таку програму одразу можна виконувати. Транслятори можна поділити на асемблери і компілятори, які транслюють відповідно мови низького і високого рівня.

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

Сканер (англ. scanner) - пристрій, призначений для створення зображень певних об'єктів шляхом обробки променів, які відбиваються від поверхні об'єкта або проходять крізь об'єкт. В більш вузькому значенні - пристрій для отримання комп'ютерного цифрового зображення.
Генерація - покоління, що представлене більш чи менш одноманітними особинами, які змінюються наступним поколінням, яке при диференціації життєвого циклу може істотно відрізнятися від попереднього. Наприклад: при чергуванні поколінь (гетерогонії, метагенезі) у тлі (Aphidoidea), галиць (Cecidomyiidae) та деяких інших комах.
Синтакси́чний ана́ліз (па́рсинг) (англ. parsing) - в інформатиці це процес аналізу вхідної послідовності символів, з метою розбору граматичної структури згідно із заданою формальною граматикою. Синтаксичний аналізатор (англ. parser)

Процес розробки компілятора можна зобразити такою схемою:

Рисунок 1 - Процес розробки компілятора.


Сканер або лексичний блок – одна з найпростіших частин компілятора. Він переглядає символи вхідної програми зліва направо і групує певні термінальні символи в єдині синтаксичні об’єкти. Цілі числа, ідентифікатори, символьні константи є нетермінальними символами і також групуються в таблиці.
Константа (лат. constans - стала величина, інша назва - стала) - величина, що не змінює свого значення протягом певного процесу (на відміну від змінної, значення якої може змінюватись). Прикладами констант є число пі, коефіцієнти многочленів, температура під час ізотермічного процесу.
Зліва направо (англ. Left to Right) - науково-фантастичне оповідання Айзека Азімова, опубліковане у січні 1987 році. Оповідання ввійшло в збірку «Золото» 1995.
Ці́лі чи́сла - в математиці елементи множини Z = =\lbrace \ldots -3,\,-2,\,-1,\,0,\,1,\,2,\,3\,\ldots \rbrace } яка утворюється замиканням натуральних чисел відносно віднімання. Таким чином, цілі числа замкнуті відносно додавання, віднімання та множення.

Процес роботи лексичного аналізатора є складнішим. Побудований при лексичному аналізі список лексем проглядається зліва направо і аналізується. Є два основні способи для аналізу списку лексем. Це спосіб операторного передування і рекурсивний спуск.

Техноло́гія (від грец. τεχνολογια, що походить від грец. τεχνολογος; грец. τεχνη - майстерність, техніка; грец. λογος - (тут) передавати) - наука («корпус знань») про способи (набір і послідовність операцій, їх режими) забезпечення потреб людства за допомогою (шляхом застосування) технічних засобів (знарядь праці).
Рекурсія (лат. Recursion) - метод визначення класу чи об'єктів методів попереднім заданням одного чи декількох (звичайно простих) його базових випадків чи методів, а потім заданням на їхній основі правила побудови класу, який визначається.
Рекурсивний спуск - алгоритм синтаксичного аналізу, будується на основі взаємно рекурсивних процедур (або не рекурсивних еквівалентів), кожна із яких реалізує одну із продукцій граматики.

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

Кількість - в Арістотелівській логіці друга з 10 категорій (класів, розрядів, які спрощують процес розумового визначення будь-якої речі), побічна обставина матеріальних речей , за допомогою якої вони поширюються в просторі, вимірюються якоюсь математичною нормою і здатні бути поділеними на окремі частини.
Об'єкти можуть зустрічатися в непередбачуваному порядку. Як тільки об’єкт зустрівся, потрібно перевірити, чи не був він раніше занесений в таблицю. Якщо в таблиці об’єкту немає, його необхідно туди записати. Одним із способів запам'ятовування об'єктів є таблиці з прямим доступом.

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

Покажемо на прикладі дерево конструкції while мови С.

While (f a*d) a=a 5;



Рисунок 2 Конструкції while мови С

При знаходженні ключового слова while перевіряється наявність дужки і викликається процедура перевірки запису виразу.

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

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

Після синтаксичного і семантичного аналізу тексту програми відбувається трансляція тексту в проміжну мову, якою у більшості випадків є асемблер.

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


  1   2   3   4


Скачати 324.74 Kb.

  • 2. Формальний опис вхідної мови програмування Розробити компілятор заданої вхідної мови програмування. три типи даних : логічний
  • 3. Розробка компілятора вхідної мови програмування
  • Загальна схема компілятора