KompiuteriaiProgramavimas

Transliuotojas - tai ... Tipai sudarytojų. Konvertuoti ir transliacijų programas

Programas, taip pat žmonės, versti iš vienos kalbos į kitą reikia vertėjo ar vertėjas.

pagrindinės sąvokos

Programa yra kalbinės atstovavimo skaičiavimų: i → P → P (i). Vertėjas yra programa, kuri yra tiekiama į įvesties programos P ir kai įvestimi x. Jis atlieka, kai P x: I (P x) = P (x). Tas faktas, kad yra tik vienas vertėjas yra pajėgi atlikti visas įmanomas programas (kurios gali būti atstovaujama formalios sistemos) yra labai gilus ir reikšmingas atradimas Tiuringo.

Procesorius yra Programų mašina kalbos vertėjas. Paprastai per brangu rašyti vertėjų aukšto lygio kalbomis, todėl jie išversti į formą, kuri yra lengviau interpretuoti.

Kai kurie vertėjai rūšių turi labai keistus vardus:

  • Surinkėjas verčia asemblerio kalba programas į mašina kalba.
  • Kompiliatorius verčia aukšto lygio kalbą į mažesnę kalba.

Transliuotojas - tai programa, kuri trunka kaip įvesties duomenis programą kai kurių kalbų S ir gamina T programos tokiu būdu, kad jie abu turi tuos pačius semantiką: P → x → Q. Tai yra, ∀x. P (x) = Q (x).

Jei transliuoti visą programą į kažką suprantami, tai vadinama iškarpą prieš egzekuciją arba AOT rengimo. AOT sudarytojas gali būti naudojamas serija, iš kurių pastarieji dažnai surinkėjas, pavyzdžiui:

Kodo kompiliatorius → (vertėjas) → → surinkimas kodas montuotojo (sudarytojas) → → CPU mašina kodas (vertėjas).

Veiklos ar dinaminis rinkinys atsiranda, jei programa transliuojama, kai vykdomas kitų anksčiau sudarytą dalis. JIT-kompiliatorius prisiminti, ką jie jau padarė, kad nebūtų vėl ir vėl pakartoti kodą. Jie net gali sukelti prisitaikanti kaupiant ir neperkompiliuojant remiantis programos vykdymo aplinkos elgesį.

Daug kalbų leisti vykdyti kodą kompiliavimo metu ir sudaryti naują kodą vykdymo metu.

vertimo etapas

Transliacija sudaro analizuoti ir sintetinti veiksmus:

Šaltinio kodas analizatorius → → → konceptualus atstovavimas generatorius (sintezatorius) → Target kodą.

Taip yra dėl šių priežasčių:

  • Bet koks kitas metodas netinka. Žodis vertimas tiesiog neveikia.
  • Geras inžinerijos sprendimas: jei norite rašyti vertėjus M ir N kodo kalbomis tikslinių reikia rašyti tik M + N paprastas programas (polukompilyatorov), o ne M × N komplekso (iš viso vertėjų).

Tačiau praktikoje, konceptualus požiūris labai retai pakankamai išraiškingas ir pakankamai galinga, kad padengti visus įmanomus Originalo ir vertimo kalbos. Nors kai kurie galėjo priartėti prie tai.

Nekilnojamasis kompiliatoriai pro daug etapų. Kurdami savo kompiliatorių nereikia kartoti visą sunkų darbą, kad žmonės padaryti, kad sukurti atstovybių ir generatoriai. Jūs galite išversti kalbą tiesiogiai JavaScript arba C ir pasinaudoti esama JavaScript variklio ir C kompiliatorius darome. Taip pat galite naudoti esamą tarpinę atstovavimą ir virtualias mašinas.

įrašo vertėjas

Transliuotojas - tai programa, ar aparatūros, kuriame dalyvavo trys kalbos: šaltinis, paskirties ir pagrindo. Jie gali būti parašytas T-formos, pateikimo žemiau originalus į kairę, dešinę ir tikslinę bazę.

Yra trijų tipų sudarytojų:

  • Transliuotojas - tai samokompilyator jei jis atitinka pagrindinio šaltinio kalba.
  • Kompiliatorius, kuris, į kurią verčiama, yra pradinis, vadinamas samorezidentnym.
  • Transliuotojas - tarpvalstybinio sudarytojas, jei jis tikslingai ir pagrindiniai įvairiomis kalbomis.

Kodėl tai svarbu?

