Kompjutera, Programimi
Transmetues - është ... Llojet e hartuesit. Convert dhe programet transmetuese
Programet, si dhe njerëz të përkthyer nga një gjuhë në një tjetër nevojë për një interpreti ose përkthyesi.
konceptet bazë
Programi është një përfaqësim gjuhësor e llogaritjeve: i → P → P (i). Një përkthyes është një program i cili është furnizuar me programin input P dhe disa të dhëna x. Kryen te P x: I (P, x) = P (x). Fakti se ka vetëm një përkthyes është i aftë për kryerjen e të gjitha programet e mundshme (të cilat mund të përfaqësohet në sistemin formal) është një shumë të thellë dhe domethënëse Turing zbulim.
Procesori është një përkthyes i programeve në gjuhën e makinës. Në përgjithësi shumë e shtrenjtë për të shkruar përkthyes për gjuhë të nivelit të lartë, në mënyrë që ata të përkthehet në një formë që është e lehtë për të interpretuar.
Disa lloje të përkthyesve kanë emra shumë të çuditshme:
- Montues përkthehet programe gjuhën e kuvendit në gjuhën e makinës.
- Përpiluesi përkthehet një gjuhë të nivelit të lartë në një gjuhë më të ulët.
Transmetues - është një program që merr si të dhëna hyrëse të programit në disa gjuhë S dhe prodhon programin T në një mënyrë të tillë që ata të dy kanë të njëjtën semantikë: p → X → Q. që është, ∀x. P (x) = Q (x).
Nëse transmetuar të gjithë programin në diçka interpretueshme, ajo është quajtur një përmbledhje para përpilimit ekzekutimit, ose AOT. AOT përpiluesit mund të përdoret në seri, kjo e fundit e cila është shpesh assembler, për shembull:
Kodi burimor compiler → (përkthyes) → → kuvendi Kodi assembler (compiler) kodin → → machine CPU (përkthyes).
përpilim operative ose dinamike ndodh nëse programi transmetohet, kur ekzekutohet nga pjesë të tjera të hartuar më parë. JIT-Hartuesit mbani mend se çfarë ata kanë bërë tashmë jo aq sa për të përsëritur kodin burim përsëri dhe përsëri. Ata mund edhe të prodhojë përpilimin adaptive dhe rikompilohen bazuar në sjelljen e mjedisit ekzekutimit të programit.
Shumë gjuhë të lejuar për të ekzekutuar kodin në kohën e kompilimit dhe përpilojnë kodin e ri në kohën e duhur.
faza përkthim
Transmetimi perfshin hapat e analizuar dhe sintetizimin:
Kodi burimor Analyzer → → → gjenerator konceptual përfaqësimi (Synthesizer) → kodin Target.
Kjo është për shkak të këtyre arsyeve:
- Ndonjë metodë tjetër nuk është i përshtatshëm. përkthim fjalë thjesht nuk funksionon.
- zgjidhje e mirë inxhinierike: në qoftë se ju doni të shkruani përkthyes për gjuhë M dhe N burim shënjestër duhet të shkruani vetëm M + N programe të thjeshta (polukompilyatorov) se sa kompleks M × N (gjithsej i përkthyesve).
Megjithatë, në praktikë, një pamje konceptuale e një shumë të rrallë ekspresive të mjaftueshme dhe mjaft të fuqishme për të mbuluar çdo burim dhe objektiv mundshme gjuhë. Ndërsa disa ishin në gjendje për të ardhur afër këtë.
Hartuesit reale të kalojë nëpër shumë faza. Kur krijimin e vet përpiluesit tuaj nuk ka nevojë për të përsëritur të gjithë punën e vështirë që njerëzit kanë bërë për të krijuar përfaqësime dhe gjeneratorë. Ju mund të përkthehet gjuhën tuaj direkt në JavaScript ose C dhe të përfitojnë nga ekzistuese JavaScript-motor dhe C përpiluesit të bëjë pjesën tjetër. Ju gjithashtu mund të përdorni përfaqësimin ekzistuese ndërmjetme dhe makina virtuale.
translator rekord
Transmetues - është një program apo hardware, e cila përbëhej nga tri gjuhë: burim, destinacion dhe baza. Ata mund të jetë e shkruar në një formë T-je, vendosjen e majta origjinale, të drejtë dhe objektiv bazën më poshtë.
Ekzistojnë tri lloje të hartuesit:
- Transmetues - është samokompilyator nëse ajo korrespondon me gjuhën burim themelor.
- Compiler cila synuar gjuha është bazë, e quajtur samorezidentnym.
- Transmetuesi - një ndër-përpilues, në qoftë se ai në shënjestër dhe gjuhë themelore e ndryshme.
Pse është kjo e rëndësishme?
Edhe nëse ju nuk bëni një përpilues të vërtetë, një njohuri të mirë të teknologjisë së krijimit të saj, sepse koncepti përdoret për këtë qëllim janë përdorur gjerësisht, për shembull:
- Formatimi i tekstit;
- pyetje gjuhës në bazat e të dhënave;
- Arkitektura e avancuar kompjuterike;
- Problemet e pergjithshme optimization;
- GUIs;
- gjuhë e shkruar;
- kontrollorët;
- makina virtuale;
- përkthim makinë.
Përveç kësaj, në qoftë se ju dëshironi të shkruani preprocessors, linkera, ngarkues, debuggers dhe profilers, ju duhet të kalojnë nëpër të njëjtat hapa si kur shkruani një përpilues.
Ju gjithashtu mund të mësojnë se si të shkruajnë programe të mira, që nga krijimi i përkthyesit për gjuhën do të thotë një kuptim më të mirë të intricacies dhe paqartësitë e saj. Studimi i parimeve të përgjithshme të transmetimit gjithashtu ju lejon të bëhet një gjuhë të mirë projektuesi. Pra, nuk ka rëndësi se sa të pjerrët gjuha në qoftë se ajo nuk mund të zbatohet në mënyrë efektive?
teknologji të plotë
teknologji compiler mbulon shumë fusha të ndryshme të shkencave kompjuterike:
- Teoria formal i gjuhës: gramatikë, analizë gramatikore, kompjuetshmerise;
- Arkitektura kompjuterike:. udhëzim përcakton, RISC ose CISC, pipelined Ciklet përpunimit core clock, etj;
- konceptet e gjuhëve të programimit, për shembull, kryerjen e një kontroll të rend, ekzekutimi i kushtëzuar, përsëritje, recursion, dekompozimi funksionale, modularitet, sinkronizimi, meta-programimi, fushëveprimi, nën-lloje të vazhdueshme, templates, lloj prodhimi, prototipa, Annotations, rrjedhës, monads, kuti postare, vazhdojnë , wildcards, shprehja e rregullt, kujtesa transaksional, trashëgimia, polymorphism, settings mode, dhe kështu me radhë etj..;
- gjuhë abstrakte dhe makina virtuale;
- Algoritmet dhe strukturat e të dhënave: shprehjet e rregullta, algoritme analizë gramatikore, algoritme grafikë, programimi dinamik, trajnimit;
- gjuhë programimi: Sintaksa, semantika (statike dhe dinamike), paradigmat mbështetje (strukturore, OOP, funksionale, logjike, rafte, paralelizmi, meta-programimit);
- Krijimi software (përpiluesit, zakonisht të mëdha dhe komplekse): Lokalizim, caching, componentize, API-ndërfaqet, ri-përdorim, sinkronizimi.
dizajni përpilues
Disa nga problemet e hasura në zhvillimin e përkthyesit e vërtetë:
- Problemet me gjuhën e burimit. A është e lehtë për të hartuar atë? A ka një preprocessor? Si janë llojet? A ka një bibliotekë?
- Grupim kalon përpiluesit: vetme apo multi-rruga?
- Shkalla e optimization dëshiruar. programe transmetuese të shpejtë dhe të papastër me pak ose aspak optimization mund të jetë normale. Mbi-optimization përpilues do të ngadalësojë, por kodi më të mirë në kohën e duhur mund të jetë e vlefshme.
- Shkalla e nevojshme e zbulimit të gabimit. A mundet një përkthyes ndalet vetëm në gabimin e parë? Kur ajo duhet të ndalet? Nëse do të besimit korrigjimin gabim përpilues?
- Disponueshmëria e mjeteve. Nëse gjuha origjinale nuk është shumë i vogël, skaner dhe gjenerator analizues të janë të nevojshme. Ka edhe gjeneratorë, gjeneratorë kodin, por ata nuk janë aq të zakonshme.
- Lloji i kodit të synuar për të gjenerohet. Të zgjedhur nga të pastër kod plotësohet apo virtuale makinë. Apo vetëm të shkruani një pjesë hyrje që krijon një përfaqësim popullor ndërmjetme të tilla si LLVM, RTL, ose JVM. Ose të bëjë një përkthim të origjinalit në kodin burimor në C ose JavaScript.
- Formati i kodit të synuar. Ju mund të zgjidhni një gjuhë e kuvendit, një kod portativ makinë, Image Kodi makinë kujtesës.
- Retargeting. Kur grupi i gjeneratorëve është e mirë që të ketë një pjesë të përbashkët gji. Për këtë arsye është mirë që të ketë një gjenerator për kontributin e shumë pjesë.
compiler Architecture: komponentet
Këto janë komponentet kryesore funksionale të një përpilues që gjeneron kodin amtare (nëse programi prodhimi është një program në C apo një makinë virtuale, ju nuk duhet kaq shumë faza):
- Programi input (shenjat flow) është ushqyer në skaner (Analizues leksikor), i cili konverton atë në një lumë të argumentet.
- Parser (parser) ndërtimin e një pemë abstrakte sintaksë.
- Analyzer Semantic zbërthen të dhënat semantik dhe kontrollon nyjet pemë për gabime. Si rezultat, e ndërtuar semantik grafik - pemë abstrakte sintaksës me pronat shtesë dhe lidhjet e vendosura.
- gjenerator Intermediate Kodi ndërton një grafik të rrjedhës (tuples grupohen në blloqe kryesore).
- Machine-pavarur code optimizer kryen dy lokale (brenda njësisë bazë) dhe global (në të gjitha blloqet) optimization thelb mbetur brenda rutinat. Redukton kodin tepërta dhe thjeshton llogaritjet. Rezultati është një grafik i modifikuar rrjedhë.
- Generator lidh blloqet themelore kod objektiv në një kod drejtvizor kontrollit të transmetimit, duke krijuar një skedar objekt asembler regjistrat virtuale (ndoshta paefektshëm).
- Machine-varur optimizer, linker ndan kujtesës në mes të regjistrave dhe bën ekipet planifikuese. Ajo kryen programin e konvertimit në gjuhën e kuvendit në këtë asamble me një përdorim të mirë të pipelining.
Përveç kësaj, përdorimi i menaxherit nënsistem zbulimin gabim dhe tavolina simbol.
Analiza e leksikore (skanimi)
Skaner konverton karakteret burim lumë në një rrjedhë e argumentet, duke hequr whitespace, komentet dhe zgjerimin macros.
Skanera shpesh ndeshen me probleme, të tilla si nëse janë apo jo për të marrë parasysh rastin, kufijtë, prishet linjë dhe komente ngulitur.
Gabimet që mund të ndodhin gjatë skanimit, i quajtur leksikor dhe përfshijnë:
- karaktere që nuk janë në alfabetin;
- tepërt e numrit të karaktereve në një fjalë apo linjë;
- nuk është një shenjë e mbyllur apo një varg literal;
- Fundi i dosjes në koment.
Parsing (parsing)
The parser konverton sekuencat e argumentet në një pemë abstrakte sintaksë. Çdo nyje në pemë është ruajtur si një objekt me fushat e përmendura, shumë prej të cilave janë vetë nyjet pemë. Në këtë fazë nuk ka cikle. Kur keni krijuar një parser është e nevojshme që të i kushtoj vëmendje në nivelin e kompleksitetit të gramatikës (LL ose LR) dhe për të gjetur nëse ka ndonjë rregulla kthjellim. Disa gjuhë kanë nevojë për analiza semantik.
Gabimet e gjetura në këtë fazë janë quajtur sintaksë. Për shembull:
- k = 5 * (7 - y;
- j = / 5;
- 56 = x * 4.
Analiza semantik
Gjatë analizës semantike për të kontrolluar lejimin e rregullave dhe pjesëve të asociuar të pemës Parse (lejuar emrat referimi futur operacion për konvertimet implicite tipit, dhe kështu me radhë. D.) për formimin e grafik semantik.
Natyrisht, grupi i pranueshmërisë së rregullave në gjuhë të ndryshme të ndryshme. Nëse ju përpiloni gjuhët Java-si, hartuesit mund të gjeni:
- Deklarata të shumta të ndryshueshme brenda fushëveprimit të tij;
- një referencë për një variabël para shpalljes së saj;
- referenca për emrin e padeklaruar;
- shkeljen e të drejtave të patentës;
- Numri i tepërt ose i pamjaftueshëm i argumenteve në një telefonatë metodë;
- lloj mospërputhje.
brez
brez Intermediate Kodi prodhon grafiku rrjedhës përbërë nga tuples, të grupuara në blloqe themelore.
Kodi brez prodhon një kod të vërtetë makinë. Në hartuesit tradicionale për RISC-makina në hapin e parë, ju e krijoni një assembler me një numër të pafund të regjistrave virtuale. Për CISC-makinat ndoshta nuk do të ndodhë.
Similar articles
Trending Now