RačunalaProgramiranje

Prijenos - je ... Vrste kompilatora. Pretvorba i emitirati programe

Programi, kao i ljudi prevoditi s jednog jezika na drugi potreban tumač ili prevoditelj.

osnovni pojmovi

Program je jezični prikaz izračuna: i → P → P (i). Tumač je program koji se isporučuje na ulazni programa P i neki ulaz x. Obavlja na P x: I (P, x) = P (x). Činjenica da postoji samo jedan prevoditelj koji može obavljati sve moguće programe (koji mogu biti zastupljene u formalnom sustavu) je vrlo duboka i značajna otkrića Turing.

Procesor je tumač programa u strojni jezik. Općenito preskupo napisati tumače za visoke razine jezika, tako da prevesti u oblik koji je lakše interpretirati.

Neke vrste prevoditelja imaju vrlo čudna imena:

  • Slaganje prevodi programe u asembleru u strojni jezik.
  • Prevodilac prevodi jezik visoke razine na nižu jeziku.

Prijenos - je program koji traje kao ulazni podaci u program u nekom jezika S i proizvodi T programa na takav način da su obojica imaju iste semantiku: P → X → Q. To jest, ∀x. P (x) = P (x).

Ako emitirati cijeli program u nešto interpretirati, to se zove kompilacija prije izvršenja ili AOT kompilacije. AOT prevodilac može se koristiti u nizu, od kojih ovi potonji je često monter, na primjer:

Izvorni kod prevodilac → (prevoditelj) → → sklop kod monter (prevodilac) → → CPU stroj kod (tumač).

Operativni ili dinamička kompilacija događa ako se program emitira, kada je izvršen od strane drugih prethodno sastavio dio. JIT-prevodioci zapamtiti ono što su već učinili kako ne bi opet i opet ponoviti izvornog koda. Oni čak mogu proizvesti adaptivni prikupljanje i recompilation se temelji na ponašanju izvršenja programa okruženju.

Mnogi jezici omogućuju izvršavanje koda u vrijeme prevođenja i sastaviti novi kôd za vrijeme izvođenja.

prijevod faza

Prijenos se sastoji od koraka analize i sinteze:

Izvorni kod analizator → → → konceptualni prikaz generatora (sintisajzer) → Target koda.

To je zbog ovih razloga:

  • Svaka druga metoda nije prikladna. Riječ prijevod jednostavno ne radi.
  • Dobro inženjering rješenje: ako želite pisati prevoditelja za M i N izvornih jezika ciljane treba pisati samo M + N jednostavne programe (polukompilyatorov), a ne M × N kompleksa (ukupno prevoditelja).

Međutim, u praksi, konceptualni pogled vrlo rijetko dovoljno izražajan i dovoljno snažan da pokrije svaki zamisliv izvor i ciljne jezike. Dok su neki bili u mogućnosti doći blizu toga.

Pravi prevodiocima proći kroz mnoge faze. Prilikom stvaranja vlastite prevodilac ne treba ponavljati sve teško raditi da su ljudi učinili za stvaranje predodžbe i generatori. Možete prevesti svoj jezik izravno u JavaScriptu ili C i iskoristiti postojeće JavaScript-motora i C prevodilac učiniti ostalo. Također možete koristiti postojeće srednje zastupljenost i virtualne strojeve.

rekord prevoditelj

Prijenos - je program ili hardvera, koji je uključivao tri jezika: izvor, odredište i baza. Oni mogu biti napisani na T-oblika, stavljanje original lijevi, desni i ciljnu bazu ispod.

Postoje tri vrste prevodiocima:

  • Prijenos - je samokompilyator ako odgovara osnovnom izvornom jeziku.
  • Prevodilac koji ciljaju jezik je osnovica, pod nazivom samorezidentnym.
  • Prijenos - cross-prevodilac, ako je ciljano i temeljne razni jezici.

Zašto je to važno?

Čak i ako nikada napraviti pravi prevodilac, dobro poznavanje tehnologije svog nastanka, jer je koncept koji se koristi u tu svrhu koriste se široko, na primjer:

  • oblikovanje teksta;
  • jezika upite na baze podataka;
  • napredna arhitektura računala;
  • generalizirani problemi optimizacije;
  • GUI;
  • skriptnih jezika;
  • kontroleri;
  • virtualni stroj;
  • Strojno prevođenje.

Osim toga, ako želite napisati procesor, poveznici, utovarivače, debuggers i profile, morate proći kroz iste korake kao kod pisanja prevodilac.

Također možete naučiti kako napisati bolje programe, budući da je stvaranje prevoditelj za jezik znači bolje razumijevanje svojih zamršenosti i nedorečenosti. Proučavanje općih načela emitiranja također vam omogućuje da postanete dobar dizajner jezik. Tako je to važno koliko je strm jezik ako ga ne mogu učinkovito provesti?

sveobuhvatan tehnologija

prevodilac tehnologija obuhvaća mnogo različitih područja informatike:

  • Formalna teorija jezika: gramatika, analize izračunljivosti;
  • arhitektura računala. pouku setovi, RISC ili CISC, pipelined obrada osnovne ciklusa sat, itd;
  • koncepti programskih jezika, na primjer, obavljanje kontrole slijedom, uvjetna izvršavanja, iteracija, rekurzije, funkcionalna dekompozicija, modularnost, sinkronizacije, meta-programiranje, opseg, stalno pod-vrste, predloške, izlaz tipa, prototipovi, bilješke, protoka, monadama, poštanski sandučići, i dalje , zamjenske znakove, regularni izraz, transakcijski memorije, nasljeđivanje, polimorfizam, postavke načina, i tako dalje itd..;
  • apstraktne jezika i virtualni strojevi;
  • Algoritmi i strukture podataka: regularnih izraza, analize algoritama, grafika algoritmi, dinamičko programiranje, obuka;
  • programskih jezika: sintakse, semantike (statička i dinamička), podršku paradigme (strukturni, OOP, funkcionalnim logično, stog, paralelnost, meta-programiranje);
  • stvaranje softver (prevodiocima, obično veliki i složeni): lokalizacija, caching, componentize, API-sučelja, ponovno korištenje, sinkronizacija.

