KompjutersIpprogrammar

Xandar - huwa ... Tipi ta 'kompilaturi. Ikkonverti u programmi mxandra

Programmi, kif ukoll nies li jittraduċu minn lingwa għal oħra jeħtieġu interpretu jew traduttur.

kunċetti bażiċi

Il-programm hija rappreżentazzjoni lingwistika ta 'kalkoli: i → P → P (i). Interpretu huwa programm li hija fornita lill-programm input P u xi kontribut x. Hija taqdi fil P ×: I (P, x) = P (x). Il-fatt li hemm traduttur wieħed biss huwa kapaċi jwettaq programmi kollha possibbli (li jistgħu jkunu rappreżentati fis-sistema formali) huwa Turing iskoperta ħafna profonda u sinifikanti.

Il-proċessur hija interpretu ta 'programmi fil-lingwa magna. Ġeneralment wisq għaljin biex jiktbu interpreti għal-lingwi ta 'livell għoli, sabiex ikunu jsarrfu f'forma li hija aktar faċli biex tinterpreta.

Xi tipi ta 'tradutturi għandhom ismijiet strambi ħafna:

  • Il muntatur jittraduċi programmi lingwistiċi ta 'assemblaġġ fil-lingwa magna.
  • Il-kompilatur jittraduċi lingwa ta 'livell għoli għal lingwa aktar baxx.

Xandar - huwa programm li jieħu bħala input tad-data tal-programm f'xi S lingwa u tipproduċi T b'tali mod li t-tnejn għandhom l-istess semantika: P → X → Q. Dan huwa, ∀x. P (x) = Q (x).

Jekk mxandra il-programm kollu fis xi ħaġa interpretati, huwa msejjaħ ġabra qabel kumpilazzjoni eżekuzzjoni, jew AOT. AOT kompilatur jistgħu jintużaw f'serje, l-aħħar li huwa spiss il-montatur, per eżempju:

Il-kodiċi sors kompilatur → (traduttur) → → assemblaġġ kodiċi timmonta (kompilatur) kodiċi → → magna CPU (interpretu).

kumpilazzjoni Operattiv jew dinamika iseħħ jekk il-programm hija mxandra, meta esegwiti mill naha l-ohra ikkumpilata qabel. JIT-kompilaturi tiftakar dak li diġà għamlu sabiex ma jirrepetu l-kodiċi sors ġdid u għal darb'oħra. Huma jistgħu wkoll jipproduċu kumpilazzjoni adattivi u recompilation bbażata fuq l-imġiba tal-ambjent twettiq tal-programm.

Ħafna lingwi jippermettu li teżegwixxi kodiċi fil-ħin jikkompilaw u jiġbru l-kodiċi l-ġdid fil runtime.

istadju traduzzjoni

Broadcast tinkludi l-passi ta 'analiżi u sintesi:

L-analizzatur kodiċi sors → → → ġeneratur rappreżentazzjoni kunċettwali (synthesizer) → kodiċi mira.

