ArvutidProgrammeerimine

Ringhääling - on ... Tüübid koostajad. Teisendada ja eetrisse programme

Programmid, nagu ka inimesi, tõlkida ühest keelest teise vaja tõlgi.

põhimõisteid

Programm on keeleliselt esitus arvutused: i → P → P (i). Tõlki on programm, mis juhitakse sisendi programmi P ja mõned sisendit x. See toimib kõige P x: I (P, x) = P (x). Asjaolu, et on olemas ainult üks tõlkija on võimeline kõiki võimalikke programme (mis võib olla esindatud formaalharidussüsteemis) on väga sügav ja märkimisväärne avastus Turing.

Protsessor on tõlk programmide masin keeles. Üldiselt liiga kallis kirjutada tõlkide kõrge taseme keelte, et nad tõlkida kujul, mis on lihtsam tõlgendada.

Teatavat liiki tõlkijad on väga kummaline nimed:

  • Kokkumonteerija tõlgib Assembly programmid masina keeles.
  • Kompilaator tõlgib kõrgetasemeline keele madalama keeles.

Ringhääling - on programm, mis võtab nii sisendandmed programmi mõnes keeles S ja toodab T programmi nii, et nad mõlemad on sama semantika: P → X → Q. See tähendab, et ∀x. P (x) = Q (x).

Kui eetrisse kogu programmi millekski tõlgendatavad, seda nimetatakse kogumik enne täitmist või AOT koostamist. AOT koostaja saab kasutada seeria millest viimane on sageli koostajale, näiteks:

Lähtekoodi koostaja → (tõlkija) → → koost kood koostajale (koostaja) → → CPU masin kood (tõlk).

Operational või dünaamilise koostamise ilmneb siis, kui telekanal, kui täidetakse teistes varem koostatud osa. JIT-koostajad mäleta, mida nad on juba teinud, et mitte korrata lähtekoodi uuesti ja uuesti. Nad võivad isegi toota adaptiivne koostamine ja recompilation põhineb käitumist programmi täitmise keskkonda.

Paljud keeled võimaldavad täita koodi kompileerimise ajal ja koostada uus kood käivitamisel.

tõlkimise etapis

Broadcast hõlmab järgmisi etappe analüüsides ja sünteesides:

Lähtekoodi analüsaatori → → → kontseptuaalse esindatuse generaatori (süntesaator) → Target koodi.

See on tingitud järgmistest põhjustest

  • Ükskõik milline muu meetod ei sobi. Word tõlge lihtsalt ei tööta.
  • Hea inseneri lahendus: kui soovite kirjutada tõlkijaid M ja N allikas keeles suunatud pea kirjutama ainult M + N lihtne programmid (polukompilyatorov) asemel M × N kompleksi (kokku tõlkijad).

Kuid praktikas, kontseptuaalne silmas väga harva väljendusrikas piisavalt ja piisavalt võimas, et katta kõiki mõeldavaid lähte- ja sihtkeele. Kuigi mõned suutsid jõudnud lähedale nimetatud.

Real koostajad läbida palju etappe. Kui luua oma koostaja ei pea kordama kogu raske töö, et inimesed on teinud, et luua esindused ja generaatorid. Saate tõlkida oma keel otse JavaScript või C ja kasutada olemasolevaid JavaScript mootori ja C kompilaator teha ülejäänu. Võite kasutada ka olemasoleva vahe esindatus ja virtuaalse masinaid.

rekord tõlkija

Ringhääling - on programm või riistvara, mis hõlmas kolme keelt: allikas, sihtkoha ja baasi. Neid saab kirjutatud T-kuju, asetades originaal vasakule, paremale ja eesmärk aluse allpool.

Seal on kolme tüüpi koostajad:

  • Ringhääling - on samokompilyator kui see vastab peamine allikas keel.
  • Tõlkija mis Sihtkeel algtaseme nimega samorezidentnym.
  • Ringhääling - rist-kompilaator, kui ta sihitud ja põhiliste eri keeltes.

Miks on see oluline?

