KombiyuutaradaBarnaamijyada

Idaacadda - waa ... Noocyada compilers. Beddelaan iyo barnaamijyada warbaahinta

Barnaamijyada, iyo sidoo kale dadka si ay u turjumaan ka mid luqad kale u baahan tahay turjumaan ama turjumaan.

fikradaha aasaasiga ah

Barnaamijka waxaa wakiil ah luqadda xisaabinta: i → P → P (i). turjubaan waa barnaamij kaas oo bixisey in barnaamijka la gelin ee P iyo qaar ka mid ah talooyin x. Waxay u qabata ee P x: I (P, x) = P (x). Xaqiiqada ah in uu jiro turjumaan mid kaliya awoodo gudashada dhammaan barnaamijyada ay suurtagal tahay (taas oo loo soo bandhigi karo nidaamka rasmiga ah) waa Turing a daahfurka aad u qoto dheer oo la taaban karo.

processor waa turjubaan ah barnaamijyada luqadda mishiinka. Guud ahaan aad qaali u qoro turjubaano luqado heer sare ah, si ay u turjumaan qaab ah in ay fududahay in la tarjumo.

qaar ka mid ah turjumaanada leeyihiin magacyo aad u la yaab:

  • ururiyaha u tarjumay barnaamijyada afka ururkaaga gelin luqadda mishiinka.
  • compiler u tarjumay luqadda heer-sare ah oo afka hoose.

Idaacadda - waa barnaamij qaadataa sida xogta aqbasho barnaamijka luqad qaar ka mid ah S iyo soo saarta barnaamij T sidan oo kale in labadooduba ay leeyihiin kelmedo isku ah: P → X → Q. Taasi waa, ∀x. P (x) = Q (x).

Haddii baahiyey barnaamijka oo dhan wax interpretable, waxa la yidhaahdaa waa isku duwidda xogta ka hor isku duwidda xogta dil, ama AOT. AOT compiler waxaa loo isticmaali karaa oo taxanahan, dambaysta ah kuwaas oo inta badan waa ururiyaha ah, tusaale ahaan:

The code source compiler → (turjumaan) → → shirka ururiyaha code (compiler) code → → mashiinka processor (turjumaan).

duwidda Hawleed ama firfircoon dhacdaa haddii barnaamijka la sii daayey, markii toogasho ay ka qayb kale oo horay u soo ururiyeen. JIT-compilers soo xusuusta wixii ay horay u sameeyeen si aanay u mar kale iyo mar kale ku celinayaa code isha. xataa waxay soo saari karaan isku duwidda xogta la qabsiga iyo recompilation ku salaysan dhaqanka ee deegaanka barnaamijka fulinta.

luqado badan u ogolaan in ay dilayso code waqtiga ururinta iyo isku ururiso code cusub at Runtime.

stage turjumaad

Broadcast ka kooban yahay tallaabooyinka la falanqeeyo oo synthesizing:

analyzer The code source → → → matoor matalaad fikradeed (synthesizer) → code Target.

Tan waxa u sabab sababahan:

  • hab kasta oo kale oo ma ku haboon. turjumaad Word si fudud uma shaqeeyo.
  • xal injineernimada Good: haddii aad rabto in aad ku qortaa turjubaano luqado il M iyo N beegsaday baahan qoro oo keliya barnaamijyada fudud M + N (polukompilyatorov) halkii ay adag M × N (guud ee turjubaanada).

Si kastaba ha ahaatee, ku dhaqanka, aragtida fikradeed ee aad u dhif dhegeysiga ku filan oo awood ku filan si ay u daboosho il iyo bartilmaameedka luqadaha kasta hubaal. Iyadoo qaar ka mid ah ay ahaayeen in ay yimaadaan meel u dhow this awood.

compilers Real dhex maraya marxalado badan. Marka la abuurayo aad compiler u gaar ah ma u baahan tahay inuu ku soo celiyo dhammaan shaqada adag oo dadka ay u sameeyeen si ay u abuuraan Wakiilada iyo matoorrada. Waxaad si toos ah u turjumaan afkaaga in JavaScript ama C oo ay ka faa'idaystaan jira JavaScript-engine iyo compiler C inay sameeyaan inteeda kale ka. Waxaad kaloo isticmaali kartaa wakiil jira dhexe iyo mashiinada dalwaddii.

record turjumaan

Idaacadda - waa barnaamij ama hardware, kaas oo ku lug saddex luqadood: isha, Ahaado iyo saldhigga. Waxay in a T-qaabka loo qori karaa, gelinayn bidix asalka ah, xaq iyo bartilmaameedka salka hoose.

Waxaa jira saddex nooc oo ah compilers:

  • Idaacadda - waa samokompilyator haddii ay u dhigantaa afka ilaha aasaasiga ah.
  • Compiler oo bar afka waa gundhigga, loo yaqaan samorezidentnym ah.
  • Idaacadda - a cross-compiler, haddii uu beegsaday iyo luqadaha kala duwan ee aasaasiga ah.

