RačunalnikiProgramiranje

Izdajatelj - je ... Vrste prevajalniki. Pretvarjanje in oddajanje programov

Programi, kot tudi ljudje, prevajati iz enega jezika v drugega potrebujejo tolmača ali prevajalca.

osnovni pojmi

Program je jezikovna predstavitev izračunov: i → P → P (i). Tolmač je program, ki je na voljo na vhodno programa P in nekaj vrednost x. To nastopa na P x: I (P, x) = P (x). Dejstvo, da obstaja samo en prevajalec je sposobna opravljati vse možne programe (ki se lahko zastopane v formalnem sistemu), je zelo globoka in pomembna odkritja Turing.

Procesor je tolmač programov v strojnem jeziku. Na splošno predragi za pisanje tolmačev za jezike na visoki ravni, tako da prevesti v obliko, ki je lažje interpretirati.

Nekatere vrste prevajalcev imajo zelo nenavadne imena:

  • Monter prevaja jezikovnih programov za montažo v strojnem jeziku.
  • Prevajalnik prevede jezika na visoki ravni na nižjo jeziku.

Izdajatelj - je program, ki je kot vhodni podatki program v nekaterih jezikovnih S in proizvaja programa T na tak način, da imata oba enako semantiko: P → X → Q. To je, ∀x. P (x) = Q (x).

Če oddaja celoten program v nekaj interpretabilnega, se imenuje zbirko pred izvedbo, ali AOT kompilacijo. AOT prevajalnik se lahko uporablja v seriji, pri čemer zadnja je pogosto monter, na primer:

Izvorna koda prevajalnik → (prevajalec) → → sklop koda monter (prevajalnik) → → CPU strojno kodo (prevajalec).

Operativno ali dinamično urejanje pride, če se program oddaja, kadar jo izvaja drugi prej sestavila strani. JIT-prevajalniki spomnite, kaj so že storili, da ne bi znova in znova ponovi izvorno kodo. Lahko so celo proizvajajo prilagodljivo urejanje in recompilation temelji na obnašanje okolja o izvedbi programa.

Številni jeziki omogočajo izvajanje kode v času prevajanja in sestaviti novo kodo v času izvajanja.

faza prevod

Oddajanje obsega korake analizirati in sintetizirati:

Izvorna koda analizator → → → konceptualna predstavitev generator (sintetizator) → ciljni kodo.

To je zaradi teh razlogov:

  • Vsaka druga metoda ni primerna. Prevod besede preprosto ne deluje.
  • Dobra rešitev inženiring: če želite napisati prevajalcev M in N izvirnih jezikih ciljnih treba napisati le preproste programe M + N (polukompilyatorov) namesto M × N kompleksa (skupno prevajalcev).

Vendar pa v praksi, konceptualni pogled zelo redko dovolj izrazit in dovolj močan za pokrivanje vseh možnih izvornih in ciljnih jezikov. Medtem ko so nekateri sposobni priti blizu tega.

Real prevajalniki skozi več faz. Pri ustvarjanju lastne prevajalnik ni treba ponavljati vse trdo delo, da so ljudje storiti za ustvarjanje predstavitev in generatorje. Lahko prevesti jezik neposredno v JavaScript ali C in izkoristite obstoječe JavaScript-motorjem in prevajalnik C storiti ostalo. Lahko uporabite tudi obstoječi vmesni zastopanje in virtualne stroje.

zapis prevajalec

Izdajatelj - je program ali strojna oprema, ki je vključevala tri jezike: Vir je ciljne in base. Ti lahko zapišemo v T-obliki, dajanje original levo, desno in ciljno bazo spodaj.

Obstajajo tri vrste prevajalniki:

  • Izdajatelj - je samokompilyator če ustreza osnovni izvornem jeziku.
  • Prevajalnik, ki ciljajo jezik je izhodišče, ki se imenuje samorezidentnym.
  • Izdajatelj - prečni prevajalnik, če je ciljno in osnovne različne jezike.

Zakaj je to pomembno?

