КомпютриПрограмиране

Излъчващият - е ... Видове компилатори. Конвертиране и излъчвани програми

Програми, както и хората да превеждат от един език на друг се нуждаете от преводач или преводач.

основни понятия

Програмата е езиковото представяне на изчисления: I → P → P (I). Един преводач е програма, която се подава към програмата вход P и някои вход х. Това се изпълнява в Р х: I (Р, х) = Р (х). Фактът, че има само един преводач е в състояние да изпълнява всички възможни програми (които могат да бъдат представени в официалната система) е много дълбоко и важно откритие Тюринг.

Процесорът е преводач на програми в машинен език. Като цяло твърде скъпо да се напише преводачи за езици от високо ниво, така че те се превърнат в една форма, която е по-лесно да се тълкува.

Някои видове преводачи имат много странни имена:

  • В асемблер превежда езикови програми за сглобяване на машинен език.
  • Компилаторът превежда езика на високо равнище на по-ниска език.

Излъчващият - е програма, която използва като входни данни на програмата по някакъв език S и произвежда програма T по такъв начин, че те двамата имат едни и същи семантиката: P → → X Q. Това означава, ∀x. Р (х) = Q (х).

Ако излъчи цялата програма в нещо тълкуваемо, той се нарича компилация преди екзекуцията, или AOT компилация. АОТ компилатор може да се използва в серия, последният от които е често асемблер, например:

Изходният код компилатор → (преводача) → → монтаж код асемблер (съставител) → → CPU машинен код (преводач).

Оперативна или динамична компилация възниква, ако програмата се излъчва, когато бъдат изпълнени от друг по-рано съставен част. JIT компилатори помнят това, което те вече са го направили така, че да не се повтарят на изходния код отново и отново. Те дори може да доведе до адаптивна компилация и прекомпилиране на базата на поведението на околната среда на изпълнението на програмата.

Много езици позволяват да изпълни код по време на компилация и съставяне на новия код по време на изпълнение.

етап превод

Broadcast включва етапите на анализ и синтез:

Анализаторът на изходния код → → → концептуална представяне генератор (синтезатор) → Целева код.

Това се дължи на следните причини:

  • Всеки друг метод не е подходящ. Превод на думи просто не работи.
  • Добър инженерно решение: ако искате да напишете преводачи за езици М и Н-източници, насочени необходимо пишат само M + N прости програми (polukompilyatorov), отколкото M × N комплекс (общо от преводачи).

Въпреки това, на практика, концептуална гледна точка на един много рядко достатъчно изразителни и достатъчно мощен, за да покрие всички възможни източника и целевите езици. Докато някои са били в състояние да се доближи до това.

Реални компилатори минават през много етапи. При създаването на свой собствен компилатор не е необходимо да се повтаря цялата тежка работа, че хората са направили, за да създадете представителства и генератори. Можете да превеждате вашия език директно в JavaScript или C и да се възползват от съществуващите JavaScript-двигател и компилатор да свърши останалото. Можете също да използвате съществуващия междинен представителство и виртуални машини.

запис преводач

Излъчващият - е програма, или хардуер, който участва на три езика: източника, дестинацията и основата. Те могат да бъдат написани на Т-образна форма, поставянето на оригиналния лявата, дясната и целева база по-долу.

Има три вида на компилатори:

  • Излъчващият - е samokompilyator ако тя съответства на основния изходния език.
  • Compiler, които са насочени език е изходното ниво, наречено samorezidentnym.
  • Излъчващият - напречен компилатор, ако той целенасочено и основни различни езици.

Защо това е важно?

Дори ако никога не се направи реална компилатор, добри познания за технологията на създаването му, защото понятието се използва за тази цел се използват широко, например:

  • форматиране на текст;
  • запитвания езикови към бази данни;
  • напреднала компютърна архитектура;
  • общи проблеми за оптимизация;
  • ГПИ;
  • скриптови езици;
  • контролери;
  • виртуални машини;
  • Машинен превод.

Освен това, ако искате да напишете Препроцесори, свръзки, товарачи, дебъгерите и профилиращи, трябва да мине през същите стъпки като при писане на компилатор.

Можете също така да се научите как да създавате по-добри програми, тъй като създаването на преводача за езика означава по-добро разбиране на неговите тънкости и неясноти. Проучването на общите принципи на излъчване също ви позволява да стане добър дизайнер език. Така че има ли значение колко стръмен езика, ако не може да се прилага ефективно?

цялостна технология

съставител технология обхваща много различни области на компютърните науки:

  • формална теория на език: граматика, разбор, изчислимост;
  • компютърна архитектура. инструкции комплекти, RISC или CISC, поточна основните обработка такта и др;
  • концепции за програмни езици, например, извършване на контрол последователност, условно изпълнение, итерация, рекурсия, функционален разлагане, модулност, синхронизация, мета-програмиране, обхват, постоянни подтипове, шаблони, тип продукция, прототипи, анотации, поток, монадите, пощенски кутии, продължават въпросителни, регулярен израз, транзакциите памет, наследяване, полиморфизъм, настройките за режима, и така нататък и др..;
  • абстрактни езици и виртуални машини;
  • формули и алгоритми данни конструкции: регулярни изрази, разбор алгоритми, графични алгоритми, динамично програмиране, обучение;
  • програмни езици: синтаксис, семантика (статични и динамични), подкрепа парадигми (структурни, обектно-ориентиран, функционален, логично, комин, паралелизъм, мета-програмиране);
  • софтуер създаване (компилатори, обикновено големи и сложни): локализация, кеширане, componentize, API-интерфейси, повторна употреба, синхронизация.