Waa maxay sababta ay tani muhiim u tahay?

Xitaa haddii aad marna ka dhigi compiler dhab ah, aqoon fiican of technology ee ay abuurka, sababtoo ah fikirka isticmaalay ujeedadaas hubkaas ayaa loo isticmaalaa, tusaale ahaan:

  • text formatting;
  • weydiimo luqadda si database-;
  • naqshadaha computer sare;
  • dhibaatooyinka ayna guud;
  • GUIs;
  • luqadaha scripting;
  • ilaaliyaal;
  • mashiinada dalwaddii,
  • turjumaad Machine.

Intaa waxaa dheer, haddii aad rabto in aad ku qortaa preprocessors, linkers, raraha, debuggers iyo profilers, waa in aad maraan tallaabooyin la mid ah sida marka qoraal compiler ah.

Waxa kale oo aad ku baran kartaa sida loo qoro barnaamijyada wanaagsan, tan iyo abuurista turjumaan afka ka dhigan tahay faham wanaagsan ee diiniga iyo mugdiga ay. Daraasadda ku saabsan mabaadi'da guud ee baahinta ayaa sidoo kale kuu ogolaanayaa inaad si ay u noqdaan afka naqshadeeye wanaagsan. Sidaas waa sidee sida uga yaacday ilaa afka haddii aan la fulin karaa?

technology oo dhamaystiran

technology compiler daboolayaa meelo badan oo kala duwan ee sayniska kombiyuutarka:

  • aragtida rasmiga ah ee luqadda, naxwaha, parsing, computability;
  • naqshadaha computer:. nooc edbinta, RISC ama CISC, wareegyada saacad core processing pipelined, iwm;
  • fikradaha luqadaha barnaamijyada, tusaale ahaan, fulinta gacanta ku gelayo, dil shuruud, siyaalaha, recursion, daatay functional, modularity, .Wadashaqayntaas, Meta-barnaamijyada, baaxadda, joogto ah-nooc hoosaadka, arrimo, nooca wax soo saarka, prototypes, qoritaan, socodka, monads, jiidho, sii , wildcards, hadal joogto ah, xusuusta transactional, dhaxalka, polymorphism, goobaha hab, iyo wixii la mid ah iwm..,
  • luqadaha aan la taaban karin iyo mashiinada dalwaddii,
  • algorithms iyo xogta dhismayaasha: tibaaxaha joogto ah, algorithms parsing, algorithms naqshadeynta, barnaamijyada firfircoon, tababarka,
  • luqadaha barnaamijyada: Saan, kelmedo (ma guurto ah oo firfircoon), noqday taageerada (dhismaha, oop, functional, macquul ah, xidhmooyin, is barbardhig, Meta-programming);
  • software abuurka (compilers, sida caadiga u weyn oo): deegaamaynta, caching, componentize, API-interfaces, dib-u-isticmaalka, .Wadashaqayntaas.

design compiler

Qaar ka mid ah dhibaatooyinka ay kala kulantay horumarinta turjumaan dhabta ah:

  • Dhibaatooyinka la xiriira luqadda isha. waa ay fududahay in ay u soo uruuriyaan? Ma jiraa preprocessor ah? Sidee jira noocyo ah? Ma jiraa maktabad?
  • Kooxaynta baas compiler: hal ama multi-jidka?
  • Degree of ayna la doonayo. barnaamijyada warbaahinta Fast iyo wasakh leh qaba ama wax yar ayna noqon kartaa mid caadi ah. compiler badan-ayna u dhigi doono, laakiin code wanaagsan at Runtime waxaa laga yaabaa in u qalantaa.
  • Heerka loo baahan yahay ee la ogaado qaladka. turjumaan kaliya joojin kartaa qaladka ugu horeysay? Marka waa in ay joojiyaan? Haddii aad ku kalsoon tahay saxo qaladka compiler ah?
  • helitaanka qalabka. Haddii afka asalka ahi ma aha mid aad u yar, ee analyzers scanner iyo matoor waxaa looga baahan yahay. Waxaa sidoo kale jira matoorrada, matoorrada code, laakiin waxa ay si caadi ah ma aha.
  • Nooca code target in la ahbaa. Laga kaabaya ama dalwaddii code mashiinka saafi ah loo doortay. Ama kaliya ku qor qayb galo oo abuuri wakiil caan dhexe sida LLVM, RTL, ama JVM. Or ka dhigi turjumaad ah ee asalka ah ee code source ee C ama JavaScript ah.
  • format ee code bartilmaameedka. Waxaad dooran kartaa luqadda shir, code a mashiinka la qaadi karo, mashiinka xasuusta code image.
  • Retargeting. Marka la ballamay ee matoorrada waa ay fiican tahay in qayb caadi ah tubada. Sababtan awgeed waxa ugu wanaagsan in ay leeyihiin hal matoor for talooyin ah ee qaybo badan.