Tudi če nikoli ne bo pravi prevajalnik, dobro poznavanje tehnologije njegovega ustvarjanja, saj se pojem uporablja za ta namen pogosto uporabljajo, na primer:

  • oblikovanje besedila;
  • jezik poizvedbe v podatkovnih bazah;
  • napredne računalniške arhitekture;
  • generalizirani optimizacijski problemi;
  • GUI;
  • skriptni jeziki;
  • regulatorji;
  • virtualne stroje;
  • Strojno prevajanje.

Poleg tega, če želite napisati predprocesorjev, povezovalcev, nakladalci, razhroščevalniki in profilers, morate iti skozi iste korake kot pri pisanju prevajalnik.

Prav tako se lahko naučite, kako pisati boljše programe, saj je ustvarjanje prevajalcem za jezik pomeni boljše razumevanje svoje zapletenosti in nejasnosti. Študija splošnih načel oddajanja tudi vam omogoča, da postane dober oblikovalec jezik. Torej, ne glede na to kako strm jezik, če ga ni mogoče učinkovito izvajati?

celovita tehnologija

prevajalnik tehnologija zajema veliko različnih področij računalništva:

  • formalna teorija jezika: slovnice, razčlenjevanje, izračunljivosti;
  • računalniške arhitekture. pouk določa, RISC in CISC, cevovodni obdelava core clock ciklov, itd;
  • koncepti programskih jezikov, na primer, ki opravljajo nadzor zaporedno, pogojna izvršitve, ponovitev, rekurzija, funkcionalna razpad, modularnost, sinhronizacijo, meta-programiranje, obseg, stalne podtipi, predloge, izhod tipa, prototipi, pripisi, pretoka, monads, nabiralniki, še naprej , nadomestni znaki, regularni izraz, transakcijska spomin, dedovanje, polimorfizem, nastavitve, in tako naprej, itd..;
  • abstraktne jeziki in virtualne stroje;
  • algoritmi in podatkovne strukture: regularni izrazi, razčlenjevanju algoritmi, grafika algoritmi, dinamično programiranje, usposabljanje;
  • programskih jezikov: sintaksa, semantika (statične in dinamične), nosilni paradigm (strukturna, OOP, funkcionalen, logično, sklad, vzporednost, meta-programiranje);
  • ustvarjanje programske opreme (prevajalniki, navadno velike in kompleksne): lokalizacija, predpomnjenje, componentize, API-vmesnik, ponovna uporaba, sinhronizacija.

oblikovanje prevajalnik

Nekatere od težav pri razvoju realnega prevajalca:

  • Težave z izvornem jeziku. Je enostaven za njihovo zbiranje? Ali obstaja Predprocesor? Kako so vrste? Ali obstaja knjižnica?
  • Združevanje prevajalnika prelazov: enojni ali multi-način?
  • Stopnja optimizacije želji. Hitro in nečisti oddajanje programov z malo ali brez optimizacije lahko normalno. Over-optimizacija prevajalnik bo počasi, ampak bolje koda v času izvajanja lahko vredno.
  • Zahtevana stopnja odkrivanja napak. Lahko prevajalec samo ustavi na prvem napako? Kdaj naj se ustavi? Ali zaupati popravek o napaki prevajalnik?
  • Razpoložljivost orodja. Če izvirni jezik ni zelo majhna, so potrebni skener in generator analizatorji. Obstajajo tudi generatorji, oznaka generatorji, vendar niso tako pogosti.
  • Vrsta ciljne kode, ki bodo nastajali. Izbran iz čistega dopolni ali navideznem strojni kodi. Ali pa samo napisati vstopni del, ki ustvarja priljubljeno vmesno predstavitev kot LLVM, RTL, ali JVM. Ali pa, da je prevod izvirnika v izvorno kodo v C ali JavaScript.
  • Oblika ciljne kode. Izberete lahko tudi jezik montažo, prenosni stroj kodo, strojni kodi spominsko sliko.
  • Preusmeriti. Ko je množica generatorjev dobro imeti skupni vstopni del. Zato je najbolje, da ima en generator za vnos številnih delih.