Net jei jūs niekada padaryti tikrą kompiliatorių, gerai išmanyti savo kūrybos technologijas, nes ši sąvoka naudojama šiam tikslui yra plačiai naudojami, pavyzdžiui:

  • formatavimas teksto;
  • kalbos užklausų į duomenų bazes;
  • Išplėstinė kompiuteris architektūra;
  • apibendrinti optimizavimo problemos;
  • GUI;
  • skriptų kalbas;
  • valdikliai;
  • virtualios mašinos;
  • Mašininis vertimas.

Be to, jei norite rašyti pirminio apdorojimo procesoriai, sujungimų, krautuvai, debugery ir profilers, turite eiti per tą patį žingsnių, kaip rašant kompiliatorių.

Taip pat galite sužinoti, kaip rašyti geresnius programas, nes dėl kalbos vertėjas kūrimas reiškia geresnį supratimą apie savo gudrybės ir dviprasmybių. Iš bendrųjų principų transliavimo Tyrimas taip pat leidžia jums tapti geru dizaineris kalba. Taigi tai svarbu, kaip kietas kalba, jeigu ji negali būti veiksmingai įgyvendinama?

išsami technologija

kompiliatorius technologija apima daug įvairių sričių informatikos:

  • formalus teorija kalba: gramatikos, sintaksės, Computability;
  • kompiuterių architektūra. instrukcijų rinkinius, RISC ar CISC, konvejerinė apdorojimas core laikrodžio ciklai ir tt;
  • sąvokos programavimo kalbų, pavyzdžiui, atliekant sekos kontrolę, su sąlyga, vykdymo, iteracijos, rekursija, funkcionalus, skilimas, modalumas, sinchronizacija, meta programavimo, apimtis, nuolat potipiai, šablonai, Išėjimo tipas, prototipai, komentarų, srautas, vienuolis, pašto dėžutes, toliau , pakaitos, Įprastoji išraiška, sandorio atminties, paveldėjimo, polimorfizmas, režimo nustatymai ir tt ir tt..;
  • abstrakčios kalbos ir virtualios mašinos;
  • Algoritmai ir duomenų struktūros: Reguliarūs išsireiškimai, analizavimą algoritmai, grafikos algoritmai, dinaminio programavimo, mokymo;
  • programavimo kalbos: sintaksė, semantika (statinis ir dinaminis), paramos paradigmos (struktūrinis, OOP, funkcionalus, logiška, kamino, lygiagretumas, meta programavimas);
  • kūrimo programinės įrangos (kompiliatoriai, paprastai didelių ir sudėtingų): lokalizavimo, spartinimo, componentize, API sąsajos, pakartotinio naudojimo, sinchronizacija.

kompiliatorius dizainas

Kai kurias problemas, su kuriomis susiduriama realiame vertėjas plėtros:

  • Problemos su originalo kalbos. Ar lengva surinkti jį? Ar yra pirminio apdorojimo procesorius? Kaip tipai? Ar yra biblioteka?
  • Grupavimo kompiliatoriaus eina: vieną ar kelis-būdas?
  • Iš optimizavimas laipsnis pageidaujama. Greiti ir nešvarus transliacijų programas su mažai arba jokio optimizavimo gali būti normali. Per optimizavimas sudarytojas bus lėtas, bet geriau kodas runtime gali būti verta.
  • Reikalingas laipsnis klaidų aptikimo. Ar vertėjo tiesiog sustoti pirmą klaidą? Kai jis turėtų sustabdyti? Ar pasitikėti sudarytojas klaidų taisymą?
  • Įrankių prieinamumą. Jei originalo kalba nėra labai mažas, skenerio ir generatorius analizatoriai yra privalomi. Taip pat yra generatoriai, kodas generatoriai, tačiau jie ne taip dažnai.
  • turi būti generuojama tipas tikslinės kodą. Būti pasirinktas iš gryno papildyti arba virtualios mašinos kodą. Arba tiesiog parašykite įrašo dalį, kuri sukuria populiarus tarpinį atstovavimo, pavyzdžiui, llvm, RTL, ar JVM. Arba padaryti originalo vertimą kodo C arba JavaScript.
  • Tikslinės kodas formatas. Galite pasirinkti surinkimo kalbą, nešiojamą mašininį kodą, mašina kodas atminties įvaizdį.
  • Apsilankiusiems. Kai generatorių rinkinys yra gerai turėti bendrą įėjimo dalį. Dėl šios priežasties ji yra geriausia turėti vieną generatorių už daugelio dalių įėjimo.

