OrdinadorsProgramació

El transmissor - és ... Tipus de compiladors. Convertir i programes d'emissió

Programes, així com les persones a traduir d'un idioma a un altre necessita un intèrpret o traductor.

conceptes bàsics

El programa és una representació lingüística de càlculs: i → P → P (i). Un intèrpret és un programa que es subministra al programa d'entrada P i alguns d'entrada x. Es porta a terme a P x: I (P, x) = P (x). El fet que només hi ha un traductor és capaç de realitzar tots els programes possibles (que es poden representar en el sistema formal) és una Turing descoberta molt profunda i significativa.

El processador és un intèrpret de programes en llenguatge de màquina. En general massa car per escriure intèrprets per a llenguatges d'alt nivell, de manera que es tradueixen en una forma que és més fàcil d'interpretar.

Alguns tipus de traductors tenen noms molt estranys:

  • El assemblador tradueix els programes en llenguatge assemblador a llenguatge de màquina.
  • El compilador tradueix un llenguatge d'alt nivell a un llenguatge més baixa.

El transmissor - és un programa que usa com a dades d'entrada del programa en un llenguatge S i produeix el programa T de tal manera que tots dos tenen la mateixa semàntica: P → → X P. És a dir, ∀ x. P (x) = Q (x).

Si transmès tot el programa en alguna cosa interpretable, es diu una compilació abans de la compilació d'execució, o AOT. AOT compilador es pot utilitzar en sèrie, l'últim dels quals és sovint el assemblador, per exemple:

El codi font compilador → (traductor) → → conjunt de codi assemblador (compilador) codi → → màquina CPU (intèrpret).

compilació de funcionament o dinàmica es produeix si el programa s'emet, quan és executat per altra part prèviament compilat. JIT-compiladors recorden el que ja ho han fet perquè no es repeteixi el codi font i una altra. Fins i tot poden produir compilació i recompilació d'adaptació basat en el comportament de l'entorn d'execució del programa.

Molts llenguatges permeten executar codi en temps de compilació i compilar el nou codi en temps d'execució.

etapa de traducció

Emissió comprèn les etapes d'anàlisi i síntesi:

L'analitzador de codi font → → → generador de representació conceptual (sintetitzador) → codi de destinació.

Això es deu a les següents raons:

  • Qualsevol altre mètode no és adequat. traducció de paraules, simplement no funciona.
  • Bona solució d'enginyeria: si voleu escriure els traductors d'idiomes d'origen M i N específiques cal escriure només els programes simples (M + N) en lloc de polukompilyatorov complexa M x N (total dels traductors).

No obstant això, en la pràctica, una vista conceptual d'un molt poques vegades prou expressiu i prou potent com per cobrir tots els idiomes imaginables origen i de destinació. Mentre que alguns eren capaços de apropar-se a aquest.

compiladors reals passen per moltes etapes. En crear el seu propi compilador no hagi de repetir tot el treball dur que la gent ha fet per crear representacions i generadors. Podeu traduir el seu idioma directament en JavaScript o C i aprofitar-se de JavaScript del motor existent i el compilador de C per fer la resta. També pot utilitzar la representació intermèdia existent i les màquines virtuals.

traductor registre

El transmissor - és un programa o maquinari, que va involucrar a tres idiomes: l'origen, la destinació i la base. Ells poden ser escrits en una forma de T, la col·locació de la base de l'original esquerra, dreta i de destinació a continuació.

Hi ha tres tipus de compiladors:

  • El transmissor - és samokompilyator si es correspon amb l'idioma font bàsica.
  • Compilador qual el llenguatge és la línia de base, denominat samorezidentnym.
  • El transmissor - un compilador creuat, si ell dirigeix i diversos idiomes bàsics.

Per què és això important?

Fins i tot si vostè mai fer un compilador real, un bon coneixement de la tecnologia de la seva creació, ja que el concepte que s'utilitza per a aquest propòsit s'utilitzen àmpliament, per exemple:

  • el format de text;
  • consultes en llenguatge de bases de dades;
  • arquitectura informàtica avançada;
  • problemes d'optimització generalitzades;
  • interfícies gràfiques d'usuari;
  • llenguatges de script;
  • controladors;
  • màquines virtuals;
  • Traducció automàtica.

A més, si voleu escriure preprocesadores, enlazadores, carregadors, depuradors i perfiladors, ha de passar pels mateixos passos que en escriure un compilador.

També pot aprendre a escriure millors programes, des de la creació del traductor de la llengua significa una millor comprensió de les seves complexitats i ambigüitats. L'estudi dels principis generals de la radiodifusió també li permet convertir-se en un bon llenguatge de disseny. Així que què importa com aguda és la llengua si no es pot implementar de manera efectiva?

La tecnologia integral

tecnologia de compilació abasta moltes àrees diferents de la informàtica:

  • teoria formal de l'idioma: gramàtica, anàlisi sintàctica, la computabilitat;
  • arquitectura d'ordinador :. conjunts d'instruccions, RISC o CISC, els cicles de rellotge de nucli de processament canalitzat, etc;
  • conceptes de llenguatges de programació, per exemple, la realització d'un control de seqüència, execució condicional, iteració, recursió, descomposició funcional, la modularitat, la sincronització, meta-programació, abast, constants sub-tipus, plantilles, tipus de sortida, prototips, anotacions, flux, mònades, bústies, continuen , comodins, expressions regulars, memòria transaccional, herència, polimorfisme, els ajustos de manera, etc., etc ..;
  • llenguatges abstractes i màquines virtuals;
  • algoritmes i estructures de dades: expressions regulars, algoritmes d'anàlisi sintàctica, algoritmes gràfics, programació dinàmica, de formació;
  • llenguatges de programació: sintaxi, semàntica (estàtica i dinàmica), els paradigmes de suport (estructural, programació orientada a objectes, funcional, lògic, pila, paral·lelisme, meta-programació);
  • programari de creació (compiladors, generalment grans i complexes): localització, l'emmagatzematge en memòria cau, componentizar, API-interfícies, nou ús, la sincronització.

