KompjûtersProgramming

Omrop - is ... Soarten compilers. Konvertearje en útstjoering programma

Programma, likegoed as minsken it oersetten fan de iene nei de oare taal nedich in tolk of oersetter.

basic konsepten

It programma is in taalkundich fertsjintwurdiging fan berekkenings: i → P → P (i). In tolk is in programma dat wurdt levere oan de ynfier programma P en guon ynfier x. It fiert at P x: I (P, x) = P (x). It feit dat der mar ien oersetter is steat fan poadium alle mooglike programma (dat kin wurde fertsjintwurdige yn de formele systeem) is in tige djip en wichtige ûntdekking Turingmasine.

It processor is in fertolker fan programma 's yn masine taal. Generaal te djoer te skriuwen tolken foar hege-nivo talen, sadat sy fertale yn in foarm dat is makliker te ynterpretearjen.

Guon soarten fan oersetters hawwe hiel frjemd nammen:

  • De assembler translates gearkomste taal programma yn machine taal.
  • De gearstaller Oersette fan in hege-nivo taal nei in legere taal.

Omrop - is in programma dat duorret as ynfier gegevens it programma yn guon taal S en produsearret T programma op sa'n manier dat se beide hawwe deselde semantics: P → X → Q. Dat is, ∀x. P (x) = Q (x).

As útstjoerd it hiele programma yn wat te ynterpretearjen, it hjit in kompilaasje foardat eksekúsje, of AOT compilation. AOT gearstaller kin brûkt wurde yn searjes, de lêste dêrfan is faak it assembler, bygelyks:

De boarne koade gearstaller → (oersetter) → → gearkomste koade assembler (gearstaller) → → CPU masine koade (tolk).

Operasjonele of dynamyske compilation optreedt as it programma wurdt útstjoerd, doe't eksekutearre troch oare earder gearstald diel. JIT-compilers wit noch wat se hawwe al dien sa as net te werhelje de boarne koade wer en wer. Se kinne sels produsearje adaptieve compilation en recompilation basearre op it gedrach fan it programma útfiering omjouwing.

In soad talen tastean te fieren koade ûnder kompilear tiid en stellen de nije koade by runtime.

oersetting stage

Útstjoering bestiet út 'e treppen fan it analysearjen en synthesizing:

De boarne koade analyser → → → konseptuele fertsjintwurdiging generator (synthesizer) → Target koade.

Dat komt troch dizze redenen:

  • Eltse oare metoade is net geskikt. Wurd oersetting gewoan net wurket.
  • Goede engineering oplossing: as jo wolle skriuwe oersetters foar M en N boarne talen beëage hoecht skriuwen allinne M + N ienfâldige programma (polukompilyatorov) ynstee fan M × N kompleks (totaal fan oersetters).

Lykwols, yn de praktyk, in konseptuele werjefte fan in hiel selden ekspressyf genôch en krêftich genôch te dekken alle tinkbere boarne en doeltalen. Wylst guon koenen komme tichtby dit.

Echte compilers trochtsjen protte poadia. As it oanmeitsjen fan jo eigen gearstaller hat net hoecht te werhelje al it hurde wurk dat minsken dien te meitsjen foarstellings en Generators. Jo kinne fertale jo taal daliks yn JavaSkriptName of C en nim foardiel fan besteande JavaSkript-motor en de C gearstaller te dwaan de rest. Jo kinne ek gebrûk meitsje fan de besteande tuskenlizzende represintaasje en firtuele masines.

record oersetter

Omrop - is in programma of hardware, dy't belutsen trije talen: de boarne, de bestimming en de basis. Se kinne wurde skreaun yn in T-foarm, it pleatsen fan de oarspronklike lofts, rjochts en doel basis hjirûnder.

Der binne trije soarten compilers:

  • Omrop - is samokompilyator as dat komt oerien mei de basis boarne taal.
  • Gearstaller dy't doeltaal is de nulmjitting, neamd samorezidentnym.
  • Omrop - een krús-gearstaller, as er doelbewuste en basis ferskate talen.

Wêrom is dit wichtich?

