TölvurForritun

Þýðandi er ... Tegundir þýðenda. Umbreyta og þýða forritið

Forrit, eins og fólk, krefjast þýðanda eða þýðanda að þýða frá einu tungumáli til annars.

Grunnhugtök

Forritið er ljóðræn framsetning útreikninga: i → P → P (i). Túlkurinn er forrit sem fær inntak P og sum inntaksgögn x. Það gerir P á x: I (P, x) = P (x). Sú staðreynd að ein þýða þýðandi er fær um að framkvæma allar mögulegar áætlanir (sem geta verið fulltrúar í formlegu kerfinu) er mjög djúpt og verulegt uppgötvun Turing.

Gjörvi er túlkur af forritum á vélmálinu. Það er yfirleitt of dýrt að skrifa túlkar fyrir háttsett tungumál, þannig að þeir eru þýddar í form sem er auðveldara að túlka.

Sumar tegundir þýðenda hafa mjög skrýtnar nöfn:

  • Assembler þýðir forrit í assembler í vél tungumál.
  • Samanþjóninn þýðir frá háttsettum tungumálum á tungumál á lægra stigi.

Þýðandi er forrit sem samþykkir forrit á sumum tungumálum S sem inntak og framleiðir forrit í T þannig að þau hafi bæði sömu merkingarfræði: P → X → Q. Það er, ∀x. P (x) = Q (x).

Ef þú þýðir allt forritið í eitthvað sem er túlkað, þá kallast þetta samantekt fyrir framkvæmd, eða AOT-samantekt. AOT samhæfingar er hægt að nota í röð, seinni sem er oft samsettur, til dæmis:

Heimild kóða → Samanburður (þýðandi) → Samþjöppunarkóði → Samstæða (þýðandi) → Vélkóði → CPU (túlkur).

Óákveðinn greinir í ensku online eða dynamic samantekt á sér stað ef hluti af forritinu er þýtt þegar aðrir samsettir hlutar eru framkvæmdar. JIT-þýðendur muna hvað þeir hafa gert, svo sem ekki að endurtaka kóðann aftur og aftur. Þeir geta jafnvel búið til aðlögunarhæf samantekt og endurmyndun, byggt á hegðun afturkreistingur umhverfisins.

Mörg tungumál leyfa þér að framkvæma kóða í þýðingu og safna nýjan kóða við afturkreistinguna.

Stig af þýðingu

Þýðingin samanstendur af stigum greiningar og myndunar:

Upprunakóði → Greiningartæki → Hugmyndafræði → Rafall (hljóðgervill) → Markkóði.

Þetta er vegna eftirfarandi ástæðna:

  • Öll önnur aðferð er ekki viðeigandi. Orðablaðið þýðir einfaldlega ekki.
  • Góð verkfræði lausn: Ef þú þarft að skrifa þýðendur fyrir M frummál og N miða tungumál, þú þarft að skrifa aðeins M + N einföld forrit (semicompilers), ekki M × N flókið (fullur þýðandi).

Engu að síður er hugmyndafræðin í reynd mjög sjaldan nægilega tjáningarmikil og öflug til að ná til allra hugsanlegra og miðlægra tungumála. Þótt sumir þeirra gætu komið nálægt þessu.

Real compilers fara í gegnum margar stig. Þegar þú býrð til eigin þýðanda þarftu ekki að endurtaka öll vinna sem fólk hefur þegar gert þegar þú býrð til skoðanir og rafala. Þú getur þýtt tungumálið þitt beint í JavaScript eða C og notað núverandi JavaScript-vél og C-þýðendur til að gera restina. Þú getur einnig notað núverandi millistig og sýndarvélar.

Skrá yfir þýðanda

Þýðandi er forrit eða tæknibúnaður þar sem þrjú tungumál taka þátt: uppspretta, miða og undirstöðu. Þeir geta verið skrifaðir í T-forminu, setjið uppspretta til vinstri, markið til hægri, og grunnurinn hér að neðan.

Það eru þrjár gerðir af þýðendum:

  • Þýðandi er sjálfstætt þýðandi ef upprunalistinn samsvarar grunnþáttum.
  • Samanþjónninn, sem markhópur er jöfn grunnmálinu, heitir sjálfstætt heimilisfastur.
  • Þýðandi er kross-þýðandi ef hann hefur annað markmál og grunn tungumál.