Isegi kui sa ei tee kunagi tõeline koostaja, head teadmised tehnoloogiat oma loomise, sest mõiste, mida kasutatakse selleks kasutatakse laialdaselt, näiteks:

  • teksti vormindamise;
  • keele päringuid andmebaasidele;
  • arenenud arvuti arhitektuuri;
  • üldistatud optimeerimise probleemid;
  • GUI;
  • skriptimiskeeli;
  • kontrollerid;
  • virtuaalarvuteid;
  • Masintõlge.

Lisaks, kui soovite kirjutada eelprotsessorid ühendusirühmad, laadurid, debuggers ja profilers, peate minema läbi sama samme kirjutamisel koostaja.

Saate ka teada, kuidas kirjutada paremaid programme, kuna loomine tõlkija keeles tähendab paremat arusaamist selle keerukust ja vääritimõistmist. Uuring üldpõhimõtete ringhäälingu võimaldab teil saada hea disainer keeles. Nii see tähtis, kui järsku keeles, kui see ei ole võimalik tõhusalt rakendada?

terviklik tehnoloogia

kompilaator tehnoloogia katab erinevaid valdkondi, infotehnoloogia:

  • ametliku teooria keel: grammatika, sõelumisel, computability;
  • arvutiarhitektuuri: instruktsioonikogumikega, RISC või CISC, konveierrežiimis töötlemise tuum kella tsüklit jne.;
  • mõisted programmeerimiskeeli, näiteks teostades järjestuse kontroll, tingimusliku täitmise iteratsiooni, rekursioon, funktsionaalne lagunemise moodulitest, sünkroonimise, meta-programmeerimine, ulatuse, pidev alaliigid, mallid, väljundiga, prototüübid, annotatsioone, voolu, monaadidest, postkastid, jätkake , metamärke, regulaaravaldise tehingualast mälu, pärimise, polümorfismi, režiimi seaded ja nii edasi. jne.;
  • abstraktne keelte ja virtuaalsete masinate;
  • algoritmid ja andmestruktuurid: regulaaravaldiste, sõelumisel algoritme, graafika algoritmide dünaamiline programmeerimine, koolitus;
  • programmeerimiskeelte süntaksi, semantika (staatiline ja dünaamiline), toetus paradigmad (struktuurne, OOP, funktsionaalne, loogiline, korstnat, parallelism, meta-programmeerimine);
  • loomise tarkvara (koostajad, tavaliselt suur ja keeruline): lokaliseerimine, puhverdamine, componentize, API-liideste, korduskasutuse, sünkroniseerimine.

koostaja disain

Mõned probleemid arengus tõeline tõlkija:

  • Probleemid algkeele. Kas see lihtne kompileerida? Kas eeltöötluse? Kuidas liigid? Kas raamatukogu?
  • Rühmitus koostaja läbib: ühe või mitme viis?
  • Astmest optimeerimise soovida. Kiire ja roojane eetrisse programme vähe või üldse mitte optimeerimine võib olla normaalne. Üle-optimeerimine koostaja aeglustub, kuid parem koodi käivitamisel võib olla seda väärt.
  • Nõutava vea avastamise. Kas tõlkija lihtsalt peatu esimene vea? Kui see peaks lõpetama? Kas usaldada koostaja veaparandus?
  • Kättesaadavus tööriistu. Kui algkeel ei ole väga väike, skanneri ja generaator analüsaatorid peavad. On ka generaatorid, koodigeneraatorite, kuid nad ei ole nii levinud.
  • Liik siht koodi genereerida. Valitakse puhas täiendada või virtuaalse masina koodi. Või lihtsalt kirjutada sisenemise osa, mis loob populaarne vahe kujutis, näiteks LLVM, RTL, või JVM. Või teha tõlge originaali lähtekoodi C või JavaScripti.
  • Vorming sihtmärgi kood. Saate valida assembly, kaasaskantav masin koodi, masina koodi mälu pilt.
  • Taassihtimine. Kui komplekt generaatorid on hea omada ühist sisselaskeosaga. Sel põhjusel on parem, et üks generaator sisend paljud osad.

