ComputerenProgramméiere

Gekrabbelt - ass ... eelst compilers. Geflunn a Bedreiwe Programmer

Programmer, wéi och Leit aus eng Sprooch ze aner brauchen en Dolmetscher oder Iwwersetzer ze iwwersetzen.

Basis Konzepter

De Programm ass eng sproochlech Representatioun vun Berechnungen: Ech → P → P (ech). En Dolmetscher ass e Programm, deen dem Input Programm P an e puer Input x Pleséier ass. Et stécht bei P x: ech (P, x) = P (x). Der Tatsaach, datt et nëmmen eng Iwwersetzer ass ass kapabel vun all méiglech Programmer leeschtungsfäheg (déi am wierkleche System vertruede sinn kann) ass eng ganz déiwer an bedeitendst Entdeckung Turing.

De Prozessor ass en Typ vu Programmer an Maschinn Sprooch. Generell ze deier fir Sproochen héich-Niveau Dolmetscher ze schreiwen, fir se an eng Form iwwersetzen, datt einfach ze virzegoen ass.

Puer Zorte vun Iwwersetzer hunn ganz komesch Nimm:

  • D'AssemblerLanguage Iwwersetzer Assemblée Sprooch Programmer an Maschinn Sprooch.
  • De Compiler Iwwersetzer eng héich-Niveau Sprooch zu engem nidderegen Sprooch.

Gekrabbelt - ass e Programm, deen den Input Daten de Programm vun e puer Sprooch S a produzéiert T Programm an esou e Wee ass, dass si souwuel hunn déi selwecht semantics: P → X → Q. Dat ass, ∀x. P (x) = Q (x).

Wann de ganze Programm an eppes interpretable Iwwerdroung, ass et e Resultat éier Ausféierung, oder AOT Resultat genannt. AOT Compiler kann zu Serie benotzt ginn, de leschte vun deenen ass oft de AssemblerLanguage, zum Beispill:

Der Source Code Compiler → (Iwwersetzer) → → Assemblée Code AssemblerLanguage (Compiler) → → CPU Maschinn Code (Typ).

Operationell oder dynamesch Resultat existeiert wann de Programm Iwwerdroung ass, wann déi aner virdrun iwwerlieft ugereegt. JIT-compilers erënneren wat se schons gemaach hunn also als net d'Source Code nees an erëm ze widderhuelen. Si kann och adaptiven Resultat produzéiere an recompilation baséiert op d'Behuele vun de Programm Ausféierung Ëmwelt.

Vill Sproochen erlaben Code um sicht Zäit ze exekutéieren an den neie Code um runtime sicht.

Iwwersetzung Etapp

Emissioun regruppéiert d'Schrëtt vun analyséiert an synthesizing:

Der Source Code Organer → → → konzeptuellen Representatioun Generator (solle) → Target Code.

Dat ass wéinst dëse Grënn:

  • All aner Method ass net gëeegent. Wuert Iwwersetzung einfach net schaffen.
  • Good Déifbau Léisung: wann Dir wëllt schreiwen Iwwersetzer fir M an N Quell Sproochen ugepasste schreiwen brauchen nëmmen M + N einfach Programmer (polukompilyatorov) amplaz M × N komplex (Ganzen Iwwersetzer).

an der Praxis, engem konzeptuellen Vue vum Ee, eng ganz seelen expressiver genuch a staark genuch all erdenklech Quell an Zil- Sproochen ze decken. Während e puer konnt no dëser ze kommen.

Real compilers virum Goal villen Etappen. Wann Är eege Compiler schafen brauchen net all haarder Aarbecht ze widderhuelen, datt Leit gemaach hunn Representatioune an Generatoren ze schafen. Dir kënnt Är Sprooch direkt an Javascript oder C a profitéiert vun bestehend Javascript-Moteur an der C Compiler iwwersetze de Rescht maachen. Dir kënnt och déi bestehend Mëttelstuf Representatioun a benotzen virtuell Maschinnen.

Rekord Iwwersetzer

Gekrabbelt - ass e Programm oder Schrauwen, déi dräi Sproochen Équipe: d'Source, den Destinatioun an der Basis. Si kann zu engem T-Form geschriwwe ginn, ënnert dem Original lénks, riets an Zil- huel Placement.

Et ginn dräi Zorte vu compilers:

  • Gekrabbelt - ass samokompilyator wann et un der Basis Quell Sprooch entsprécht.
  • Compiler déi Sprooch Zil ass d'baseline, genannt samorezidentnym.
  • Gekrabbelt - engem schéinen-Compiler, wann hien cibléiert a fundamental verschidde Sproochen.