Dan huwa minħabba dawn ir-raġunijiet:

  • Kull metodu ieħor mhuwiex adattat. traduzzjoni Kelma sempliċement ma taħdimx.
  • Soluzzjoni inġinerija tajba: jekk inti tixtieq li tikteb tradutturi lingwi M u N sors mmirati bżonn jiktbu biss programmi sempliċi M + N (polukompilyatorov) aktar milli M × N kumpless (total ta 'tradutturi).

Madankollu, fil-prattika, ħsieb kunċettwali ta 'ħafna rarament espressiva biżżejjed u qawwija biżżejjed biex ikopru kull sors u mmirati lingwi konċepibbli. Filwaqt li xi wħud kienu kapaċi li ġie viċin dan.

kompilaturi reali jgħaddu stadji ħafna. Meta jkun qed jinħoloq kompilatur tiegħek stess ma teħtieġx li jirrepetu l-ħidma iebsa li n-nies għamlu biex joħolqu rappreżentazzjonijiet u ġeneraturi. Inti tista 'tittraduċi lingwa tiegħek direttament fl JavaScript jew Ċ u jieħdu vantaġġ ta' eżistenti JavaScript 'magna u l-kompilatur C biex jagħmlu l-bqija. Tista 'wkoll tuża r-rappreżentazzjoni intermedju eżistenti u magni virtwali.

traduttur rekord

Xandar - huwa programm jew hardware, li kien jinvolvi tliet lingwi: is-sors, il-destinazzjoni u l-bażi. Huma jista 'jinkiteb T-forma, it-tqegħid fuq ix-xellug oriġinali, id-dritt u l-mira bażi taħt.

Hemm tliet tipi ta 'kompilaturi:

  • Xandar - huwa samokompilyator jekk tirrifletti l-lingwa sors bażiku.
  • Kompilatur li huma mmirati lejn il-lingwa hija l-linja bażi, imsejħa samorezidentnym.
  • Xandar - cross-kompilatur, jekk fil-mira u lingwi bażiċi differenti.

Għaliex dan huwa importanti?

Anke jekk inti qatt tagħmel kompilatur reali, għarfien tajjeb tat-teknoloġija tal-ħolqien tagħha, għaliex il-kunċett użat għal dan l-iskop huma użati, per eżempju:

  • test ifformattjar;
  • mistoqsijiet lingwa għal databases;
  • arkitettura tal-kompjuter avvanzati;
  • problemi ottimizzazzjoni ġeneralizzati;
  • GUIs;
  • scripting lingwi;
  • kontrolluri;
  • magni virtwali;
  • traduzzjoni mekkanika.

Barra minn hekk, jekk inti tixtieq li tikteb preprocessors, linkers, loaders, debuggers u profilers, inti trid tmur permezz tal-istess passi bħal meta tikteb kompilatur.

Tista 'wkoll jitgħallmu kif jiktbu programmi aħjar, mill-ħolqien tal-traduttur għall-lingwa tfisser fehim aħjar tal intricacies tagħha u ambigwitajiet. L-istudju tal-prinċipji ġenerali ta 'xandir tippermetti wkoll li inti biex issir lingwa disinjatur tajjeb. Allura ma jimpurtax kemm wieqaf il-lingwa jekk ma jistax jiġi implimentat b'mod effettiv?

teknoloġija komprensiva

teknoloġija kompilatur tkopri ħafna oqsma differenti tax-xjenza tal-kompjuter:

  • teorija formali tal-lingwa: grammatika, parsing, computability;
  • arkitettura tal-kompjuter:. settijiet istruzzjoni, risc jew Cisc, ċikli pipelined arloġġ qalba ipproċessar, eċċ;
  • kunċetti ta 'lingwi ta' programmar, per eżempju, li jwettqu kontroll sekwenza, l-eżekuzzjoni kondizzjonali, iterazzjoni, recursion, dekompożizzjoni funzjonali, modularità, sinkronizzazzjoni, meta-programmazzjoni, l-ambitu, kostanti sotto-tipi, templates, tip produzzjoni, prototipi, annotazzjonijiet, fluss, monads, kaxxi tal-posta, tkompli , wildcards, espressjoni regolari, memorja transazzjonali, wirt, polimorfiżmu, l-issettjar modalità, u l-bqija eċċ..;
  • lingwi astratti u magni virtwali;
  • algoritmi u data strutturi: Espressjonijiet regolari, parsing algoritmi, grafika algoritmi, programmazzjoni dinamiku, taħriġ;
  • lingwi ta 'programmar: sintassi, semantika (statiċi u dinamiċi), mudelli ta' appoġġ (strutturali, OOP, funzjonali, loġiku, munzell, paralleliżmu, meta-programmazzjoni);
  • ħolqien ta 'software (kompilaturi, normalment kbar u kumplessi): lokalizzazzjoni, caching, componentize, API-interfaces,-użu mill-ġdid, sinkronizzazzjoni.

disinn kompilatur

Uħud mill-problemi li jiltaqgħu magħhom fl-iżvilupp tat-traduttur reali:

  • Problemi bil-lingwa sors. Huwa faċli li josservawha? Hemm preprocessor? Kif huma t-tipi? Hemm librerija?
  • Raggruppament jgħaddi kompilatur: waħda jew b'ħafna mod?
  • Il-grad ta 'ottimizzazzjoni mixtieqa. Fast u mhux nadif programmi mxandra bi ftit jew xejn ottimizzazzjoni jistgħu jkunu normali. Over-ottimizzazzjoni kompilatur se jrattab, iżda kodiċi aħjar fil runtime jista 'jkun jiswa.
  • Il-grad meħtieġ ta 'sejbien ta' żball. Tista 'traduttur tieqaf biss fuq l-ewwel żball? Meta hija għandha tieqaf? Jekk jafdaw l-korrezzjoni ta 'żball kompilatur?
  • Id-disponibbiltà ta 'għodda. Jekk il-lingwa oriġinali mhix żgħira ħafna, huma meħtieġa l-iskaner u ġeneratur analizzaturi. Hemm ukoll ġeneraturi, ġeneraturi kodiċi, iżda dawn mhumiex daqshekk komuni.
  • Tip ta 'kodiċi mira li jiġu ġġenerati. Jiġu magħżula minn kodiċi supplimentati jew virtwali pur magna. Jew biss jiktbu porzjon tad-dħul li toħloq rappreżentazzjoni intermedja popolari bħal LLVM, RTL, jew JVM. Jew jagħmlu traduzzjoni tal-oriġinali fil-source code C jew JavaScript.
  • Il-format tal-kodiċi fil-mira. Tista 'tagħżel lingwa assemblaġġ, kodiċi magna portabbli, l-immaġni kodiċi magna memorja.
  • Mira mill-ġdid. Meta s-sett ta 'ġeneraturi huwa tajjeb li jkollha porzjon daħla komuni. Għal din ir-raġuni huwa aħjar li jkollhom ġeneratur wieħed għall-kontribut ta 'ħafna partijiet.

Arkitettura kompilatur: komponenti

Dawn huma l-komponenti funzjonali ewlenin ta 'kompilatur li jiġġenera kodiċi nattivi (jekk il-programm output huwa programm C jew magna virtwali, inti għandek bżonn ma tant stadji):

  • Il-programm input (marki fluss), jiddaħħal fis-iskaner (analizzatur lessikali), li tikkonverti ġo nixxiegħa ta towkins.
  • Parser (parser) kostruzzjoni wieħed siġra sintassi astratt.
  • analizzatur semantika tiddikomponi l-informazzjoni semantika u kontrolli l-lymph siġra għall-iżbalji. Bħala riżultat, mibnija semantika graff - astratt sintassi siġra bi proprjetajiet addizzjonali u r-rabtiet stabbiliti.
  • ġeneratur ta 'kodiċi Intermedju tibni graff fluss (tuples huma miġbura fi blokki ewlenin).
  • indipendenti minn magna kodiċi Optimizer tmexxi kemm lokali (fi ħdan l-unità bażi) u globali (għal blokki kollha) ottimizzazzjoni bażikament jibqa 'fil rutini. Inaqqas kodiċi żejda u tissimplifika l-kalkoli. Ir-riżultat huwa graff fluss modifikata.
  • Ġeneratur jeħel kodiċi mira blokki bażiċi f'kodiċi kontroll trasmissjoni rettilineari, il-ħolqien ta 'oġġett fajl muntatur reġistri virtwali (possibilment ineffettiv).
  • Optimizer dipendenti fuq magna, Linker jalloka memorja bejn ir-reġistri u jagħmel timijiet ippjanar. Hija taqdi l-programm ta 'konverżjoni fil-lingwa assemblaġġ f'dan assembly użu tajjeb ta' pipelining.

Barra minn hekk, l-użu ta 'maniġer subsistema iżbalji u tabelli simbolu.

Analiżi lessikali (scanning)

L-iskaner tikkonverti l-karattri sors nixxiegħa ġo nixxiegħa ta tokens, tneħħija whitespace, kummenti u macros jespandu.

Skaners spiss jiltaqgħu ma 'problemi, bħal jekk jew le li jieħu in kunsiderazzjoni l-każ, il-marġni, pawżi linja u l-kummenti integrati.

Żbalji li jistgħu jseħħu waqt scanning, imsejħa lessikali u jinkludu:

  • karattri li mhumiex fl-alfabett;
  • aktar min-numru ta 'karattri fi kelma jew linja;
  • mhuwiex sinjal magħluqa jew string litterali;
  • tmiem tal-fajl fil-kumment.

Parsing (parsing)

Il parser tikkonverti l-sekwenza ta 'tokens fi siġra sintassi astratt. Kull node fil-siġra hija maħżuna bħala oġġett oqsma msemmija, li ħafna minnhom huma nfushom il-lymph siġra. F'dan l-istadju m'hemmx ċikli. Meta inti toħloq parser huwa meħtieġ li tingħata attenzjoni għal-livell ta 'kumplessità tal-grammatika (LL jew LR) u taf jekk hemmx xi regoli diżambigwazzjoni. Xi lingwi ma jkunux jeħtieġu analiżi semantika.

Żbalji misjuba f'dan l-istadju huma msejħa sintassi. Per eżempju:

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

analiżi semantika

Matul il- analiŜi semantika biex jiċċekkja l-ammissibbiltà tar-regoli u l-partijiet assoċjati tas-siġra parse (li tippermetti ismijiet ta 'referenza ddaħħal operazzjoni għall-konverżjonijiet tip impliċiti, u l-bqija. D.) Għal jiffurmaw il-graff semantiku.

Ovvjament, is-sett tal-ammissibbiltà ta 'regoli fil-lingwi differenti differenti. Jekk inti tiġbor l-Java bħall lingwi, kompilaturi tista 'ssib:

  • Dikjarazzjoni varjabbli multipli fl-ambitu tagħha;
  • referenza għal varjabbli qabel il-dikjarazzjoni tiegħu;
  • referenzi għall-isem tal-mhux iddikjarat;
  • ksur tad-drittijiet tal-privattivi;
  • Numru eċċessiva jew insuffiċjenti ta 'argumenti sejħa metodu;
  • nuqqas ta 'qbil tip.

ġenerazzjoni

ġenerazzjoni kodiċi Intermedju tipproduċi graff fluss magħmul minn tuples, miġbura fi blokki bażiċi.

ġenerazzjoni kodiċi tipproduċi kodiċi magna reali. Fil kompilaturi tradizzjonali għall-risc-magni fuq l-ewwel pass, inti toħloq muntatur ma numru infinit ta 'reġistri virtwali. Għal Cisc-magni probabbilment mhux se jiġri.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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