Ek as jo nea meitsje in echte gearstaller, in goede kennis fan 'e technyk fan syn skepping, want it begryp brûkt foar dit doel brûkt wurde rûnom, bygelyks:

  • opmaak tekst;
  • taal fragen oan databanken;
  • advanced kompjûter arsjitektuer;
  • Generalisearre optimalisaasje problemen;
  • Westerdyk;
  • skripttalen;
  • controllers;
  • firtuele masines;
  • Machine oersetting.

Boppedat, as jo wolle skriuwe preprocessors, linkers, loaders, debuggers en profilers, moatte jo gean troch deselde stappen as doe't it skriuwen fan in compiler.

Jo kinne ek leare hoe't te skriuwen bettere programma, sûnt de oprjochting fan 'e oersetter foar de taal betsjut in better begryp fan syn intricacies en ambiguities. De stúdzje fan de algemiene prinsipes fan omrop ek kinne jo te wurden fan in goede foarmjouwer taal. Sa makket it út hoe steile de taal as it kin net útfierd effektyf?

útwreide technology

gearstaller technology covers soad ferskillende gebieten fan kompjûter wittenskip:

  • formele teory fan de taal: grammatika, parsing, computability;
  • kompjûter arsjitektuer: ynstruksjetalen sets, RISC- of CISC, pipelined ferwurkjen kearn klok fytst, ensfh.;
  • begripen fan de programmearring talen, bygelyks, performing in searje kontrôle, betingsten eksekúsje, mei werhellingen, werhellingsdjipte, funksjonele ferrotting, modularity, syngronisaasje, meta-programmearring, tapassingsgebiet, konstante sub-types, sjabloanen, output type, prototypes, annotaasjes, trochstreaming, monads, brievebussen, trochgean , wildcards, reguliere ekspresje, transactional ûnthâld, erfskip, polymorphism, mode ynstellings, ensfh. ensfh.;
  • abstrakte talen en firtuele masines;
  • algoritmen en gegevens struktueren: reguliere ekspresjes, analysearjen fan algoritmen, graphics algoritmen, dynamyske programmearring, training;
  • Programming talen: syntaksis, semantyk (statyske en dynamysk), stipe paradigma (strukturele, oop, functioneel, logysk, steapel, parallelism, meta-programmearring);
  • creation software (compilers, meastal grut en kompleks): lokalisaasje, caching, componentize, API-Schnittstellen, opnij brûken, syngronisaasje.

compiler design

Guon fan 'e problemen tsjinkaam yn' e ûntwikkeling fan 'e wiere oersetter:

  • Problemen mei de boarne taal. Is it maklik om compile it? Is der in preprocessor? Hoe binne de typen? Is der in bibleteek?
  • Groepearje gearstaller kombinaasjes: inkelde of multi-wei?
  • De mjitte fan optimalisearjen winske. Fluch en ûnrein útstjoering programma mei in bytsje of gjin optimalisaasje kin wêze normaal. Over-optimalisaasje gearstaller sil stadich, mar better koade by runtime kin de muoite wurdich.
  • De fereaske mjitte fan error detection. Kin in oersetter krekt stopje by de earste flater? As it moat ophâlde? Oft te fertrout de gearstaller error korreksje?
  • De beskikberens fan ark. As de oarspronklike taal is net hiel lyts, de scanner en generator Analyzers binne nedich. Der binne ek Generators, code Generators, mar se binne net sa faak.
  • Soarte fan doeltriem koade te meitsjen. Keazen wurde út suver oanfolle of firtuele masine koade. Of gewoan skriuwe in yngong diel dat skept in populêre tuskenlizzende fertsjintwurdiging lykas LLVM, RTL, of JVM. Of meitsje in oersetting fan it orizjineel yn 'e boarnekoade in C of JavaScript.
  • De opmaak fan de doelgroep koade. Jo kinne kieze in gearkomste taal, in draachbere masine koade, machine koade ûnthâld ôfbylding.
  • Retargeting. Doe't de set fan Generators is goed om in mienskiplike ynholte part. Om dy reden is it bêste te hawwen ien generator foar de ynfier fan in protte ûnderdielen.

