КомпјутериПрограмирање

Радиодифузен сервис - е ... Видови на компајлери. Конвертирате и емитува програми

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

основните концепти

На програмата е лингвистичко застапеност на пресметки: i → P → P (i). Преведувач е програма со која се обезбедува во програмата влез P и некои влез x. Таа ги врши на P x: I (P, x) = P (x). Фактот дека постои само еден преведувач е способен за вршење на сите можни програми (кои можат да бидат претставени во формалниот систем) е многу длабока и значајно откритие Туринг.

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

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

  • Асемблер преведува јазик, програми собранието во машински јазик.
  • Компајлерот преведува јазик на високо ниво на пониско јазик.

Радиодифузен сервис - е програма која ги зема како влезни податоци на програмата во некои јазични S и произведува програма T во таков начин што тие и двете имаат иста семантика: P → X → П: Тоа е, ∀x. P (x) = Q (x).

Ако се емитува на целата програма во нешто толкувања, тоа се нарекува компилација пред извршување, или AOT компилација. AOT компајлерот може да се користи во серија, таа на која е често на асемблер, на пример:

Изворниот код компајлерот → (преведувач) → → асемблерски код асемблер (компајлерот) → → процесорот машина код (преведувач).

Оперативен или динамични компилација случува ако програмата се емитува, кога егзекутирани од страна на други претходно составена дел. JIT-компајлери се сеќавам она што веќе го направиле за да не се повтори изворниот код повторно и повторно. Тие дури и може да произведе адаптивни компилација и рекомпајлирани врз основа на однесувањето на животната средина на извршување на програмата.

Многу јазици се овозможи да се изврши код во компајлирате време и ги собира на новиот код на извршувањето.

фаза превод

Емитување ги опфаќа чекорите на анализирање и синтетизирање на:

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

Ова е поради овие причини:

  • Кој било друг метод не е погоден. Зборот превод едноставно не функционира.
  • Добар инженеринг решение: ако сакате да напишете преведувачи за јазици M и N извор насочени треба да се напише само m + n едноставни програми (polukompilyatorov) наместо М × N комплекс (вкупно преведувачи).

Меѓутоа, во пракса, концептуален поглед на многу ретко експресивен доволно и доволно моќни за да се покријат сите можни изворот и целните јазици. Додека некои беа во можност да дојде блиску до тоа.

Реал компајлери помине низ многу фази. Кога создавање на свој компајлерот не треба да се повторува на сите напорна работа дека луѓето се направи за да се создаде репрезентации и генератори. Можете да се преведе вашиот јазик директно во JavaScript или C и да ги искористат предностите на постоечките вклучите Javascript-мотор и C компајлерот да го стори останатото. Вие исто така може да користи постоечки средно застапеност и виртуелни машини.

рекорд преведувач

Радиодифузен сервис - е програма или хардвер, која се вклучени три јазици: извор, дестинација и база. Тие може да се запише во Т-форма, поставување на оригиналниот лево, десно и целните база подолу.

Постојат три видови на компајлери:

  • Радиодифузен сервис - е samokompilyator ако тоа одговара на основните изворниот јазик.
  • Компајлерот кои се насочени кон јазикот е основната линија, наречена samorezidentnym.
  • Радиодифузен сервис - крос-компајлерот, ако тој се насочени и основните различни јазици.

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

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

  • форматирање на текстот;
  • прашања јазик на бази на податоци;
  • напредни компјутерски архитектура;
  • генерализирана оптимизација проблеми;
  • GUIs;
  • scripting јазици;
  • контролери;
  • виртуелни машини;
  • Машински превод.

Покрај тоа, ако сакате да напишете preprocessors, поврзувачи, товарачи, дебагерите и profilers, мора да поминат низ истите чекори како кога пишувате компајлерот.

Вие исто така може да се научи како да се напише подобри програми, од создавањето на преведувачот за јазик значи подобро разбирање на сложеноста и нејаснотии. Студијата на општите принципи на емитување, исто така, ви овозможува да стане добар дизајнер јазик. Значи не е важно колку е стрмен јазик, ако тоа не може да се спроведе ефикасно?

сеопфатна технологија

компајлерот технологија опфаќа многу различни области на компјутерската наука:

  • формалната теорија на јазикот: Граматика, парсирањето, пресметливоста;
  • компјутерска архитектура. инструкции сетови, RISC и CISC, pipelined основни обработка на часовникот циклуси, итн;
  • концепти на програмски јазици, на пример, вршење на контрола секвенца, условно извршување, повторување, рекурзија, функционална распаѓање, модуларност, синхронизација, мета-програмирање, обемот, постојано под-видови, шаблони, вид на излез, прототипови, прибелешки, проток, monads, поштенски сандачиња, продолжи , знаци, регуларен израз, трансакциски меморија, наследување, полиморфизам, подесувањата на режимот, и така натаму, итн..;
  • апстрактни јазици и виртуелни машини;
  • алгоритми и структури на податоци: регуларни изрази, парсирањето алгоритми, графички алгоритми, динамичен програмирање, обука;
  • програмски јазици: синтакса, семантика (статички и динамички), поддршка парадигми (структурни, OOP, функционални, логично, стек, паралелизам, мета-програми);
  • создавање на софтвер (компајлери, обично се големи и сложени): локализација, кеширање, componentize, API-интерфејси, повторна употреба, синхронизација.

