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

Пренос - је ... Врсте преводиоца. Претворити и емитују програме

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

основни појмови

Програм је лингвистички приказ прорачуна: И → П → П (и). Преводилац је програм који се испоручује на улазну програм П и неки уноса к. То наступа на П Кс: И (п, х) = н (х). Чињеница да постоји само један преводилац је способан да обавља све могуће програме (који могу бити заступљени у формалном систему) је веома дубока и значајно откриће Тјурингова.

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

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

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

Емитер - је програм који узима као улазни податак програм у неком језику С и производи Т програм на такав начин да су обојица имају исте семантику: П → Кс → П: То је, ∀к. П (к) = К (к).

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

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

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

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

превод фаза

Емитовање се састоји од корака анализе и синтезе:

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

То је због ових разлога:

  • Било који други метод није погодан. Реч превод једноставно не ради.
  • Добро решење инжењеринг: ако желите да пишете преводилаца за М и Н Извор језика циљаних треба писати само м + н једноставне програме (полукомпилиаторов) него П × Н комплекса (укупно преводилаца).

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

Реал компајлери пролазе кроз многе фазе. Када правите свој компајлер не треба да се понови сав тежак рад који људи урадили да створе репрезентације и генератора. Можете превести свој језик директно у ЈаваСцрипт или Ц и искористити постојеће ЈаваСцрипт-мотор и Ц компајлер да уради остатак. Такође можете да користите постојећу средњи представљања и виртуелне машине.

запис преводилац

Емитер - је програм или хардвер, који је укључивао три језика: извор, одредиште и база. Они могу бити написан у Т-облику, стављајући оригинални лево, десно и циљну базу испод.

Постоје три врсте преводиоца:

  • Пренос - је самокомпилиатор ако одговара основном изворном језику.
  • Преводилац који циљају језик је основни, под називом саморезидентним.
  • Емитер - крст-преводилац, ако је мета и основни разни језици.

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

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

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

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

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

свеобухватна технологија

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

  • Формална теорија језика: граматике, анализу Цомпутабилити;
  • архитектура рачунара:. инструкцијама сетови, РИСЦ или ЦИСЦ, проточне обрада Цоре цлоцк циклуса, итд;
  • концепти програмских језика, на пример, извођење контроле секвенцу, условно извршење, понављања, рекурзије, функционалне декомпозиције, модуларност, синхронизацију, мета-програмирање, сцопе, сталне подтипове, темплатес, тип излаза, прототипови, аннотации, протока, монаде, Маилбокес наставити , џокери, регуларни израз, трансакциона меморија, наследство, полиморфизам, поставке режима, и тако даље итд..;
  • апстрактне језика и виртуелне машине;
  • алгоритми и структуре података: регуларним изразима, рашчлањивању алгоритме графичких алгоритама динамичко програмирање, обука;
  • програмски језици: синтакса, семантика (статички и динамички), подршка парадигме (структурни, ООП, функционалан, логично, стек, паралелизам, мета програмирање);
  • софтваре израда (компајлери, обично велик и сложен): локализација, цацхинг, цомпонентизе, АПИ-интерфејс, поновне употребе, синхронизација.

компилација

Неки од проблема са којима се сусрећу у развоју реалног преводиоца:

  • Проблеми са изворног језика. Да ли је лако саставити? Да ли постоји предпроцесор? Како су типови? Да ли постоји библиотека?
  • Груписање компајлера пропуснице: један или више начина?
  • Степен оптимизације жељи. Брзе и нечисти емитују програме са мало или нимало оптимизација може бити нормално. Овер-оптимизација компајлер ће успорити, али боље код на рунтиме може да се исплати.
  • Потребан степен откривања грешке. Може ли преводилац престани на прву грешку? Када је требало да престане? Без обзира да ли се веровати исправку компајлер грешке?
  • Доступност алата. Ако је оригинални језик није баш мала, скенер и генератор анализатори су обавезна. Ту су генератори, код генератори, али они нису тако честа.
  • Тип циљне кода који се генерише. Бити изабрани из чистог допуњена или виртуелном машински код. Или само написати улазак део који ствара популарни средњег представљање као што су ллвм, РТЛ, или ЈВМ. Или направити превод оригинала у изворном коду у Ц или ЈаваСцрипт.
  • Формат циљне кода. Можете одабрати један језик склапање, преносиви код машина, машина код меморије слику.
  • Преусмеравању. Када је скуп генератора је добро имати заједнички улазни део. Из тог разлога је најбоље да се један генератор за улаз многим деловима.

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

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

  • Улаз Програм (знаци флов) уводи у скенер (лексички анализатор), који га претвара у струју токена.
  • Парсер (Парсер) изградњу једне апстрактне синтаксе дрво.
  • Семантички анализатор разлаже на семантичке информације и проверава стабло чворова за грешке. Као резултат тога, изграђена семантички график - апстрактне синтаксе дрво са додатним карактеристикама и успостављеним везама.
  • Средњи код Генератор гради график протока (торке су груписани у главна блока).
  • Мацхине-независна код оптимизацију спроводи како локално (у оквиру базне јединице) и глобална (на свим блоковима) оптимизацију основи преосталог у рутину. Смањује сувишни код и поједностављује прорачуне. Резултат је модификовани граф тока.
  • Генератор везује таргет кода основне блокове у праволинијском код контролу трансмисије, стварајући објецт филе Ассемблер виртуелних регистара (евентуално неефикасним).
  • Мацхине-зависни Оптимизер, повезујући издваја меморију између регистара и чини планирања тимове. Врши програм за конверзију у Скупштини језику на овом скупу са добрим употребе пипелининг.

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

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

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

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

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

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

Парсинг (рашчлањивање)

Парсер претвара секвенцу жетона у апстрактну синтаксу стабла. Сваки чвор у стаблу се чувају као објекат са називом поља, од којих су многи и сами су трее чворови. У овој фази не постоје циклуси. Када креирате анализатор потребно је обратити пажњу на ниво сложености граматике (ЛЛ или ЛР) и сазнати да ли постоје неки правила вишезначна одредница. Неки језици не захтевају семантичку анализу.

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

  • к = 5 * (7 - и;
  • ј = / 5;
  • 56 = к * 4.

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

Током семантичке анализе да провери дозвољености правила и сарадника деловима дрво извођења (дозвољавајући референтних имена убацивања операцију имплицитних типа конверзије, и тако даље. Д) за формирање семантичку граф.

Очигледно је да је скуп прихватљивости правила на различитим језицима различитим. Ако саставити Јава-као језика, компајлера наћи

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

генерација

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

генерисање кода производи прави код машина. У традиционалним преводиоца за РИСЦ машина на првом кораку, направите асемблер са бесконачним бројем виртуелних регистара. За ЦИСЦ-машина вероватно неће десити.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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