Firwat ass dat wichteg?

Och wann Dir ni eng real Compiler, eng gutt Kenntnisser vun der Technik vu senger Creatioun maachen, well d'Konzept vun dësem Zweck gebraucht oft benotzt ginn, zum Beispill:

  • wat Text;
  • Sprooch Ufroën un Datenbanken;
  • fortgeschratt Computer Architektur;
  • generaliséiert akeef Problemer;
  • GUIs;
  • scripting Sproochen;
  • controllers;
  • virtuell Maschinnen;
  • Machine Iwwersetzung.

Ausserdeem, wann Dir preprocessors, linkers, loaders, debuggers an profilers ze schreiwen wëllt, da musst Dir déi selwecht Schrëtt wéi wann schreiwen engem Compiler goen duerch.

Dir kënnt och léieren, wéi besser Programmer ze schreiwen, well d'Schafe vun der Iwwersetzer fir d'Sprooch engem bessere Verständnis vun hirem intricacies an Onsécherheete heescht. D'Etude vun der allgemeng Prinzipië vun Diffusioun erlaabt Iech och eng gutt Designer Sprooch ze ginn. Sou heescht et egal wéi géi d'Sprooch, wann et net effektiv ëmgesat ginn?

iwwergräifend Technik

Compiler Technologie deckt ville verschiddene Beräicher vu Computer Wëssenschaft:

  • formell Theorie vun Sprooch: z'absolvéieren, Analyséiere, computability;
  • Computer Architektur:. Uweisunge baut, RISC oder CISC, pipelined Veraarbechtung Kär Auer kreesleef, asw;
  • Konzepter vun programméiere Sproochen, zum Beispill, eng Haaptrei Kontroll, geplangten Ausféierung, Impressioun, recursion, funktionell decomposition, modularity, Synchroniséierung, meta-programméiere, Ëmfang, konstante Ënner-Typen, Skeletter, Wasserstoff Typ, Prototype, configuréieren, Flux, monads, Mailboxen leeschtungsfäheg, weiderhin , wildcards, regulären Ausdrock, transactional Erënnerung, Ierfschaft, polymorphism, Modus Astellungen, an sou op asw..
  • mythologesch Sproochen a virtuell Maschinnen;
  • algorithms an Daten Strukturen: regelméisseg Ausstralung Analyséiere algorithms, Grafiken algorithms, dynamesch programméiere, Formatioun;
  • programméiere Sproochen: Siwebiergen, semantics (statesch an dynamesch), Ënnerstëtzung Paradigma (strukturell, OOP, funktionell, logesch, Stack, parallelism, meta-programméiere);
  • Kreatioun Software (compilers, normalerweis grouss a komplex): Lokalisatioun, dacks sinn, componentize, API-Schnëttplazen, bass-benotzen, Synchroniséierung.

Compiler Design

Verschiddener vun den Problemer an der Entwécklung vun der real Iwwersetzer begéint:

  • Problemer mat der Quell Sprooch. Ass et einfach et zu sicht? Gëtt et eng preprocessor? Wéi sinn d'Zorte? Gëtt et eng Bibliothéik?
  • Glidderung Compiler Passë: eenzel oder Multi-Manéier?
  • D'Ausmooss vun akeef Wënsch. Séier a béise Iwwerdroung Programmer mat wéineg oder keen akeef kann normal ginn. Iwwer-akeef Compiler gëtt lues, mee besser Code um runtime kann wäert et.
  • Déi néideg Ofschloss vun Fehler erkennen. Kann engem Iwwersetzer um éischte Feeler stoppen just? Wéi sollen se ophalen? Ob der Compiler Feeler Korrektur vertrauen?
  • Der Disponibilitéit vun Instrumenter. Wann der Originalsprooch net ganz kleng ass, sinn de Scanner an Generator Stroossen néideg. Et ginn och Generatoren, Code Generatoren, mee si sinn net esou gemeinsam.
  • Typ vun Zil- Code gin generéiert. Ginn aus reng ergänzt oder virtuell Maschinn Code ausgewielt. Oder just en Element Deel schreiwen dass eng populär Mëttelstuf Representatioun wéi LLVM schaaft, RTL, oder JVM. Oder maachen eng Iwwersetzung vun der Original an der Source Code an C oder Javascript.
  • D'Format vun der Zil- Code. Du kanns wielen eng Versammlung Sprooch, engem portable Maschinn Code, Maschinn Code Erënnerung Bild.
  • Retargeting. Wann der Formatioun vun Generatoren gutt ass eng gemeinsam woellen Deel ze hunn. Fir dës Grond ass et am beschten ee Generator fir den Input vun villen Deeler ze hunn.

