Telefonia, Prugrammazione
 - hè ... Types of compilers. programmi diffusione cunvertisce e
Programs, oltri populu traduce da una lingua à un altru bisognu di un pobbe, o traduttore.
cuncetti funnamintali
U prugramma hè una rapprisintazzioni linguisticu di calculi: i → P → P (I). Un pobbe hè un prugrammu chì hè tenute sempre à u prugrammu entrée P è qualchi entrée ex. Hè pena à P x: I (P, x) = P (x). U fattu chì ci hè solu un traduttore hè capaci di davanu tutti i prugrammi pussibili (chì ponu esse figurata in u sistemu furmali) hè una assai prufunna e significativu Turing scuperta.
U prucissuri hè un pobbe di prugrammi in lingua macchina. Giniralmenti troppu cari à scrive interpreti di lingue-altu livellu, cusì ch'elli en Français in una forma chì hè più fàciule à avellu.
Certi tipi di i traduttori hannu nomi assai stranu:
- U facile traducennu programmi lingua addunita in lingua macchina.
- U compiler traducennu una lingua-altu livellu di una lingua bassa.
 - hè un prugrammu chì piglia cum'è dati messu u prugrammu in qualchi lingua S è produci programma T in un tali manera ca iddi dui hannu lu stissu straniere: P → X → Q. Pirtantu, ∀x. P (x) = Q (x).
Sè diffusione u web prugrammi in qualcosa interpretable, hè chjamatu una fica nanzu divisa esicuzzioni, o AOT. AOT compiler pò ièssiri usatu a seria, l 'ùrtima dî quali hè à spessu u facile, per esempiu:
U codice surghjente compiler → (traduttore) → → codice assemblea facile (compiler) Codice → → machine à CPU (spiigà).
divisa funziunanti, o dinamichi mangianu se u prugramma hè diffusione, quandu faete da altra esiste cumpilatu. JIT-compilers sapere ciò ch'elli anu digià fattu tantu cum'è ùn a ripetiri dinò è dinò u codice surgente. Si pò ancu fà u divisa dire e recompilation basatu supra lu cumpurtamentu di l 'ambienti esicuzzioni programma.
Tanti lingui permette à pruvà codice, ntâ fasi e pubbricari l 'novu codice in Runtime.
tappa traduzzione
Broadcast c'hè i passi di ppi è sintitizzari:
U calciumbisulfate codice surghjente → → → teorija rapprisintazzioni conceptual (synthesizer) → codice di destinazione.
Quissa hè duvuta à sti mutivi:
- Ogni altru mètudu ùn hè micca bonu. traduzzione parolla solu ùn u travagliu.
- Good suluzione ingegneria: se vo vulete scrive i traduttori di lingue M è N surghjente urigine basta scrive solu programmi sèmplice M + N (polukompilyatorov) piuttostu chè cumplicatu M × N (totale di i traduttori).
Tuttavia, in pratica, a vista, conceptual di una assai raramenti abbasta sprissivu è abbastanza putente ca cummogghia tutti li tutti lingue surghjente è testu. Mentri qualchi rinisceru a ghjuntu vicinu à sta.
compilers Real passà à traversu parechji volti. Quandu facenu u vostru propriu compiler ùn micca bisognu di ripetiri tutti i travagliu chi genti hannu fattu di crià rapprisintazzioni e generators. Pudete en a vostra lingua direttamente in JavaScript o C è dispone di esistenti JavaScript-mutore è u C compiler à fà u restu. Tù dinù ponu aduprà la rapprisintazzioni ntirmediu esistenti e machini virtuale.
discugràfica traduttore
 - hè un prugrammu o vulcanizing, chì travaglia tri lingui: i surghjenti, u scalu è u fundamentu. Ci ponu esse scritti in una T-forma, Ghjesù basi lu uriginale manca, diritta è testu quì sottu.
