TelefoniaPrugrammazione

 - 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

 

 

 

 

Newest

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