Documentos de Académico
Documentos de Profesional
Documentos de Cultura
COMPILERS: A FOCUS
Carlos Alberto Vanegas
avanegasc@unal.edu.co
Palabras clave: lenguaje anfitrin, lenguaje embebido, anlisis, sntesis, axiomas, parse,
token, mquina virtual, autmata.
Key words: language host, absorbed language, analysis, synthesis, axioms, parse, token,
virtual machine, robot.
Resumen
Abstract
1. Introduccin
microprocesadores reales existan, pero slo se requiere un compilador para producir cdigo
que se ejecutar en todos estos emuladores.
1.5. Intrprete: es un programa que ejecuta cada una de las instrucciones y declaraciones
que encuentra conforme va analizando el programa que le ha sido dado de entrada (sin
producir un programa objeto o ejecutable). La ejecucin consiste en llamar a rutinas ya
escritas en cdigo mquina cuyos resultados u operaciones estn asociados de manera
unvoca al significado de las instrucciones o declaraciones identificadas. Los intrpretes son
tiles para el desarrollo de prototipos y pequeos programas para labores no previstas.
Presentan la facilidad de probar el cdigo casi de manera inmediata, sin tener que recurrir a
la declaracin previa de secciones de datos o cdigo, y poder hallar errores de
programacin rpidamente.
Un conversor fuente a fuente traducen un lenguaje fuente de alto nivel a otro (por ejemplo,
Java a C++). Una aplicacin interesante de la traduccin fuente-fuente es el desarrollo e
implementacin de prototipos de nuevos lenguajes de programacin. As, por ejemplo, si se
desea definir un lenguaje especializado puede implementarse rpidamente mediante su
traduccin a un lenguaje convencional de alto nivel.
2. Estructura de un Compilador.
En un compilador se pueden distinguir dos fases principales: una fase de anlisis, en la cul
se lee el programa fuente y se estudia la estructura y el significado del mismo; y otra fase
de sntesis, en la que se genera el programa objeto. Adems algunas estructuras de datos
2.1.2. Analizador Sintctico: comprueba que las sentencias que componen el texto fuente
son correctas en el lenguaje, creando una representacin interna que corresponde a la
sentencia analizada. De esta manera se garantiza que slo sern procesadas las sentencias
que pertenezcan al lenguaje fuente. Durante el anlisis sintctico, as como en las dems
etapas, se van mostrando los errores que se encuentran.
Ejemplo: El esquema de la sentencia anterior corresponde al de una sentencia de asignacin
del lenguaje Java. Estas sentencias son de la forma:
<id> <:=> <EXPRESION>
y la parte que se denomina <EXPRESION> es de la forma:
traducir al lenguaje objeto. Esta fase puede no existir si se genera directamente cdigo
mquina, pero suele ser conveniente emplearla.
Ejemplo: Consideremos, por ejemplo, un cdigo intermedio de tercetos1, la sentencia
traducida a este cdigo intermedio quedara :
temp1 = floatValue(2)
temp2 = id3 * temp1
temp3 = id2 + temp2
id1 = temp3
2.2.3. Generador de Cdigo: a partir de los anlisis anteriores y de las tablas que estos
anlisis van creando durante su ejecucin produce un cdigo o lenguaje objeto que es
directamente ejecutable por la mquina. Es la fase final del compilador. Las instrucciones
del cdigo intermedio se traducen una a una en cdigo mquina.
1
llamado as porque en cada una de sus instrucciones aparecen como mximo tres operandos
Nota: Cada instruccin de cdigo intermedio puede dar lugar a ms de una de cdigo
mquina.
2.3. Tabla de Smbolos
Es el medio de almacenamiento de toda la informacin referente a las variables y objetos en
general del programa que se est compilando.
Constante entera
28
Comparador <
34
Signo +
65 Asignador :=
Palabra reservada if
Relacionar los mensajes de error que produce el compilador en sus diversas fases
con la parte correspondiente del programa fuente (nmero de lnea en que
aparecen). En ciertos casos el analizador lexicogrfico se encarga tambin de
producir el listado del programa con los errores de compilacin.
Hay diversas razones por las que se separa la fase de anlisis de un compilador en anlisis
lexicogrfico y anlisis sintctico. Son las siguientes:
Analizar sintcticamente una cadena de tokens no es ms que encontrar para ella el rbol
sintctico o de derivacin que tiene como raz el axioma de la gramtica, y como nodos
terminales la sucesin ordenada de smbolos que componen la cadena analizada. En caso de
no existir este rbol sintctico, la cadena no pertenecer al lenguaje, y el analizador
sintctico ha de emitir el correspondiente mensaje de error. Existen dos formas de analizar
sintcticamente una cadena:
Errores sintcticos: Por ejemplo, una expresin aritmtica con mayor numero de
parntesis de apertura que de cierre.
Es un reconocedor de sentencias con un vocabulario T, cuya salida es el conjunto de dos valores que
podemos denotar como reconozco y no reconozco. Cuando la mquina produce el valor reconozco
significa que acepta la sentencia.
errores lexicogrficos son a los lenguajes de programacin lo que las faltas de ortografa a
los lenguajes naturales. Las siguientes situaciones producen con frecuencia la aparicin de
errores lexicogrficos:
5. Conclusiones
Bibliografa
Infografa
[5] http://www.ii.uam.es/~alfonsec
[6] http://borabora.univalle.edu.co/materias/compiladores/pl1.html
[7] http://homepage.mac.com/eravila/compiler.html