Kompjuters, Ipprogrammar
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