OrdenagailuakProgramazioa

Esatariak - da ... konpiladoreak motak. Bihurtu eta difusio programak

Programak, baita pertsonei hizkuntza batetik bestera itzultzeko interprete edo itzultzaile behar.

oinarrizko kontzeptuak

Programa kalkuluak irudikapen linguistiko bat da: i → P → P (i). interprete eta hori sarrera programa P eta sarrera x batzuei emandako programa bat da. burutzen P x zuen: I (P, x) = P (x). Izan ere, ez dela itzultzaile bakarra dago posible programa guztiak (zein sistema formal ordezkatuta daiteke) egiteko gai oso sakon eta esanguratsua aurkikuntza Turing bat da.

Prozesadorearen makina hizkuntzan programak interprete bat da. Oro har garestiak goi-mailako hizkuntzetan interpretatzaileak idazteko, beraz, itzultzea formulario bat da, errazago interpretatzen sartu dute.

Itzultzaile mota batzuk oso arraroa izenak dituzte:

  • mihiztatze itzultzen muntaia hizkuntza programak makina hizkuntzara.
  • konpilatzailea goi-mailako hizkuntza txikiagoa Hizkuntza bat itzultzen.

P → X → G: Hau da, ∀x: - esatariak hori sarrera daturik gisa programa T programa modu bat, hala biek semantika bera izan dela ere hizkuntza S batzuetan irauten du, eta sortzen duen programa bat da. P (x) = Q (x).

emititzeko programa osoa zerbait interpretagarritzat sartu bada, gauzatzea, edo AOT compilation aurretik bilduma bat deitzen da. AOT konpiladorea serie erabil daitezke, eta horietatik bigarrenak da askotan mihiztatze, adibidez:

Iturburu kodea konpiladorea → (itzultzailea) → → muntaia kodea mihiztatze (konpiladorea) → → CPU makina-kodea (interpretatzailea).

Eragiketa-edo dinamikoa compilation gertatzen programa emititzen ari bada, noiz aurrez konpilatutako beste zati exekutatu. JIT-konpiladoreak gogoratu zer dagoeneko egin dute, beraz, ez iturburu-kodea, behin eta berriro errepikatu. are dute moldatzaile bilketa eta bilduma oinarritutako programa exekuzio ingurunearen portaera eragin dezake.

Hizkuntza asko uzten kodea exekutatu konpilatzerakoan eta konpilazio kode berria exekuzio.

itzulpen etapa

Broadcast aztertu eta sintetizatzen urratsak ditu:

Iturburu kodea analizatzaile → → → kontzeptuala ordezkaritza sorgailu (sintetizadorea) → Xede kodea.

Hau da arrazoi horiek direla:

  • Beste edozein metodoa ez da egokia. Word itzulpen besterik ez du funtzionatzen.
  • Good ingeniaritza irtenbide: M eta N-iturri hizkuntzetan norakoak bakarra M + N sinple programak (polukompilyatorov) zertan idatzi beharrean M × N konplexuak baino itzultzaile (itzultzaileak, guztira) idatzi nahi baduzu.

Hala ere, praktikan, a gutxitan oso adierazkorra da nahikoa eta indartsua da nahikoa ikuspegi kontzeptuala conceivable iturria eta xede hizkuntzen guztietan estaltzeko. Zenbait honetara gerturatu ahal izan ziren bitartean.

Real konpiladoreak fase asko pasatzen. Zure konpiladorea propioak sortzeko ez du gogor lan guztiak, jende irudikapen eta sorgailu sortu nahi egin errepikatu behar. Hizkuntza itzuli ahal izango duzu zuzenean Javascript edo C eta lehendik Javascript-motorra eta C konpiladorea gainerako egiteko aprobetxatu. Ere erabili dezakezu, lehendik dagoen tarteko errepresentazio eta makina birtualak.

errekorra itzultzaile

iturri, helmuga eta oinarri: - esatariak programa edo hardware, eta bertan parte hartzen duten hiru hizkuntza da. T-forma izango dute idatzi daiteke, jatorrizko ezker, eskuin eta xede base azpian jarrita.

Badira hiru konpiladoreak mota:

  • Esatariak - samokompilyator da dagokion badu sorburu oinarrizko hizkuntza den.
  • Compiler hizkuntza xede dituen oinarri izeneko samorezidentnym da.
  • Esatariak - mugaz konpiladore bat, berak zuzenduta baldin eta oinarrizko hainbat hizkuntzatan.