Ci sò trè tippi di compilers:
- Â - hè samokompilyator si currispunni a la lingua surghjente di basi.
- Compiler quali modu precisu lingua hè u baseline, chiamatu samorezidentnym.
- Â - 'na cruci-compiler, s'eddu urigine di e diverse lingue basi.
Perchè hè sta mpurtanti?
Ancu s'è vo ùn fà una vera compiler, una bona cunniscenza di a tecnulugia di i so criazioni, perchè u cuncettu usatu pi stu scopu sò usati largamenti, per esempiu:
- testu stampatu;
- dumanni fatti di lingua a base;
- architettura urdinatore avanzatu;
- prublemi uttimizzazzioni generalized;
- GUIs;
- lingue scripting;
- controllers;
- machini virtuale;
- Traduction macchina.
In più, se vo vulete scrive preprocessors, linkers, mangime, debuggers è profilers, vi tocca à andà à u listessu passu comu quandu scrivu un compiler.
Tù dinù ponu amparà à scrive programmi megliu, dapoi a creazione di u traduttore di a lingua significa una megliu cunniscenza di u so intricacies è ambiguità. U studiu di i principii generale di audiuvisivu permette dinù tù à divintà un bon lingua criatori. Cusì ùn si mpurtanza comu cuddetti la lingua se ùn ponu esse più effittivamenti?
tecnulugia cumpleta
tecnulugia compiler cuncerna parechji lochi diversi di la nfurmàtica:
- tiuria furmali di lingua: Grammatica, immisu, computability;
- architettura urdinatore:. sbocca istruzzioni, RISC o CISC, pipelined ciculu roggiu prufonde trasfurmazioni, etc;
- cuncetti di linguagi di prugrammazione, per esempiu, davanu un cuntrollu di siquenza, esicuzzioni cunnizziunata, iteration, recursion, decomposition funziunali, modularity, synchronization, eta-di prugrammazione, caccià, custanti sub-tippi, mudelli, Type d'oïl, prototypes, annotations, flussu, monads, mailboxes, cuntinuà , wildcards, sprissioni rigulari, memoria transactional, lascita, polymorphism, apparatus modu, è cetara è cetara è cetara..;
- lingue astrattu e machini virtuale;
- alguritmi e dati strutture: sprissioni rigulari, alguritmi parsing, alguritmi Grafica, prugrammazione dinamica, a furmazione;
- linguagi di prugrammazione: sintassi, straniere (fermu è dinamichi), paradigms sustegnu (strutturale, OOP, funziunali, romanu, pila, parallilismu, eta-di prugrammazione);
- prugrammi a creazione (compilers, di solitu grande è cumplessu): localisation, caching, componentize, API-interfaccia, sona-usu, synchronization.
disignu compiler
Certi di i prublemi scontru in u sviluppu di u veru traduttore:
- Prublemi cù a lingua surgente. Hè facile à cumpilari hè? Avemu una preprocessor? Comu sò i tippi? Avemu una biblioteca?
- Gruppu passa compiler: sola, o multi-strata?
- U gradu di uttimizzazzioni àutri. programmi diffusione Fast è malignu incù pocu, o micca uttimizzazzioni pò essa nurmali. Over-uttimizzazzioni compiler vi soldat, ma megliu u corsu à Runtime forse tene lu.
- U gradu di dittizzioni errore nicissarii. Pò un traduttore appena firmavanu à u primu sbagliu? Quandu si deve saxofona? S'ellu a cunfidu a currezzione errore compiler?
- A dispunibilità di i mezi. Se la lingua uriginale ùn hè micca assai nica, sò nicissarii i analyzers flat è teorija. Ci sò dinù generators, generators codice, ma ch'elli ùn sò cusì semplici.
- Type de codice testu à esse caricate. Esse sceltu da codice di machine rinfurzata, o Virtual pura. O cum'è scrive un commento voce chì crea una rapprisintazzioni ntirmediu pupulari comu LLVM, RTL, o JVM. O di fà una traduzione di u previstu in u codice surghjente in C o JavaScript.
- A forma di u Codice di u testu. Pudete sceglie una lingua assemblea, un codice di machine portable Voir, imagine memoria codice di machine.
- Retargeting. Quannu lu gruppu di generators hè bona à avè una parte fiordu cumune. Per stu mutivu hè megliu à avè una teorija di u numeru di tanti banni.
compiler Architecture: wave
Quessi sò i principali cumpunenti funziunali di un compiler chì rende codice nativu (se u prugrammu pruduzzioni hè un prugrammu in C, o un virtual, vi tuccherà micca tanti volti):
- U prugrammu entrée (Obed flussu) hè pasce in u flat (calciumbisulfate vucabbulariu), chì converts lu in un bracciu di Reali.
- Parser (parser) custruisce un astrattu àrburu funetica.
- calciumbisulfate simàntici decomposes l 'infurmazione simàntici è chèques u nodes àrburu di sbagghi. Cum'è un risultatu, custruitu simàntici grafico - albero fuori astrattu cù pruprietà alimenta è i ligami stabbilutu.
- teorija codice Corsi di costruisce un grafico purtata (tuples sò ricugghieru in blocchi principali).
- Machine-indipendente codice optimizer Mascagni uttimizzazzioni dui lucali (moins de l 'unità basa) è mundiale (à tutti i blocchi) cunziddiratu cullezzione ind'a routines. Ridottu codice redundant 'e simplifies i calculi. U risultatu hè un grafico purtata scambiatu.
- Teorija attacca codice testu blocchi basi in un codice di cuntrollu trasmissioni rectilinear, criannu un cartulare oggettu facile registers Virtual (forsi ineffective).
- Machine-dipindenti optimizer, Linker allocates memoria trà registers è face squadre preparanu. Hè pena u prugrammu cunversione in lingua addunita in stu assemblea cù un bonu usu di pipelining.
In più, l 'usu di dittizzioni errore Manager subsystem e tavule simbulu.
Analisi di vucabbulariu (Scanning)
A flat converts i caratteri surghjente bracciu in un bracciu di Reali, toglie whitespace, cumenti e macros redazzione.
Scanners spessu scontranu prublemi, cume s'ellu o micca à piglià in contu u casu, marghjini, brisure, ligna e missaghji stampati.
Errori chì pò accade durante circular, chiamatu di vucabbulariu e incrudunu:
- caratteri chì ùn sò à l 'alfabbetu;
- soprappiù di u numeru di i caratteri in una parolla o di ligna;
- micca un segnu chiusu, o una catena littérale;
- fine di u schedariu in u cumentu.
Immisu (immisu)
U parser converts l 'ordine di Reali in un arvulu astrattu funetica. Ogni cultura in l 'arvulu si ferà cum'è un oggettu cu campi, chjamatu, parechji di i quali sò elli i nodes àrburu. At stu stadiu ùn ci sò micca ciculu. Quannu tu di creà una parser hè necessaria à pagà attente à u liveddu di cumplissità di grammatica (LL o LR) è truvà fora s'ellu ùn ci sò ogni regula disambigua. Certi lingui nun bisognu Analisi simàntici.
Errori trovu in stu stadiu sò chjamati funetica. Per esempiu:
- K = 5 * (7 - y;
- j '= / 5;
- 56 = X * 4.
analisi simàntici
Duranti l ' anàlisi simàntici à verificà i permissibility di regule è parti assuciatu di l'arvulu parsing (n'ammustra nomi di riferenza inserting funziunamentu di cunversione di tipu implicit, è cetara è cetara. D.) Per furmannu lu grafico simàntici.
Viotu, u ghjocu di admissibility di reguli in diverse lingue sfarente. Sè vo cumpilari e lingue Java-cum'è, compilers pò truvà:
- dichjarazione variàbbili parechje ind'a so duminiu;
- una riferenza à una variàbile davanti à u so dichjarazione;
- referenze à u nomu di a cummàttiri;
- inghjuliatu di li diritti di peddi;
- numaru eccessivu, o insufficient di argumenti in una d 'mètudu;
- activité mismatch.
generazioni
generazioni codice Corsi di pruduce grafico purtata cumpostu di tuples, ricugghieru in blocchi di basi.
generazioni codice produci un codice di machine vera. In compilers tradizziunali di l 'RISC-machini nant'à u primu passu, vi creà una facile cù un numaru infinitu di registers virtuale. Per CISC-machini forsi ùn mi succedi.
Similar articles
Trending Now