prevajalnik arhitektura: deli

To so glavne funkcionalne sestavine prevajalnik, ki ustvarja izvorno kodo (če je izhodna program je program v C ali virtualnem stroju, vam ni treba toliko faze):

  • Program vhod (znamke toka) se dovaja v skener (leksikalni analizator), ki jo pretvori v tok žetonov.
  • Parser (parser) gradnji eno abstraktno skladenjsko drevo.
  • Semantično analizator razpade semantično informacije in preveri drevo vozlišč za napake. Kot rezultat, zgrajena pomensko graf - abstraktno skladenjsko drevo z dodatnimi lastnostmi in vzpostavljenih povezav.
  • Vmesna generatorja kode ustvari graf toka (torke so združeni v glavni bloke).
  • Strojno neodvisen koda optimističen izvaja tako lokalno (v bazni postaji) in globalno (za vse bloke) optimizacijo bistvu ostane v rutino. Zmanjšuje odvečno kodo in poenostavi izračune. Rezultat je modificiran graf pretoka.
  • Agregati veže ciljni kode osnovnih blokov v premočrtno kontrolne kode prenosa, ki ustvarja virtualne registre predmetu datoteka zbirniku (morda neučinkovita).
  • Stroj odvisne optimističen, povezovalec dodeljuje pomnilnik med registri in omogoča načrtovanje ekipe. To opravlja pretvorbo program v zbirnem jeziku na tej skupščini z dobro uporabo cevovodov.

Poleg tega je uporaba odkrivanje napak upravljavca podsistema in simbol tabel.

Leksikalna analiza (skeniranje)

Skener pretvori znakov izvorne tok v tok žetonov, odstranjevanje presledkov, pripombe in širi makrov.

Skenerji pogosto srečujejo s težavami, kot so, ali ne upošteva primera, marže, prelome vrstic in vgrajenih komentarje.

Napake, ki se lahko pojavijo med skeniranjem, ki se imenuje leksikalni in vključujejo:

  • znaki, ki niso v abecedi;
  • Presežek števila znakov v besede ali vrstice;
  • ni zaprt znak ali niz dobesedni;
  • konec datoteke v komentarju.

Razčlenjevanje (razčlenjevanje)

Razčlenjevalnik pretvori zaporedje žetonov v izvlečkov sintakse drevo. Vsako vozlišče v drevesu je shranjen kot predmet z imenovanimi področjih, od katerih so mnoge same drevo vozlišč. Na tej stopnji ni ciklov. Ko ustvarite razčlenjevalnik je potrebno paziti na stopnjo zahtevnosti slovnice (LL ali LR) in ugotoviti, ali obstajajo pravila razločitev. Nekateri jeziki ne zahtevajo semantično analizo.

Napake na voljo na tej stopnji se imenujejo sintakso. Na primer:

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

pomenska analiza

Med semantično analizo se preveri dopustnost pravil in pridruženih delov razčleniti drevesa (kar referenčnih imen vstavljanje operacijo za konverzije implicitnih tipa, in tako naprej. D.) Za oblikovanje semantično graf.

Očitno je, da nabor dopustnosti pravil v različnih jezikih različne. Če zbere Java podobne jezike, lahko prevajalniki našli:

  • multipla spremenljivka izjavo v njeno področje uporabe;
  • sklic na spremenljivko pred svojo izjavo;
  • navedbe imena od črno;
  • kršitev patentnih pravic;
  • pretiran ali nezadosten število argumentov pri postopku klicem;
  • tip neusklajenost.

generacija

Vmesna generiranje kode proizvaja graf toka, ki ga sestavljajo terk, združene v osnovne bloke.

generacija koda ustvari realno strojno kodo. V tradicionalnih prevajalniki za RISC-strojev na prvem koraku, ustvarite zbirnik z neskončno število virtualnih registrov. Za CISC strojno verjetno ne bo zgodilo.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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