prevodilac dizajn

Neki od problema u razvoju realnog prevoditelja:

  • Problemi s izvornom jeziku. Je li lako ga sastaviti? Postoji li Preprocessoru? Kako su vrste? Ima li knjižnica?
  • Grupiranje prevodilac prolazi: jedan ili više načina?
  • Stupanj optimizacije želji. Brzo i nečist emitirati programe s malo ili bez optimizacije može biti normalno. Pretjerano optimizacija prevodilac će usporiti, ali bolje kod za vrijeme izvođenja može biti vrijedan Internet.
  • Potreban stupanj detekcije pogreške. Može prevoditelj samo zaustaviti na prvom pogreškom? Kada je trebalo zaustaviti? Bilo vjerovati ispravak prevodilac pogrešci?
  • Dostupnost alata. Ako je izvorni jezik nije jako mali, analizatori skener i generator su obavezna. Tu su i generatori, kod generatora, ali oni nisu tako česti.
  • Vrsta ciljne koda koji se generira. Biti odabran od čistog dopunjen ili virtualni stroj koda. Ili samo napisati dio unosa koji stvara popularan srednji prikaz kao što LLVM, RTL, ili JVM. Ili napraviti prijevod izvornika u izvorni kod u C ili JavaScript.
  • Format ciljnog koda. Možete odabrati zbor jezik, prijenosni stroj kod, stroj kod memorije sliku.
  • Preusmjeravanja. Kada je set generatora je dobro imati zajednički ulazni dio. Zbog toga je najbolje imati jedan generator za unos mnogih dijelova.

prevodilac Arhitektura: Komponente

To su glavne funkcionalne komponente prevodilac koji generira izvorni kod (ako je izlazni program je program u C ili virtualni stroj, ne morate toliko faze):

  • Ulaz programa (oznake protoka) se puni u skener (leksički analizator), koji ga pretvara u struju tokena.
  • Rastavljač (rastavljač) konstrukcija jednog apstraktne sintakse stabla.
  • Semantički analizator raspada semantičke podatke i provjerava stabla čvorova za pogreške. Kao rezultat toga, izgrađen semantičku graf - apstraktne sintakse stablo s dodatnim svojstvima i uspostavljena veza.
  • Srednji generator koda gradi graf toka (torke su grupirani u glavna bloka).
  • Stroj neovisan kod optimizaciju obavlja oba lokalno (u baznu jedinicu) i globalno (sve blokove) optimizacija osnovi preostalog u rutine. Smanjuje suvišne kod i pojednostavljuje izračune. Rezultat je modificirana graf protoka.
  • Generator veže meta kod osnovne blokove u pravocrtno kontrole prijenosa koda, stvaranje objekt datoteka monter virtualnih registre (eventualno neučinkovito).
  • Stroj ovisna optimizaciju, veznik dodjeljuje memoriju između registara i čini planiranje timova. Obavlja program pretvorbe u asemblerskom jeziku na tom skupu uz dobru korištenje cjevovod.

Osim toga, upotreba otkrivanje pogreške podsustava manager i simbol tablica.

Rječnički analiza (skeniranje)

Skener pretvara tok izvora likove u struji tokeni, uklanjanje razmak, komentare i širi makronaredbi.

Skeneri često naići na probleme, kao što je da li ili ne uzeti u obzir slučaj, margine, prijeloma redaka i ugrađen komentare.

Pogreške koje se mogu pojaviti tijekom skeniranja, pod nazivom leksički i uključuju:

  • likovi koji nisu u abecedi;
  • Višak broj znakova u riječi ili linije;
  • nije zatvoren znak ili doslovni niz;
  • kraj datoteke u komentaru.

Analize (raščlanjivanja)

Rastavljač pretvara slijed žetona u apstraktni sintakse stablo. Svaki čvor u stablu se pohranjuju kao objekt s nazivom polja, od kojih su mnogi i sami su stabla čvorovi. U ovoj fazi ne postoje ciklusi. Prilikom izrade parser je potrebno obratiti pozornost na razinu složenosti gramatike (LL ili LR) i saznati postoje li pravila razdvojbena. Neki jezici potrebna semantička analiza.

Pogreške se nalaze u ovoj fazi nazivaju sintaksa. Na primjer:

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

semantička analiza

Tijekom semantičke analize za provjeru dopuštenosti pravila i pridruženih dijelova stablo parsiranja (čime referentne imena umetanje rad za implicitne pretvorbe tipa, i tako dalje. D.) Za formiranje semantičke graf.

Očito je skup prihvatljivosti pravila u različitim jezicima različitim. Ako sastaviti Java poput jezika, prevodioci mogu naći:

  • multiple prijava varijable djelokruga;
  • referenca na varijablu prije očitovanju;
  • reference na naziv crno;
  • povrede patentnih prava;
  • Prevelika ili nedovoljan broj argumenata u postupku poziva,
  • Neslaganje vrste.

generacija

Srednji kod generacije proizvodi graf toka sastavljen od torke, grupiranih u osnovne blokove.

kod generacije stvara pravi strojni jezik. U tradicionalnim kompilatora za RISC-strojeva na prvom koraku, stvoriti monter sa beskonačnim brojem virtualnih registara. Za CISC-strojeva vjerojatno neće dogoditi.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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