Está en la página 1de 5

#gcc hello.c -o hello.

exe -fsyntax-only
hello.c: In function `main:
hello.c:3: i undeclared
hello.c:8: unterminated string of char
hello.c:9: undefined reference to print
ALeF. Introduccin alos compiladores. 2 Csar Ignacio Garca Osorio. Universidad de Burgos.
Compilador
Programa fuente en
lenguaje fuente
Compilador
Mensajes de error
y diagnostico
Programa objeto en
lenguaje objeto
Un compilador es un programa que traduce un
programa llamado programa fuente escrito en un cierto
lenguaje denominado lenguaje fuente a un programa
objeto en lenguaje objeto. Adems el compilador emite
unos ciertos mensajes de error.
Un compilador es un programa que traduce un
programa llamado programa fuente escrito en un cierto
lenguaje denominado lenguaje fuente a un programa
objeto en lenguaje objeto. Adems el compilador emite
unos ciertos mensajes de error.
ALeF. Introduccin alos compiladores. 3 Csar Ignacio Garca Osorio. Universidad de Burgos.
mbitos de utilizacin 1
Los editores de texto de sintaxis resaltada, que facilitan la
edicin de programas.
Los programas formateadores de texto (como por ejemplo TeX y LaTeX,
que a partir del documento y de los comandos de formateado permiten obtener un fichero adecuado
para su visualizacin o impresin).
Verificadores estticos de sintaxis (como lint) que permiten
detectar muchos errores antes de la compilacin. (Algo parecido a lo que se
obtiene con la opcin -fsyntax-only del compilador de GNU gcc).
Los interpretes (para lenguajes como Lispo Basic, o para programas con sus propios
lenguajes interpretados como Derive o Mathematica).
Lenguajes de macros de aplicaciones extensibles(Schemeen el mundo
GNU y Visual Basic for Applicationsen el mundo Microsoft Windows).
Las tcnicas de construccin de compiladores se utilizan
tambin en otros muchos mbitos
Las tcnicas de construccin de compiladores se utilizan
tambin en otros muchos mbitos
ALeF. Introduccin alos compiladores. 4 Csar Ignacio Garca Osorio. Universidad de Burgos.
mbitos de utilizacin 2
Lenguajes de scripts y de pegamento (perl, tcl/tk, phyton) que
permiten el rpido desarrollo de aplicaciones con partes escritas en
distintos lenguajes.
El anlisis de los ficheros de configuracin requeridos en
muchos modernos sistemas (ficheros .ini de Microsoft Windows o los
ficheros de recursos de las X).
Compiladores de circuitos de silicio (que a partir de lenguajes especiales
que describen el trazado de los circuitos impresos obtienen lasmscaras para la
obtencin del circuito impreso mediante tcnicas fotogrficas).
Lenguajes de consulta a bases de datos.
Anlisis de especificaciones de protocolos de comunicacin en
lenguajes formales de especificacin (como el Abstract Syntax Notation-
ASN.1).
ALeF. Introduccin alos compiladores. 5 Csar Ignacio Garca Osorio. Universidad de Burgos.
mbitos de utilizacin 3
Preprocesadores, procesan un texto fuente modificndolo
en cierta forma previamente a la compilacin. (Por ejemplo
muchos compiladores admiten un conjunto de macroinstrucciones ajenas al
lenguaje en s que indican al compilador si tiene que incluir algn fichero
externo, si ha de hacer o no un listado completo de la compilacin, ...)
Traductores de lenguaje natural, seran los que
tradujeran un lenguaje natural en otro, por ejemplo espaol
a ingls. (Esto en la actualidad no se ha conseguido debido
fundamentalmente a la ambigedad del lenguaje natural. Los mayores logros
en la materia siempre trabajan con un subconjunto del lenguaje natural,
limitando las construcciones sintcticas vlidas y/o el vocabulario. Este tema
se aborda generalmente mediante tcnicas de inteligencia artificial.)
ALeF. Introduccin alos compiladores. 6 Csar Ignacio Garca Osorio. Universidad de Burgos.
Un poco de historia 1
Primeras mquinas muy pequeas y sencillas. Programadas usando
secuencias de dgitos binarios.
En seguida se vio que era mucho mejor utilizar cdigos nemotcnicos
para las instrucciones mquina. As nacieron los lenguajes
ensambladores. Al principio traducidos a mano.
A finales de los 40 se vio que la traduccin de los cdigos
nemotcnicos a cdigo mquina la podan hacer los propios
ordenadores mediante programas ensambladores.
Con el tiempo se desarrollaron lenguajes ms complejos, conocidos
como autocodes (autocdigos), permitan describir los programas de
forma ms concisa. Cadainstruccin del autocodepoda representar
varias instrucciones en cdigo mquina. Los programas para trasladar
estos primeros lenguajes de alto nivel en cdigo mquina eran ms
complejos que los ensambladores se llamaron compiladores.
ALeF. Introduccin alos compiladores. 7 Csar Ignacio Garca Osorio. Universidad de Burgos.
Un poco de historia 2
Durante los 50 los lenguajes de alto nivel evolucionaron para describir
los problemas independientemente del cdigo mquinade los
ordenadores utilizados (Por ejemplo, en FORTRAN IV el nmero mximo de
dimensiones de un arrayestaba limitado a 3, en parte porque la mquina objetivo, la
IBM 709, tena slo 3 registros para indexar los arrays. Incluso en C, diseado a
mediado de los 70, el operador de incremento ++, estaba motivadopor la existencia del
cdigo mquina equivalente en la PDP-11).
Algol 60, que en realidad apareci en el 58, fue el precursor deun
nuevo enfoque en el diseo de lenguajes de alto nivel. Se dise
teniendo en mente la resolucin de problemasy se ignoraron las
cuestiones relativas a como debera ser traducido para ejecutarse en
una mquina real.
La mayora de los lenguajes modernos han sido diseados
independientemente de una arquitectura de mquina concreta.
La mayora de los lenguajes modernos han sido diseados
independientemente de una arquitectura de mquina concreta.
ALeF. Introduccin alos compiladores. 8 Csar Ignacio Garca Osorio. Universidad de Burgos.
Uso de lenguajes de alto nivel
Ventajas Desventajas
Mejora de productividad
de los programadores
Reduccin de errores
lgicos
Facilidad de depurado
Programas mas lentos que
los obtenidos en
ensamblador
Mayor tamao de los
programas obtenidos
Los lenguajes de alto nivel compilados estn
en la actualidad bien establecidos.
Los lenguajes de alto nivel compilados estn
en la actualidad bien establecidos.
ALeF. Introduccin alos compiladores. 9 Csar Ignacio Garca Osorio. Universidad de Burgos.
Interpretar versus compilar
Hay dos maneras de ejecutar un programa escrito en un lenguaje
de alto nivel.
Compilacin: traducirlo todo el programa a otro programa equivalente en cdigo
mquina del ordenador. Entonces se ejecuta el programa obtenido.
Interpretacin: interpretar las instrucciones del programa escrito en lenguajede
alto nivel y ejecutarlas una por una.
Interprete Compilador
Fcil localizacin de errores. Difcil localizacin de errores.
Cada vez que se ejecuta el
programa es necesaria su
interpretacin.
Slo es necesaria una
compilacin. Y una vez realizada,
la velocidad de ejecucin es alta.
Adecuado en la etapa de
desarrollo y depuracin.
Adecuado cuando no hay ms
errores (etapa de explotacin)
ALeF. Introduccin alos compiladores. 10 Csar Ignacio Garca Osorio. Universidad de Burgos.
Estructura de un compilador 1
Front end o etapa inicial
Back end o etapa final
ALeF. Introduccin alos compiladores. 11 Csar Ignacio Garca Osorio. Universidad de Burgos.
Estructura de un compilador 2
El proceso de compilacin se puede dividir en una serie de fases, que pueden
llevarse a cabo simultneamente o consecutivamente y cada una delas cuales
transforma el programa fuente de una representacin en otra.
En la prctica se pueden agrupar algunas fases, y las representaciones intermedias
entre las fases agrupadas no necesitan ser construidas explcitamente.
En la prctica se pueden agrupar algunas fases, y las representaciones intermedias
entre las fases agrupadas no necesitan ser construidas explcitamente.
front end = a. lxico +a. sintctico +a. semntico
back end = opt. de cod. intermedio + gen. de cod. + opt. de cod
(middle end = generacin de cdigo intermedio)
Si el front end(etapa de anlisis o etapa inicial), que comprende aquellas
fases que dependen principalmente del lenguaje fuente, se disea
adecuadamente. Es posible usar distintos back end(etapa de sntesis o etapa
final), que incluye las fases que dependen de la mquina objeto, de modo que
se puede obtener cdigo para distintas mquinas.
ALeF. Introduccin alos compiladores. 12 Csar Ignacio Garca Osorio. Universidad de Burgos.
Etapa de anlisis
La etapa de anlisis (front end o etapa inicial) agrupa
aquellas fases que dependen principalmente del lenguaje lenguaje
fuente fuente, y comprende:
El analizador lxico (tambin llamada scanner): agrupar los caracteres
individuales en entidades lgicas.
El analizador sintctico (tambin llamado parser) analiza la estructura
general de todo el programa, agrupando las entidades simples
identificadas por el scanner en construcciones mayores, como sentencias,
bucles, rutinas, que componen el programa completo. Normalmente se
utiliza la representacin de rboles sintcticos para reflejar dicha
estructura.
Una vez determinada la estructura del programa se puede analizar su
significado (semntica) mediante el analizador semntico. Se determina
que variables almacenaran enteros, cuales nmero en coma flotante, si el
acceso a los arrayscae dentro del rango fijado en su definicin, ... , etc.
ALeF. Introduccin alos compiladores. 13 Csar Ignacio Garca Osorio. Universidad de Burgos.
Etapa de sntesis
La etapa de sntesis (back endo etapa final) agrupa
aquellas fases que dependen principalmente de la mquina mquina
objetivo objetivo, y comprende:
El optimizador de cdigo intermedio que transforma la
representacin intermedia en otra equivalente pero ms eficiente.
El generador de cdigo genera un programa equivalente para su
ejecucin en la mquina objetivo, aadindole posiblemente
rutinas de biblioteca y cdigo de inicializacin.
Finalmente puede haber un optimizador de cdigo para mejorar
an ms el cdigo generado.
ALeF. Introduccin alos compiladores. 14 Csar Ignacio Garca Osorio. Universidad de Burgos.
El manejador de errores y
el administrador de la tabla de smbolos
Un compilador tiene que tener un determinado
comportamiento ante programas errneos. Este proceso se
agrupa en una fase llamada manejador de errores. Cada
una de las fases anteriores interacciona con el manejador
de errores.
Otro elemento en la compilacin es la tabla de smbolos a
la que acceden cada una de las fases a travs del
administrador de la tabla de smbolos . En la tabla de
smbolos se almacena informacin sobre los distintos
identificadores. (De variables, constantes, funciones y procedimientos,
como: tipo, memoria asignada, mbito, alcance, ..., etc. Las fases anteriores
introducen estas informacin sobre los identificadores en la tabla de smbolos
y despus la utilizan de varias formas).
ALeF. Introduccin alos compiladores. 15 Csar Ignacio Garca Osorio. Universidad de Burgos.
Proceso de compilacin 1
posicion := inicial + vel * 2
Analizador lxico
Analizador sintctico
<ident, posicion><oper, :=>
<ident, inicial><oper, +><ident, vel>
<oper, *><const, 2>
:=
+
*
id
1
id
2
id
3 2
Analizador semntico
temp1 := entareal(2)
temp2 := id3 + temp1
temp3 := id2 + temp2
id1:= temp3
temp1 := id3 * 2.0
id1:= id2 + temp1
MOVF id3, R2
MULF #60.0, R2
MOVF id2, R1
ADDF R2, R1
MOVF R1, id1
Generador de cdigo intermedio
Optimizador de cdigo intermedio Generador de cdigo
TABLA DE SMBOLOS
1 posicin . . .
2 inicial . . .
3 vel . . .
4
2
entareal
:=
+
*
id
1
id
2
id
3
id
1
:= id
2
+ id
3
* 2
ALeF. Introduccin alos compiladores. 16 Csar Ignacio Garca Osorio. Universidad de Burgos.
Entorno de trabajo de un compilador
biblioteca.
archivos objeto
relocalizables
Ejecutable
Ensamblador
Editor de carga y enlace
cdigo mquina relocalizable
Compilador
Preprocesador
Editor
estructura del programa fuente
programa fuente
programa objeto en lenguaje ensamblador
ALeF. Introduccin alos compiladores. 17 Csar Ignacio Garca Osorio. Universidad de Burgos.
Construccin de un compilador
En la construccin de un compilador se puede
proceder siguiendo varios enfoques, pudindose
escribir:
en lenguaje ensamblador, con lo que se consiguen
compiladores muy eficientes pero difciles de mantener.
en un lenguaje de alto nivel, con lo que se hace ms
fcil el mantenimiento, pero an requiere mucho tiempo
de desarrollo.
utilizando herramientas de construccin de
compiladores como lex y yacc.
ALeF. Introduccin alos compiladores. 18 Csar Ignacio Garca Osorio. Universidad de Burgos.
Herramientas
Herramientas formales:
Gramticas.
Mquinas de Turing.
Autmatas finitos deterministas y no
deterministas.
Autmatas de pila.
Anlisis LL, LR, SLR y LALR.
Herramientas de programacin:
Lex/flex
Yacc/bison