Af hverju er þetta mikilvægt?

Jafnvel ef þú gerir aldrei alvöru þýðanda er gott að vita um tækni þess að búa til hana, því að hugtökin sem notuð eru fyrir þetta eru notuð alls staðar, til dæmis í:

  • Formatting texta;
  • Fyrirspurnir á gagnagrunna;
  • Extended tölvu arkitektúr;
  • Almennar hagræðingarvandamál;
  • Grafísk tengi;
  • Scripting tungumál;
  • Stjórnendur;
  • Raunverulegur vélar;
  • Vél þýðingar.

Að auki þarftu að fara í gegnum sömu skref og þegar þú skrifar þýðanda ef þú vilt skrifa forvinnslufólk, byggingameistari, hleðslutæki, debuggers eða profilers.

Þú getur líka lært hvernig á að skrifa forrit betur, þar sem að búa til þýðanda fyrir tungumál þýðir betri skilningur á næmi og tvíræðni. Að læra almennar meginreglur þýðinga gerir einnig mögulegt að verða góður tungumálahönnuður. Er það svo mikilvægt, hversu mikil er tungumálið, ef það er ekki hægt að átta sig á áhrifaríkan hátt?

Alhliða tækni

Samskiptatækni nær yfir mörg mismunandi sviðum tölvunarfræði:

  • Formlegt málfræði: Málfræði, greining, computability;
  • Tölva arkitektúr: kennslu setur, RISC eða CISC, leiðslum, kjarna, klukka hringrás osfrv.
  • Hugtök fyrir forritunarmál: til dæmis raðstýring, skilyrt framkvæmd, endurtekning, endurtekningur, hagnýtur niðurbrot, mát, samstillingar, metaprogramming, umfang, fastar, undirgerðir, sniðmát, framleiðslutegund, frumgerð, athugasemdir, þræði, monads, pósthólf, eftirnafn , Wildcards, reglulegar segðir, viðskiptabundin minni, arfleifð, fjölbrigði, breytileg stilling osfrv.
  • Útdráttur og sýndarvélar;
  • Reiknirit og gagnauppbygging: regluleg tjáning, parsing algrím, grafík algrím, dynamic forritun, nám;
  • Forritunarmál: setningafræði, merkingartækni (truflanir og dynamic), stuðningur við paradigma (uppbygging, OOP, hagnýt, rökrétt, stafla, samhliða, metaprogramming);
  • Hugbúnaðursköpun (þýðendur, að jafnaði, stór og flókin): staðsetning, flýtiminni, íhlutun, API-tengi, endurnotkun, samstilling.

Hanna þýðanda

Sum vandamál sem koma upp þegar þú ert að þróa alvöru þýðanda:

  • Vandamál með upprunalegu tungumálið. Er auðvelt að setja saman það? Er fyrirframvinnari? Hvernig eru gerðirnar meðhöndlaðar? Eru bókasöfn?
  • Flokkun þýðanda fer: einn eða multi-pass?
  • Hversu óskað hagræðingu. Fljótleg og óhrein þýðing á forritinu með litlum eða engum hagræðingu getur verið eðlilegt. Óhófleg hagræðing mun hægja á þýðanda, en besta kóðinn við afturkreistingur gæti verið þess virði.
  • Nauðsynlegt villa greiningu hlutfall. Getur þýðandinn bara hætt við fyrstu villa? Hvenær ætti hann að hætta? Treystir þú þýðanda til að leiðrétta villur?
  • Framboð verkfæra. Ef upprunalistinn er ekki mjög lítill er skannarinn og greiningartækið nauðsynlegt. Það eru líka rafala af kóða rafala, en þeir eru ekki svo algengar.
  • Gerð miða kóða fyrir kynslóð. Þú ættir að velja úr hreinu, auknu eða raunverulegu vélarkóða. Eða skrifaðu bara inntak sem skapar vinsæl millistig, svo sem LLVM, RTL eða JVM. Eða gerðu þýðingu frá upptökum að frumkóða í C eða JavaScript.
  • Sniðin á markskóðanum. Þú getur valið samsetningar tungumál, flytjanlegur vél númer, vél númer af minni mynd.
  • Perenatselivanie. Með fullt af rafala er gott að hafa sameiginlega inntakshluta. Af sömu ástæðu er betra að hafa einn rafall fyrir marga inntakshluta.

Compiler Architecture: Hluti