съставител дизайн

Някои от проблемите, които срещат в развитието на реалната преводача:

  • Проблеми с езика на източника. лесно да я компилирате ли е? Има ли предпроцесорни? Как са видовете? Има ли библиотека?
  • Групирането на компилатора пасове: един или няколко начин?
  • Степента на оптимизация желания. Бързи и нечисти излъчвани програми с малко или никакво оптимизация могат да бъдат нормални. Над оптимизация компилатор ще се забави, но по-добре код по време на работа може да се струва това.
  • Необходимата степен на откриване на грешки. Може ли преводач просто спира на първата грешка? Когато той трябва да спре? Дали да се доверите на корекцията на компилатор грешка?
  • Наличието на инструменти. Ако оригиналният език не е много малък, са необходими анализаторите на скенера и генератор. Има и генератори, код генератори, но те не са толкова чести.
  • Вид на целевата код, за да бъде генериран. Да бъде избрана от чист допълнен или виртуална машина код. Или просто да напишете част влизане, което създава популярната междинно представяне като LLVM, RTL, или JVM. Или да направите превод на оригинала в изходния код в C или JavaScript.
  • Форматът на целевата код. Можете да изберете език на монтаж, преносим код машина, изображение машинен код памет.
  • Пренасочване. Когато комплектът от генератори е добре да имат общ вход част. Поради тази причина е най-добре да има един генератор за въвеждане на много части.

съставител Архитектура: компоненти

Това са основните функционални компоненти на компилатор, който генерира родния код (ако програмата изход е програма в C или виртуална машина, трябва не толкова много етапи):

  • Програмата за вход (марка поток) се подава в скенера (лексикално анализатор), който го преобразува в поток от символи.
  • Синтактичен анализ (синтактичен анализ) изграждане на един абстрактен синтаксис дърво.
  • Семантичната анализатор разлага на семантична информация и проверява възли на дърветата за грешки. В резултат на това, построена семантичен графика - абстрактен синтаксис дърво с допълнителни свойства и установените връзки.
  • Междинно съединение код генератор изгражда графика на потока (кортежи са групирани в основни блока).
  • Машина-независим код оптимизатор провежда както на местно, (в рамките на основния модул) и глобално (за всички блокове) оптимизация основно оставане в съчетания. Намалява излишен код и опростява изчисленията. Резултатът е модифициран графика на потока.
  • Generator свързва целева код основни блока в праволинейно контрол предаване код, създаване на обект файл монтажен виртуални регистри (вероятно неефективен).
  • Машина зависими оптимизатор, свързваща заделя памет между регистрите и прави отбори, които планират. Тя изпълнява програмата за преобразуване на асемблер в този комплект с добра употреба на конвейер.

В допълнение, използването на програма за управление на откриване на грешки подсистема и символни таблици.

Лексикално анализ (сканиране)

Скенерът преобразува поток източник знаци в поток от символи, премахване на празни места, коментари и разширяващи макроси.

Скенери често се сблъскват с проблеми, като например дали да се вземат под внимание на случая, маржове, прекъсвания на редовете и вградени коментарите.

Грешки, които могат да възникнат по време на сканиране, наречени лексикални и включват:

  • символи, които не са в азбуката;
  • повече от броя на знаците в една дума или линия;
  • Не затворен знак или символни низове;
  • край на файла в коментар.

Разбор (разбор)

Анализаторът превръща последователността от символи в абстрактен синтаксис дърво. Всеки възел в дървото се съхранява като обект с именувани области, много от които от своя страна са възлите на дърветата. На този етап не съществуват цикли. Когато създавате анализатора е необходимо да се обърне внимание на нивото на сложност на граматиката (LL или LR) и да разберете дали има някакви правила пояснение. Някои езици изискват семантичен анализ.

Открити са грешки на този етап се нарича синтаксис. Например:

  • к = 5 * (7 - Y;
  • J = / 5;
  • 56 = х * 4.

семантичен анализ

По време на семантичен анализ за проверка на допустимостта на правила и асоциирани части на дървото синтактична (позволяваща референтни имена поставяне операция за реализации неявни тип, и така нататък. Г.) За формиране на семантично графиката.

Очевидно е, че на снимачната площадка на допустимост на правилата на различни езици, различни. Ако се съберат данни за Java-подобен език, компилатори могат да намерят:

  • множествена променлива декларация в нейното приложно поле;
  • препратка към променливата преди неговото обявяване;
  • препратки към името на недекларирания;
  • нарушение на патентни права;
  • излишен или недостатъчен брой аргументи в извикване на метод;
  • Тип на несъответствие.

поколение

Междинно съединение генериране на код произвежда графика поток, съставен от кортежи, групирани в основни блокове.

генериране на код произвежда истински машинен код. В традиционните компилатори за най-машините RISC на първата стъпка, можете да създадете асемблер с безкраен брой виртуални регистри. За машини CISC-вероятно няма да се случи.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 bg.delachieve.com. Theme powered by WordPress.