el disseny del compilador

Alguns dels problemes trobats en el desenvolupament del traductor real:

  • Els problemes amb l'idioma d'origen. És fàcil per a la seva compilació? ¿Hi ha un preprocessador? Com són els tipus? Hi ha una biblioteca?
  • L'agrupació de passades del compilador: una o diverses vies?
  • El grau d'optimització desitjada. programes de difusió ràpids i bruts amb poca o cap optimització poden ser normals. L'excés d'optimització del compilador serà lent, però millor codi en temps d'execució pot valer la pena.
  • El grau requerit de detecció d'errors. Pot un traductor només s'aturen en el primer error? Quan hauria de parar? Si s'ha de confiar en la correcció d'errors del compilador?
  • La disponibilitat d'eines. Si l'idioma original no és molt petit, es requereix que els analitzadors d'escàner i del generador. També hi ha generadors, generadors de codi, però no són tan comuns.
  • Tipus de codi de destinació que es generi. Ha de seleccionar de codi van completar o virtual pura màquina. O simplement escriure una part d'entrada que crea una representació intermèdia populars, com ara LLVM, RTL, o JVM. O fer una traducció de l'original en el codi font en C o JavaScript.
  • El format del codi de destinació. Es pot triar un llenguatge assemblador, imatge de memòria de codi de màquina un codi de màquina portàtil ,.
  • Canvi de destinació. Quan el conjunt de generadors és bo tenir una porció d'entrada comú. Per aquesta raó, és millor tenir un generador per a l'entrada de moltes parts.

compilador d'Arquitectura: components

Aquests són els principals components funcionals d'un compilador que genera codi natiu (si el programa de sortida és un programa en C o una màquina virtual, no necessita tantes etapes):

  • El programa d'entrada (marques de flux) s'alimenta en l'escàner (analitzador lèxic), que la converteix en un corrent de tokens.
  • Analitzador (parser) la construcció d'un arbre de sintaxi abstracta.
  • analitzador semàntic descompon la informació semàntica i comprova els nodes de l'arbre d'errors. Com a resultat, construïda semàntica gràfica - arbre de sintaxi abstracta amb propietats addicionals i els vincles establerts.
  • generador de codi intermedi construeix un gràfic de flux (tuples s'agrupen en blocs principals).
  • Independent de la màquina Optimitzador de codi porta a terme tant en l'optimització local (dins de la unitat base) i global (per a tots els blocs), bàsicament, romanent dins de les rutines. Redueix el codi redundant i simplifica els càlculs. El resultat és un gràfic de flux modificada.
  • Generador uneix codi objectiu blocs bàsics en un codi de control de transmissió rectilínia, la creació d'un arxiu d'objecte d'assemblador registres virtuals (possiblement ineficaç).
  • Depenent de la màquina Optimitzador, enllaçador assigna memòria entre registres i fa equips de planificació. Es porta a terme el programa de conversió en llenguatge assemblador en aquesta assemblea amb un bon ús de la canalització.

A més, l'ús de gestor de subsistema de detecció d'errors i taules de símbols.

Anàlisi lèxic (escaneig)

L'escàner converteix els caràcters font corrent en un corrent de fitxes, l'eliminació d'espais en blanc, comentaris i macros en expansió.

Escàners sovint es troben amb problemes, com si o no tenir en compte el cas, els marges, els salts de línia i els comentaris incrustats.

Errors que poden ocórrer durant l'exploració, anomenats lèxica i inclouen:

  • caràcters que no estan en l'alfabet;
  • excés del nombre de caràcters d'una paraula o de la línia;
  • no un senyal tancada o una cadena literal;
  • final de l'arxiu en el comentari.

Analitzar (anàlisi sintàctica)

L'analitzador converteix la seqüència de símbols en un arbre de sintaxi abstracta. Cada node de l'arbre s'emmagatzema com un objecte amb camps anomenats, molts dels quals són al seu torn els nodes de l'arbre. En aquesta etapa no hi ha cicles. Quan es crea un programa d'anàlisi cal prestar atenció al nivell de complexitat de la gramàtica (LL o LR) i esbrinar si hi ha alguna regla de desambiguació. Alguns idiomes requereixen anàlisi semàntica.

Els errors trobats en aquesta etapa es denominen sintaxi. Per exemple:

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

anàlisi semàntica

Durant el anàlisi semàntica per comprovar la validesa de les regles i parts associats de l'arbre d'anàlisi sintàctica (permetent noms de referència operació d'inserció per a les conversions de tipus implícites, i així successivament. D.) per formar el gràfic semàntica.

Òbviament, el conjunt d'admissibilitat de les normes en diferents idiomes diferents. Si compila els llenguatges Java similar, els compiladors poden trobar:

  • declaració de variables múltiples dins del seu abast;
  • una referència a una variable abans de la seva declaració;
  • les referències al nom del no declarat;
  • infracció dels drets de patent;
  • nombre excessiu o insuficient d'arguments en una trucada de mètode;
  • Tipus de falta de coincidència.

generació

generació de codi intermedi produeix gràfic de flux de compost de tuples, agrupats en blocs bàsics.

generació de codi produeix un codi de màquina real. En els compiladors tradicionals per als RISC-màquines en el primer pas, es crea un assemblador amb un nombre infinit de registres virtuals. Per CISC-màquines probablement no passarà.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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