gearstaller Architecture: komponinten

Dat binne de grutte funksjonele ûnderdielen fan in gearstaller dy't generearret native koade (as de útfier programma is in programma yn C of in firtuele masine, dan hoege net sa folle poadia):

  • De ynfier programma (flow marks) wurdt fieden yn 'e scanner (leksikale analyser), dy't konvertearret der in stream fan konsumpsjemunten.
  • Parser (Parser) oanlizzen ien Abstract syntaks beam.
  • Semantyske analyser decomposes de semantyske ynformaasje en besjocht de beam nodes foar flaters. As gefolch, boud semantyske grafyk - abstrakt syntaks beam mei oanfoljende eigenskippen en de fêststelde links.
  • Intermediate code generator bout in flow grafyk (tuples wurde groepearre yn wichtichste blokken).
  • Machine-ûnôfhinklike koade optimizer fiert sawol lokaal (binnen de basis ienheid) en wrâldwide (nei alle blokken) optimalisearjen yn prinsipe oerbleaune binnen routines. Mindert oerstallich wurden koade en simplifies de berekkenings. It resultaat is in oanpaste streaming grafyk.
  • Generator bynt doeltriem koade Basic blokken yn rjochtlinige transmissie control code, it meitsjen fan in objekt triem assembler firtuele registers (mooglik ineffectief).
  • Machine-ôfhinklike optimizer, linker allocates ûnthâld tusken registers en makket plannen teams. It docht de konverzje programma yn gearkomste taal by dizze gearkomste mei in goed gebrûk fan pipelining.

Boppedat, it brûken fan fout detection subsysteem manager en symbol tafels.

Leksikale analyze (scannen)

De scanner set de stream boarne tekens yn in stream fan tokens, fuortsmiten wytromte, opmerkingen en it útwreidzjen makro.

Scanners faak tsjinkomme problemen, sa as it wol of net rekken holden mei de saak, marzjes, line brekt en ynbêde comments.

Flaters dy't ûntstean tidens it skennen, neamd leksikaal en befetsje:

  • karakters dy't net yn it alfabet;
  • oerskot fan it oantal karakters yn in wurd of line;
  • net in sletten teken of in tekenrige letterlike;
  • ein fan triem yn reaksje.

Ferwurking (parsing)

De Parser set de opienfolging fan tokens yn in abstrakt syntaks beam. Eltse knoop yn 'e beam wurdt opslein as in objekt mei namme fjilden, in protte dêrfan binne harsels de beam knopen. Op dit toaniel binne der gjin fytst. As jo meitsje in Parser needsaaklik is om omtinken te jaan oan it nivo fan 'e kompleksiteit fan' e grammatika (LL of LR) en fyn út oft der gjin regels trochferwizing. Guon talen do nedich semantyske analyze.

Flaters fûn op dizze faze wurde neamd syntax. Bygelyks:

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

semantyske analyze

By de semantyske analyze te kontrolearjen it permissibility fan regels en associate dielen fan it Parse beam (sadat ferwizing nammen ynstekken operaasje foar ymplisyt type bekearing, ensafuorthinne. D.) Foar sy de semantyske grafyk.

Fansels, de dea fan de talitberens fan regels yn ferskillende talen oars. As jo stellen de Java-lykas talen, compilers meie fine:

  • meardere variable ferklearring binnen syn berik;
  • in ferwizing nei in fariabele foardat syn declaration;
  • ferwizings nei de namme fan 'e undeclared;
  • ynbreuk op oktroai rjochten;
  • oermjittich of ûnfoldwaande tal arguminten yn in metoade call;
  • type komt net oerien.

generaasje

Intermediate koade generaasje produsearret flow grafyk gearstald út tuples, groepearre yn Basis blokken.

koade generaasje produsearret in echte masine koade. Yn tradysjonele compilers foar de RISC--masines op de earste stap, jo meitsje in assembler mei in ûneinige oantal firtuele registers. Foar CISC-masines nei alle gedachten sil net barre.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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