kompiliatorius Architektūra: komponentai

Tai yra pagrindiniai funkciniai komponentai sudarytojas, kuris generuoja gimtoji kodą (jei išėjimo programa yra programa, C arba virtualioje mašinoje, jums reikia ne tiek daug etapų):

  • Įvesties programa (srauto ženklai) yra paduodama į skaitytuvo (leksinė analizatoriaus), kuris konvertuoja jį į žetonų sraute.
  • Analizatorius (analizatorius) statant vieną abstrakčią sintaksę medį.
  • Semantinis analizatorius suyra semantinę informaciją ir patikrina medžio mazgų klaidų. Kaip rezultatas, pastatytas semantinį diagrama - abstrakčios sintaksės medis su papildomomis savybėmis ir nustatytomis nuorodomis.
  • Tarpinis kodas generatorius sukuria struktūrinė schema (kortežai yra suskirstyti į pagrindinių blokų).
  • Mašina nepriklausoma kodas optimizavimo atlieka tiek vietinio (per bazinio įrenginio) ir pasaulio (visiems blokai) optimizavimas esmės likusį per kasdienybe. Sumažina perteklinis kodas ir supaprastina skaičiavimus. Rezultatas yra modifikuotas srautas grafikas.
  • Generatorius jungiasi tikslinė kodas pagrindinius blokus į tiesiaeigiu perdavimo kontrolės kodu, sukurti objekto failą Assembler virtualius registrus (galbūt neveiksmingos).
  • Mašina priklauso optimizavimo, tiltelis, paskirsto atmintį tarp registrų ir daro planavimo grupėmis. Ji atlieka konversijos programą Asemblerio kalba šiuo surinkimas su gera naudojimo pipelining.

Be to, klaidų aptikimo posistemio vadybininkas ir simbolis lenteles.

Leksinė analizė (skenavimo)

Skaitytuvas paverčia upelio ištakų simbolius į žetonų, pašalinti tarpus, komentarų ir plėsti makrokomandų srautą.

Skaitytuvai dažnai susiduria su problemomis, pavyzdžiui, ar ne atsižvelgti į bylą, paraštes, eilučių ir įterptųjų komentarus.

Klaidos, kurios gali atsirasti skenavimo metu, vadinamas leksikos ir apima:

  • simbolių, kurie yra ne abėcėlės;
  • perteklius iš simbolių žodį ar eilutės numeris;
  • nėra uždara ženklas ar eilutė pažodžiui;
  • pabaiga failą komentarą.

Apdorojant (analizė)

Apdoroklis paverčia žetonų seka į abstraktų sintaksės medžio. Kiekvienas medžio mazgas yra saugomi kaip objektą su nurodytais laukų, iš kurių daugelis yra patys medžių mazgai. Šiuo metu nėra jokių ciklų. Kai kuriate analizatorius yra būtina atkreipti dėmesį į sudėtingumo gramatikos (LL ar LR) lygiu ir išsiaiškinti, ar yra kokių nors taisyklės nuorodiniame. Kai kalbas reikalauja semantinę analizę.

rasti šiame etape Klaidos vadinami sintaksė. Pavyzdžiui:

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

semantinė analizė

Per semantinės analizės patikrinti taisyklių ir susieti dalių analiz s medis leistinumą (todėl atskaitos vardus įterpiant operaciją netiesioginiams tipo konversijos, ir D. pan.) Formavimo semantinį grafiką.

Akivaizdu, kad priimtinumo taisyklių įvairiose skirtingomis kalbomis rinkinį. Jei kaupia Java-kaip kalbos, kompiliatoriai galite rasti:

  • kelių kintamųjų deklaravimas jos taikymo sritį;
  • nuoroda į kintamąjį prieš jo deklaracija;
  • Nuorodos į nedeklaruota pavadinimas;
  • pažeidimas patentinių teisių;
  • Pernelyg didelė arba nepakankama skaičius argumentus metodas skambinti;
  • tipo neatitikimas.

karta

Tarpinis kodas karta gamina srauto diagramą, sudarytą iš tuples, sugrupuotus į pagrindinius blokus.

kodas karta gamina tikrą mašininį kodą. Be tradicinių sudarytojų už RISC mašinoms ant pirmojo žingsnio, jums sukurti su begalinį skaičių virtualių registrų montuotojo. Dėl CISC mašinoms tikriausiai nebus.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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