Zergatik da garrantzitsua?

Nahiz eta inoiz ez egin, benetako konpiladore bat, bere sorkuntzaren teknologia ezagutza ona, horretarako erabiltzen kontzeptua asko erabiltzen dira, zeren, adibidez:

  • formatuarekin testua;
  • hizkuntza kontsultak base da;
  • aurreratu ordenagailu arkitektura;
  • orokortua optimizazioa arazoak;
  • GUIs;
  • script hizkuntzak:
  • kontrolagailu;
  • makina birtualak;
  • Makina itzulpena.

Gainera, preprocessors, lokailuak, loaders, debuggers eta Profilagailuak idatzi nahi baduzu, urrats bera denean konpiladorea idazteko bidez joan behar duzu.

ere ikasten dezakezu programa hobeto nola idatzi, hizkuntzaren alde itzultzailea sortzea nahastu haiek eta anbiguotasunak hobeto ulertzeko esan zuenetik. batzean printzipio orokorren azterketa ere ahalbidetzen diseinatzaile hizkuntza ona bihurtu duzu. Beraz duela nola aldapatsuak hizkuntzaren ezin da ezarri bada eraginkortasunez axola?

teknologia integrala

konpiladorea teknologia informatikako hainbat arlo hartzen ditu:

  • hizkuntzaren teoria formal: gramatika, parsing, konputabilitatea;
  • Ordenagailuaren arkitektura:. instrukzioa multzo, RISC edo CISC, segmentatuetan prozesatzeko core erlojuaren zikloak, eta abar;
  • programazio hizkuntza kontzeptu, adibidez, sekuentzia kontrol bat, baldintzapeko exekuzioa, iterazio, errekurtsio, deskonposizio funtzionala, modularitatea, sinkronizazioa, meta-programazioa, esparrua, etengabeko azpi-motak, txantiloiak, irteera mota, prototipoak, oharpenak, fluxua, monads, postontzi eszenikoen, jarraitu , komodinak, adierazpen erregularra, transakzio memoria, herentzia, polimorfismo, modua ezarpenak, eta abar eta abar..
  • Hizkuntza abstraktua eta makina birtualak;
  • algoritmoak eta datuen egitura: espresio erregular, analizatzean algoritmoak, grafikoak algoritmoak, programazio dinamikoa, prestakuntza;
  • programazio hizkuntzak: sintaxia, semantika (estatikoa eta dinamikoa), laguntza paradigma (egitura, OOP, funtzionala, logikoa, pila, paralelismoa, meta-programazioa);
  • sorkuntza software (konpiladoreak, normalean handiak eta konplexuak): lokalizazio, katxeak, componentize, API-interfazeak, berrerabiltzea, sinkronizazioa.

konpiladorea diseinua

benetako itzultzaile garapenean arazo batzuk:

  • sorburu-hizkuntza arazoak. Da erraza biltzeko? Ba al dago preprocessor bat? Zer moduz motak? Ba al dago liburutegia?
  • konpiladorea gaindituen taldekatzea: bakar edo anitzeko modua?
  • Optimizazio-maila nahi den. Azkar eta kutsaturik difusio optimizazioa gutxi edo ez programak normal izan daiteke. Baino gehiago-optimizazioa konpiladorea moteldu egingo da, baina exekuzio kode hobea merezi izan daitezke.
  • Beharrezko error detektatzeko-maila. Ezin itzultzaile bakarrik lehen error gelditzeko? Noiz gelditu behar da? konpiladorea error zuzenketa fidatu behar den ala ez?
  • Tresna erabilgarritasuna. jatorrizko hizkuntza ez dela oso txikia bada, eskaner eta sorgailu analizatzaile beharrezkoak dira. Badira ere generadoreak, kodea generadoreak, baina ez dira hain ohikoa.
  • Helburu kode mota sortuko da. Be hutsa osatu edo birtual makina-kodea hautatu. Edo, besterik gabe idatzi sarrera zati bat, hala LLVM, RTL, edo JVM herri gisa tarteko errepresentazio bat sortzen dela. Edo egin jatorrizkoaren itzulpena iturria C edo JavaScript kodean.
  • Helburu kodearen formatua. Aukera dezakezu muntaia hizkuntza bat, makina-kodea eramangarri bat, makina-kodea memoria irudia.
  • Retargeting. Noiz sorgailu multzo ona da hartunea zati komun bat izatea. Hori dela-eta, hobe da, sorgailu bat toki askotan sarrera for izatea.

