Compilador

De la Viquipèdia, l'enciclopèdia lliure.
Saltar a la navegació Saltar a la cerca
Nota de desambiguació.svg Desambiguació : si busqueu la professió editorial del mateix nom, consulteu el comissari editorial .
Nota de desambiguació.svg Desambiguació : aquí es refereix a "Compilació". Si cerqueu el tipus d’àlbum, consulteu Compilació .
Diagrama que il·lustra el funcionament d'un compilador ideal.

Un compilador és un programa d' ordinador que tradueix una sèrie d' instruccions escrites en un llenguatge de programació determinat ( codi font ) a instruccions d'un altre idioma ( codi objecte ): el procés de traducció s'anomena compilació mentre l'activitat inversa, és a dir, que passa del codi objecte al codi font: s'anomena descompilació i es fa mitjançant un descompilador .

Si tots els compiladors s’adherissin exactament a l’ especificació del llenguatge, cada compilador podria compilar el mateix programa sense produir semànticament els mateixos resultats, és a dir, programes que produeixen el mateix resultat quan se sotmeten a les mateixes dades d’entrada . En realitat, molts compiladors implementen el llenguatge de manera incompleta o afegeixen extensions propietàries, creant així dialectes de l'idioma principal. Per als idiomes que adopten un estàndard en la decoració de símbols, el codi objecte generat per diferents compiladors es pot enllaçar en un sol executable.

Història

A partir del 1950 es van desenvolupar diversos compiladors experimentals (incloent el sistema A-0 de Grace Hopper ), però el 1957 l'equip Fortran d' IBM , dirigit per John Backus , va ser el primer a desenvolupar un compilador complet mentre, el 1960 , COBOL n'era un dels primers llenguatges a compilar-se en múltiples arquitectures . [1]

La idea de la compilació es va endur ràpidament i molts dels principis de disseny del compilador es van desenvolupar als anys seixanta. Un compilador és un programa escrit en algun idioma i el primer d'ells es va escriure en Assembly . El primer compilador autocompilat, capaç de compilar el seu propi codi, va ser creat per al llenguatge Lisp per Hart i Levin al MIT el 1962 . [2] L'ús de llenguatges d'alt nivell per escriure compiladors es va accelerar a principis dels anys setanta quan els llenguatges Pascal i C es van utilitzar per escriure compiladors per ells mateixos: és a dir, per exemple, compiladors per a C escrits al seu torn a C.

Descripció

Icona de la lupa mgx2.svg El mateix tema en detall: codi font i codi objecte .

Quan es defineix un llenguatge de programació per primera vegada, sorgeix el problema de com fer el seu compilador. En aquest cas, hi ha dos enfocaments possibles:

  • escriviu el compilador en un idioma diferent;
  • o bé, si ja existeix un intèrpret per al nou llenguatge, és possible utilitzar-lo per escriure una primera versió del compilador, que s'utilitzarà (donant-li el codi font de si mateix) per obtenir un primer compilador que funcioni en llenguatge màquina. , que farà que l'ús de l'intèrpret sigui inútil. El compilador així obtingut es pot utilitzar per escriure al seu torn millors compiladors, etc.

Operació

Etapes típiques de compilació.

El compilador entra en un programa , el codi font, sobre el qual realitza una sèrie d’operacions per tal d’obtenir, en absència d’ errors , el codi objecte. En general, els compiladors són capaços de reconèixer algunes classes d’errors presents al programa i, en alguns casos, de suggerir com corregir-los.

Els compiladors actuals divideixen l'operació de compilació en dues etapes principals: la part frontal i la part posterior . A la fase frontal , el compilador tradueix la font a un llenguatge intermedi (normalment intern al compilador); a la fase posterior es produeix la generació del codi objecte.

Etapa frontal

Aquesta etapa es divideix en diverses fases:

  • Anàlisi lèxic Mitjançant un analitzador lèxic , sovint anomenat escàner o lexer , el compilador divideix el codi font en moltes peces anomenades fitxes . Les fitxes són els elements mínims (no es poden dividir més) d’un idioma, per exemple paraules clau ( for , while ), noms de variables ( foo ), operadors ( + , - , « ).
  • Anàlisi L'anàlisi pren com a entrada la seqüència de fitxes generada a la fase anterior i realitza la comprovació de sintaxi. La comprovació sintàctica es fa mitjançant una gramàtica . El resultat d’aquest pas és un arbre de sintaxi .
  • Anàlisi semàntica L’anàlisi semàntica s’ocupa de comprovar el significat de les instruccions presents al codi d’entrada. Les comprovacions típiques d’aquesta fase són la comprovació de tipus , és a dir, la comprovació que els identificadors s’han declarat abans d’utilitzar-se, etc. Com a suport a aquest pas, es crea una taula de símbols ( taula de símbols) que conté informació sobre tots els elements simbòlics trobats, com ara el nom, l' abast , el tipus (si hi ha), etc. El resultat d’aquesta fase és l’ arbre d’anàlisi abstracta (AST).
  • Generació del codi intermedi: el codi intermedi es genera a partir de l’arbre de sintaxi.

Etapa final

L'etapa final també es divideix en diverses fases:

  • Optimització del codi intermedi.
  • Generació del codi de destinació: en aquesta fase el codi es genera en la forma de l'idioma de destinació. Sovint, l'idioma de destinació és un idioma de màquina .

Esquema resum

Flux Activitats
Codi font Edició
Analitzador lèxic Anàlisi lèxic
Testimoni
Analitzador Anàlisi sintàctica
Arbre de sintaxi
Analitzador semàntic Anàlisi semàntica
Arbre de sintaxi abstracte
Generador de codi intermedi
codi intermedi
Optimitzador de codi intermedi
codi intermedi
Generador de codi objectiu
codi de destinació

Nota

  1. Els primers compiladors COBOL del món Arxivat el 20 de febrer de 2012 a Internet Archive .
  2. ^ AIM-39 , a ai.mit.edu . Consultat el 4 de novembre de 2005 (arxivat de l' original el 13 de setembre de 2006) .

Bibliografia

  • Alfred V. Aho, Ravi Sethi i Jeffrey D. Ullman, compiladors. Principis, tècniques i eines , Milan, Pearson, 2006. ISBN 978-88-7192-559-2

Articles relacionats

Altres projectes

Enllaços externs

Control de l'autoritat Thesaurus BNCF 2330 · LCCN (EN) sh86007588 · GND (DE) 4148248-7 · BNF (FR) cb120631538 (data) · BNE (ES) XX532454 (data) · NDL (EN, JA) 01.191.219
Informàtica Portal de TI : accediu a les entrades de Viquipèdia relacionades amb TI