koostaja Arhitektuur: osad

Need on peamised funktsionaalsed komponendid koostaja mis genereerib native koodi (kui väljund programm on programmi C või virtuaalse masina, sa ei pea nii palju etappe):

  • Sisendi programmi (flow kaubamärkide) juhitakse skanneri (leksikaalanalüsaatoriga), mis muundab selle voolus märgid.
  • Parser (parser) ehitamise üks abstraktne süntaks puu.
  • Semantiline analüsaator laguneb semantilise informatsiooni ja kontrollib puu sõlmede vigu. Selle tulemusena ehitatud semantiline graafik - abstraktne süntaks puu täiendavaid omadusi ja loonud sidemeid.
  • Intermediate koodigeneraatorist ehitab Voograafis (tuples grupeeritakse põhilise).
  • Masinsőltumatud kood optimeerija teostab nii kohalikke (sees põhiseade) ja globaalse (kõigile plokid) optimeerimise põhimõtteliselt jäädes rutiin. Vähendab koondatud koodi ja lihtsustab arvutamist. Tulemuseks on modifitseeritud Voograafis.
  • Generaator seondub sihtmärk-koodi põhilised plokid sirgjoonelist edastamise koodi, luues sihtfailist koostajale virtuaalse registrid (tõenäoliselt ebaefektiivne).
  • Machine sõltuva optimeerija, linker eraldab mälu vahel registrite ja teeb planeerimine meeskonnad. Teeb ümberkorraldamise kava kokkupanek keeles sel koost hea kasutamise torujuhtmete.

Lisaks kasutamist vea avastamise allsüsteemi juht ja sümbol tabelid.

Sõnavaraliste analüüs (skaneeriva)

Skanner muundab voogesituse allikas tähemärki voogu märgid, eemaldades tühik, kommentaarid ja laienev makrosid.

Skannerid sageli probleeme, näiteks kas või mitte võtta arvesse juhul, marginaalid, reavahetused ja varjatud kommenteerida.

Vead, mis võivad tekkida skaneerimine, mida nimetatakse leksikaalse ja sisaldavad:

  • märgid, mis ei ole tähestik
  • ületavad märkide arvu sõna või rida;
  • ei suletud märk või stringiliteraal;
  • faililõpp kommentaari.

Sõelumisel (sõelumisel)

Parser teisendab jada märgid arvesse abstraktne süntaks puu. Iga sõlme puu salvestatakse objekti nimega väljad, millest paljud on ise puu sõlmede. Praeguses etapis ei ole tsüklit. Kui loote parser on vaja pöörata tähelepanu tase keerukust grammatika (LL või LR) ja teada saada, kas on mingeid reegleid täpsustuse. Mõned keeled ei nõua semantiline analüüs.

Leitud vead selles etapis kutsutakse süntaks. Näiteks:

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

semantiline analüüs

Ajal semantiline analüüs , et kontrollida lubatavuse eeskirju ja assotsieerunud osad sõeluda puu (võimaldades viide nimed lisades operatsiooni kaudsete tüüp tulemusi, ja nii edasi. D.) moodustamiseks semantiline graafik.

Ilmselt komplekti vastuvõetavuse reegleid erinevates keeltes erinevad. Kui te kompileerida Java-nagu keeled, koostajad võib leida:

  • Mitme muutuja deklaratsiooni selle reguleerimisalasse;
  • viide muutuja enne selle vastuvõtmist;
  • viited nimi deklareerimata;
  • patendiõiguste rikkumisega;
  • liigne või ebapiisav mitmeid argumente meetod kõne;
  • tüüp sobimatus.

põlvkond

Intermediate kood põlvkonna toodab voolu graafik koosneb elemendist, mis jagatakse põhilised plokid.

kood põlvkonna toodab tõeline masin koodi. Traditsioonilise tõlkijad RISC-masinaid esimene samm, loote koostajale lõpmatu arvu virtuaalsete registrites. Sest CISC-masinad ilmselt ei juhtu.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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