Architecture compiler: qaybood

Kuwanu waa qaybaha ugu waaweyn functional of compiler ah in abuuraa code hooyo (haddii barnaamijka wax soo saarka waa barnaamij ee C ama mashiinka dalwaddii, waxaad u baahan tahay marxaladaha badan oo aan):

  • barnaamijka la gelin The (calaamadaha socodka) waxaa la quudiyey galay scanner ah (analyzer weeya), taas oo badasha socodka ah calaamadihii.
  • Parser (parser) dhismaha hal geed Saan la taaban karin.
  • analyzer Semantic decomposes macluumaadka semantic isla markaana eegaya qanjidhada geed for khaladaad ah. Sidaas darteed, dhisay garaaf semantic - geed Saan la taaban karin leh guryaha oo dheeraad ah iyo links aasaasay.
  • matoor code Intermediate dhistaa garaaf socodka ah (tuples waxa ay u qaybsamaan blocks ugu weyn).
  • optimizer code Machine-madax banaan sameeyaa labada ayna maxaliga ah (gudahood unit ee saldhiga ah) oo caalami ah (in blocks oo dhan) asal ahaan ka harsan joogtada gudahood. Yaraynaysaa code siyaado ah iyo nayaa xisaabinta. Natiijadu waxay tahay garaaf socodka dib u habaynta.
  • Generator xidhana code diirada blocks aasaasiga ah galay code a rectilinear gacanta la isugu gudbiyo, abuurista ururiyaha file wax diiwaanka ah dalwaddii (suurto gal xumaada).
  • Machine ku tiirsan optimizer, linker qoondeeyay xasuusta dhexeeya diiwaanka oo ka dhigaysa kooxaha qorshaynta. Waxaa qabata barnaamijka diinta ee luqadda shirkii at shirkan iyadoo la isticmaalayo wanaagsan oo pipelining.

Intaa waxaa dheer, isticmaalka Tababaraha jimaynta baadi ogaanshaha iyo miisaska calaamad.

Falanqaynta weeya (iskaanka)

scanner The kuweeda ah characters il il socodka ah calaamadihii, whitespace ka saareen, comments iyo macros ballaariyo.

Scanners inta badan la kulmaan dhibaatooyin, sida in la tixgeliyaan kiiska, xadad, nasashada line iyo comments gundhig.

Khaladaadka waxa dhici kara in inta lagu guda jiro iskaanka, loo yaqaan keli iyo waxaa ka mid ah:

  • characters aan xarfaha;
  • xad-dhaaf ah tirada characters in eray ama line;
  • Aayad u xiran yihiin ama string suugaan;
  • dhammaadka file in comment.

Parsing (parsing)

parser The badasha isku xigxiga ee calaamadihii galay geed Saan la taaban karin. Guntin kasta oo ku yaal geedka waxaa lagu kaydiyaa sida shay beerahooda la odhan jiray, kuwaas oo qaar badan naftooda jira qanjidhada geedka. Marka marxaladdan waxaa jira wareegyada lahayn. Marka aad la abuuro parser ah lagama maarmaan ah in fiiro gaar ah u heerka kakanaanta ee naxwaha (LL ama LR) iyo aad u ogaato haddii ay jiraan wax disambiguation xeerarka. luuqado qaarkood u baahan yihiin falanqeyn semantic.

Khaladaadka helay xilligan la joogo waxaa lagu magacaabaa Saan. Tusaale ahaan:

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

falanqaynta semantic

Inta lagu jiro falanqaynta semantic si loo hubiyo permissibility ee xeerarka iyo qaybo ka mid associate geedka qladad ah (jidaynayey magacyada tixraaca galinta hawlgalka for beddelaad nooca awaamiir, iyo D. sidaas on.) Waayo, la xirrira garaafka semantic.

Sida iska cad, set ee oggolaanshaheeda xeerarka ku qoran luqado kala duwan oo kala duwan. Haddii aad isku ururiso luqadaha Java-sida, compilers ka heli kartaa:

  • dhawaaqo variable badan gudahood ay baaxadda;
  • marjic u variable ka hor ay cadayn;
  • tixraacyo magaca suuq madow ah,
  • jebinta xuquuqda patent;
  • Tirada xad dhaaf ah ama aan ku filnayn ee doodaha ee call hab;
  • jaanqaadayn nooca.

Qarni

Qarni code Intermediate saarta garaaf socodka kooban tuples, qaybsamaan blocks aasaasiga ah.

Qarni code saarta code dhab ah mashiinka. In compilers dhaqanka ee-RISC mashiinada on tallaabada ugu horraysa, oo aad loo abuuro ururiyaha la tiro aan la koobi karayn ee diiwaanka dalwaddii. Waayo, CISC-mashiinada badan tahay ma dhici doonto.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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