Compiler Architecture: Deeler

Dëst sinn déi grouss funktionell Komponente vun engem Compiler déi gebierteg Code generéiert (wann der Wasserstoff Programm ass e Programm vun C oder enger virtueller Maschinn, Dir braucht net esou vill Etappe):

  • D'Input Programm (Flux Mark) ass an de Scanner (lexikalesch Organer) es, dat et an enger Baach vun Stongen där.
  • Parser (parser) Gebaier eent mythologesch Siwebiergen Bam.
  • Schüler Organer decomposes de Schüler Informatiounen a Schecken der Bam Wirbelen fir Feeler. Als Resultat, gebaut Schüler Offlaachung - mythologesch Siwebiergen Bam mat zousätzlech Eegeschaften an der etabléierter Linken.
  • Mëttelstuf Code Generator baut e Flux Grafik (tuples sinn an Haaptrei spären gruppéiere).
  • Machine-onofhängeg Code optimizer Dirigent souwuel lokal (am huel Eenheet) a global (fir all spären) akeef Bartreng haaptsächlech bannent Dagesoflaf bleiwen. Reduzéiert iwwerflësseg Code an simplifies de Berechnungen. D'Resultat ass eng geännert Flux Grafik.
  • Generator bent Zil- Code Basis spären an engem rectilinear Transmissioun Kontroll Code, en Objet Fichier AssemblerLanguage virtuell Registere schafen (méiglecherweis effikass).
  • Machine-ofhängeg optimizer, allocates linker Erënnerung tëscht Registere a mécht Planung Équipen. Et stécht d'Konversioun Programm an Assemblée Sprooch bei dëser Versammlung mat engem gudde Gebrauch vun pipelining.

Zousätzlech, de Gebrauch vun Fehler erkennen subsystem Manager an Symbol Dëscher.

Lexikalesch Analyse (Scannen)

De Scanner där der Baach Quell Personnagen an enger Baach vun Stongen, Stoppen daucht, Kommentaren an Ausbau macros.

Datselwecht stousse oft Problemer, wéi ob oder net Rechnung ze huelen de Fall, Rand, Linn Break an Ënnerbewosstsinn Kommentaren.

Feeler, dass während Scannen, genannt lexikalesch an och geschéie kann:

  • Zeechen, datt net am Alphabet sinn;
  • iwwerschësseg vun der Zuel vun de Personnagen an engem Wuert oder Linn;
  • net eng zougemaach Zeechen oder engem String Employeeën;
  • Enn vum Fichier am Commentaire.

Analyséiere (Analyséiere)

D'parser där der Haaptrei vun Stongen an eng mythologesch Siwebiergen Bam. All Node am Bam ass en Objet mat genannt Felder gespäichert, vill vun deenen si selwer de Bam Wirbelen. Op dëser Etapp ginn et keng kreesleef. Wann Dir e parser schafen ass néideg Opmierksamkeet fir den Niveau vun Komplexitéit vun z'absolvéieren (GITT oder LR) an raus fannen ze bezuelen, ob et keng Vakanzeplaz Regelen. Puer Sproochen do verlaangen Schüler Analyse.

Feeler bei dëser Etapp fonnt ginn Siwebiergen genannt. Zum Beispill:

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

Schüler Analyse

Während dem Gebai Analyse der permissibility vu Regelen an Associé Deeler vun der Parsing- Bam ze kontrolléieren (Délaie Referenz Nimm Operatioun fir impliziten Typ mol Annoncéieren, an sou op. D.) Fir de Schüler Offlaachung grënnen.

Selbstverständlech, d'Formatioun vun admissibility vun Regelen a verschiddene Sproochen anescht. Wann Dir der Java-wëll Sproochen sicht, kann compilers fannen:

  • MÉI Variabel Deklaratioun bannent seng Ëmfang;
  • eng Referenz op eng Variabel virun hirer Deklaratioun;
  • Referenze fir den Numm vun der Schwaarzaarbecht;
  • Gemeinschaftsrecht vun Brevet Rechter;
  • exzessiv oder genuch Zuel vun Argumenter an enger Method ruffen;
  • Typ net fonnt.

Generatioun

Mëttelstuf Code Generatioun produzéiert Flux Offlaachung vum tuples komponéiert, an elementar spären gruppéiere.

Code Generatioun produzéiert eng real Maschinn Code. An traditionell compilers fir de RISC-Maschinnen op den éischte Schrëtt, schafen Iech en AssemblerLanguage mat engem onendlech Zuel vun virtuell Registere. Fir CISC-Maschinnen wäert wahrscheinlech net geschéien.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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