Þetta eru helstu hagnýtur þættir þýðandans sem býr til vélkóða (ef framleiðsla forritið er C forrit eða sýndarvél, þá er ekki þörf á mörgum skrefum):

  • Innsláttaráætlunin (straum af skilti) fer inn í skannann (lexical analyzer), sem breytir því í straum af táknum.
  • Parser (parser) byggir á abstrakt setningafræði frá þeim.
  • Semantic greiningartækið niðurbrot merkingarupplýsinga og stöðva hnúður trésins fyrir villur. Þar af leiðandi er merkingartækni byggð - abstrakt setningafræði tré með viðbótar eiginleika og uppsettum tilvísunum.
  • Millistigamælirinn byggir flæðitegund (hólf eru flokkuð í aðalblokka).
  • Vélin óháður kóða hagræðingurinn framkvæmir bæði staðbundna (innan grunnhólfsins) og alþjóðlegt (fyrir alla blokkir) hagræðingu, í grundvallaratriðum eftir innan undirrennslanna. Dregur úr óþarfa kóða og einfaldar útreikninga. Niðurstaðan er breytt flæði graf.
  • Markmiðið er að tengja grunnstöðvarnar við beinlínuskóðann með stjórnfærslunni, búa til hlutaskrá í samsettri tölvu með sýndarskrám (hugsanlega árangurslaus).
  • Vélin óháður hlekkur optimizer úthlutar minni milli skrár og tímaáætlanir. Breytir forritinu í samsetningarbúnað til alvöru samsetningarbúnaðar með góðri notkun á leiðslum.

Að auki eru villuskoðunar undirkerfi og táknmyndastjórinn notaður.

Lexical greining (skönnun)

Skannarinn breytir straumi stafanna í upprunakóðanum í straum af táknum, fjarlægir rými, athugasemdir og stækkandi fjölvi.

Skannar lenda oft í vandræðum eins og að samþykkja eða taka ekki tillit til skrána, undirliða, lína strauma og hreiður athugasemdir.

Villur sem geta komið fram meðan á skönnun stendur eru kallaðir lexical og innihalda:

  • Stafir sem eru ekki í stafrófinu;
  • Yfirferð fjölda stafa í orði eða strengi;
  • Ekki lokað stafur eða strengur bókstaflegur;
  • Í lok skráarinnar í athugasemdinni.

Setningafræði greining (flokka)

Parser breytir röð táknmynda í abstrakt setningafræði tré. Hver tré hnút er vistuð sem hlut með heitir sviðum, en margir þeirra eru sjálfir hnúður trésins. Það eru engar hringrásir á þessu stigi. Þegar þú býrð til flokka, ættir þú að borga eftirtekt til hversu flókið málfræði er (LL eða LR) og til að finna út hvort einhverjar reglur séu til að fjarlægja tvíræðni. Nokkur tungumál þurfa ekki merkingartækni.

Villur sem upp koma á þessu stigi eru kallaðir setningafræði villur. Til dæmis:

  • K = 5 * (7 - y;
  • J = / 5;
  • 56 = x * 4.

Sálfræðileg greining

Við merkingargreininguna er nauðsynlegt að athuga reglur um viðurlög og binda hlutum setningafræðitrésins (leyfa tilvísanir nöfn, setja inn starfsemi fyrir óbeinan gerð af tegundum osfrv.) Til að mynda merkingartegund.

Augljóslega eru settar reglur um viðurkenningar fyrir mismunandi tungumál ólík. Ef japönsku tungumál eru tekin saman, geta þýðendur fundið:

  • Mörg yfirlýsingar breytu innan gildissviðs hennar;
  • Tilvísun til breytu fyrir yfirlýsingu þess;
  • Tilvísanir í ótvírætt nafn;
  • Brot á reglum um aðgengi;
  • Of stór eða ófullnægjandi fjöldi röksemda þegar hringt er í aðferðina;
  • Tegund misræmi.

Kynslóð

The kynslóð af millistig kóða framleiðir flæði línur samanstendur af túpum flokkuð í grunn blokkir.

Kóði kynslóð framleiðir alvöru vél númer. Í hefðbundnum þýðendum fyrir RISC-vélar, skapar fyrsta áfanga samsetningarþjóninn með óendanlega fjölda sýndarskrár. Fyrir CISC vélar mun þetta líklega ekki gerast.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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