konpiladorea Arkitektura: osagaiak

Hauek jatorrizko kodea sortzen duen (irteerako programa C edo makina birtual bat programa bat bada, behar ez faseak hainbeste) konpiladorea baten osagai funtzional nagusiak hauek dira:

  • Sarrerako programa (fluxua markak) dago eskanerra (analizatzaile lexikoak), eta horrek bihurtzen token korronte bat sartu elikatzen.
  • Parser (parser) Bat abstraktua sintaxia zuhaitza eraikitzen.
  • Semantikoa analizatzaile informazio semantikoa desegin eta zuhaitz erroreak nodoak egiaztatzen du. Ondorioz, eraiki semantikoa Grafiko - abstraktua sintaxia zuhaitz propietate osagarriak eta ezarritako loturak.
  • Bitarteko kodea generator fluxua grafiko bat eraikitzen (tuplen ari bloke nagusitan sailkatu).
  • Makina-independentea kodea optimizer bai tokiko (oinarrian barruan) eta globala (bloke guztiei) optimizazioa funtsean errutina barruan gelditzen ditu. erredundantea kodea murrizten eta kalkuluak errazten du. Emaitza a eraldatutako fluxua grafikoan da.
  • Generator lotzen helburu kodea oinarrizko blokeak lerrozuzen transmisioa kontrol kode bat sartu, objektu fitxategia mihiztatze erregistro birtual bat (ziurrenik eraginkorra) sortzeko.
  • Makina-menpeko optimizer, estekatzailearen erregistroen arteko memoria bideratzen eta taldeen plangintza egiten du. bihurtze muntaia hizkuntzan programa egiten du hau muntaia paralelismoa erabilera onarekin berean.

Horrez gain, akats detektatzeko azpisistemaren kudeatzailea eta sinbolo taulak erabiltzea.

Lexikoak analisia (ekortze)

Eskaner bihurtzen korronte iturria pertsonaiak token, kendu zuriune, iruzkinak eta zabalduz makro-korronte batean.

Eskanerrak askotan arazoak, hala nola ala ez da kasua, marjinak, lerro-jauziak eta iruzkinak kapsulatutako kontuan hartu bezain topo.

ahal duten eskaneatze gertatzen Akatsak izeneko lexiko eta, besteak beste:

  • ez diren alfabetoaren pertsonaiak;
  • Hitz edo lerro karaktere kopurua gorakoa;
  • Ez kartel bat itxia edo kate bat literal;
  • iruzkin fitxategi amaiera.

Analizatzean (parsing)

analizatzaileak token sekuentzia bihurtzen abstraktu sintaxia zuhaitz batean. zuhaitzean nodo bakoitzak eremuak izendatzen, horietako asko dira beren burua zuhaitz nodo batera objektu gisa gordetzen da. Etapa honetan daude zikloak ez. Noiz sortu duzu parser bat beharrezkoa da arreta gramatika (LL edo LR) konplexutasun-mailaren eta ez ote dira edozein arau argipen jakiteko. Hizkuntza batzuek ez analisi semantikoa eskatzen.

etapa honetan aurki Akatsak sintaxia deitzen dira. Adibidez:

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

analisi semantikoa

zehar analisi semantikoa analisi zuhaitza arauak eta elkartua zatien permissibility egiaztatzeko (erreferentzia izenak ahalbidetuz eragiketa txertatzeak inplizituki mota bihurketak egiteko, eta abar. D.) grafikoan semantikoa eratzen da.

Jakina, beste hizkuntza ezberdinetan arauak onartzea multzoa. Java bezalako hizkuntzen konpilatu baduzu, konpiladoreak aurkitu daitezke:

  • anitz aldagai adierazpena bere esparrua barruan;
  • Bere adierazpena aurretik aldagai baten erreferentzia bat;
  • undeclared izenean erreferentziak;
  • patente eskubideak urratzea;
  • Metodo dei batean argumentu kopurua gehiegizko edo nahikoa;
  • mota ez dator.

belaunaldi

Bitarteko kodea belaunaldi fluxua grafikoan tuplen osatzen, oinarrizko blokeak sailka ekoizten.

kode belaunaldi benetako makina-kode bat sortzen du. lehenengo urratsa RISC-makinen konpiladoreak tradizionala, erregistro birtualen kopurua infinitua batera mihiztatze bat sortzen duzunean. CISC-makinak For ziurrenik ez zen gertatu.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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