компајлерот дизајн

Некои од проблемите во развојот на реалниот преведувач:

  • Проблеми со изворниот јазик. лесно да го компајлирате е тоа? Дали има препроцесори? Како се видовите? Дали има библиотека?
  • Групирањето на компајлерот поминува: еден или мулти-начин?
  • Степенот на оптимизација саканиот. Брз и нечиста емитува програми со малку или без оптимизација може да биде нормален. Над-оптимизација компајлерот ќе се забави, но подобро е кодот на траење може да биде достоен за тоа.
  • Потребниот степен на грешка откривање. Може преведувач само гости во првата грешка? При тоа треба да престане? Дали да му верувате на корекција на компајлерот грешка?
  • Достапноста на алатки. Ако оригиналниот јазик не е многу мала, се бара анализатори на скенерот и генератор. Постојат, исто така, генератори, кодот генератори, но тие не се толку чести.
  • Тип на целните кодот да биде генерирана. Да бидат избрани од чиста дополнети или виртуелна машина код. Или само да се напише дел запис кој создава популарни средно застапеност како LLVM, РТЛ, или JVM. Или да направи превод на оригиналот во изворниот код во C или JavaScript.
  • Форматот на цел код. Можете да изберете на собранието јазик, преносни машина код, слика машина код меморија.
  • Retargeting. Кога во собата на генератори е добро да имаме заедничка влезен дел. За оваа причина, тоа е најдобро да се има еден генератор за влез на многу делови.

компајлерот архитектура: компоненти

Овие се главните функционални компоненти на компајлер кој генерира мајчин кодот (ако програмата излез е програма во C или виртуелна машина, вие не треба толку многу фази):

  • програмата за влез (марки проток) се внесува во скенер (лексичкиот анализатор), која се претвора во струја на токени.
  • Парсерот (парсер) изградба на еден апстрактен синтакса дрво.
  • Семантичка анализатор разградува семантички информации и проверки на јазли на дрво за грешки. Како резултат на тоа, изградена семантички графикон - апстрактен синтакса дрво со дополнителни својства и воспоставени врски.
  • Средно код генератор гради графикон проток (торки се групирани во главните блокови).
  • Машина-независна код оптимизатор спроведува и на локално (во рамките на базата) и глобалната (за сите блокови) оптимизација во основа се остане во рамките рутини. Намалува излишни код и поедноставува пресметките. Резултатот е изменета графикон проток.
  • Генератор врзува цел код основни блокови во праволиниско контрола на пренос код, создавањето на објектот датотека асемблер виртуелни регистри (можеби неефективни).
  • Машина-зависни оптимизатор, linker алоцира меморија на регистрите и прави тимови за планирање. Таа ги врши реализација на програмата во асемблерски јазик на овој собир со добра употреба на групирање на наредби.

Покрај тоа, употребата на менаџер грешка откривање потсистем и симбол маси.

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

Скенерот претвора поток извор ликови во струја на жетони, отстранување на празни места, коментари и проширување на макроа.

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

Грешки кои можат да се појават за време на скенирање, наречена лексички и вклучуваат:

  • карактери кои не се во писмо;
  • износ поголем од бројот на карактери во еден збор или линија;
  • не затворен знак или низа буквално;
  • крајот на датотеката со коментари.

Парсирање (парсирање)

Парсерот претвора редоследот на жетони во апстрактен синтакса дрво. Секој јазол во стеблото се чуваат како објект со име полиња, од кои и самите се јазли на дрво. Во оваа фаза не постојат циклуси. Кога ќе се создаде парсер е да се обрне внимание на нивото на сложеност на граматиката (ДГ или LR) и да дознаете дали има било какви правила за појаснување. Некои јазици се бара семантичка анализа.

Грешки се најде во оваа фаза се нарекува синтакса. На пример:

  • k = 5 * (7 - y;
  • j = / 5;
  • 56 = x * 4.

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

Во текот на семантичка анализа за да се провери на дозволеноста на правила и придружни делови на дрвото анализирам (овозможува повикување имиња вметнување операција за конверзии имплицитна тип, и така натаму. Д) за формирање на семантички графиконот.

Очигледно, во собата на допуштеноста на правилата на различни јазици различни. Ако ги собере на Јава-како јазици, компајлери може да се најде:

  • повеќе променлива декларација во неговите рамки;
  • повикување на променлива пред нејзиното објавување;
  • повикување на името на непријавена;
  • повреда на правата на патент;
  • прекумерна или недоволен број на аргументи во метод на повик;
  • Вид Несогласување.

генерација

Средно кодот генерација произведува протокот на графиконот составен од торки, групирани во основните блокови.

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

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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