Sie sind auf Seite 1von 6

INTRODUCCION

Conceptos bsicos sobre compiladores.


Un traductor es un programa que recibe como entrada un texto escrito en un lenguaje,
llamado fuente, y genera como salida otro texto equivalente pero escrito en un lenguaje
diferente denominado objeto.
En el caso de que el lenguaje fuente sea un lenguaje de programacin de alto nivel y
el objeto sea un lenguaje de bajo nivel (ensamblador o cdigo mquina), a dicho traductor se
le denomina compilador.
Un compilador es un programa complejo en el que no es fcil distinguir claramente
unas partes de otras. Sin embargo, se ha conseguido establecer una divisin lgica del
compilador en fases, lo que permite formalizar y estudiar por separado cada una de ellas. En
la prctica, estas fases no siempre se ejecutan secuencialmente sino que lo hacen
simultneamente, pudiendo ser unas fases tratadas como subrutinas de otras.
Anlisis lxico.
El analizador lxico, tambin conocido como scanner, lee los caracteres del programa
fuente, uno a uno, desde el archivo de entrada y va formando grupos de caracteres con
alguna relacin entre si (tokens). Cada token es tratado como una nica identidad,
constituyendo la entrada de la siguiente fase del compilador. Existen diferentes tipos de
tokens y a cada uno se le puede asociar un tipo y, en algunos casos, un valor. Los tokens se
pueden agrupar en dos categoras:

Cadenas especficas, como las palabras reservadas (if, while,), signos de


puntuacin ( . , = ), operadores aritmticos (+, *, ) y lgicos (AND, OR, ), etc.
Habitualmente, las cadenas especficas no tienen asociado ningn valor, solo su tipo.

Cadenas no especficas, como los identificadores o las constantes numricas o de


texto. Estas cadenas siempre tienen tipo y valor. Por ejemplo, si dato es el nombre de
una variable, el tipo del token ser identificador y su valor ser dato.

Frecuentemente el analizador lxico funciona como una subrutina del analizador sintctico.
Para el diseo de analizadores lxicos se utilizan los Autmatas finitos.
Anlisis sintctico.
El analizador sintctico, tambin llamado parser, recibe como entrada los tokens que
genera el analizador lxico y comprueba si estos tokens van llegando en el orden correcto.
Siempre que no se hayan producido errores, la salida terica de esta fase del compilador
ser un rbol sintctico. Si el programa es incorrecto se generarn los mensajes de error
correspondientes. Para el diseo de los analizadores sintcticos se utilizan los Autmatas de
pila.
Ejemplo:
1

Anlisis semntico.
El analizador semntico trata de determinar si el significado de las diferentes
instrucciones del programa es vlido. Para conseguirlo tendr que calcular y analizar
informacin asociada a las sentencias del programa, por ejemplo, deber determinar el tipo
de los resultados intermedios de las expresiones, comprobar que los argumentos de un
operador pertenecen al conjunto de los operandos posibles, comprobar que los operandos
son compatibles entre si, etc. La salida terica de esta fase ser un rbol semntico.
Generacin de cdigo intermedio.
Solo hay que construir m programas que traduzcan cada lenguaje fuente al cdigo
intermedio (front ends) y n programas que traduzcan del lenguaje intermedio a cada lenguaje
objeto (back ends). La utilizacin del lenguaje intermedio permite construir en menos tiempo
compiladores para nuevos lenguajes y para nuevos autmatas.
Optimizacin de cdigo.
La mayora de los compiladores suelen tener una fase de optimizacin de cdigo
intermedio (independiente de los lenguajes fuente y objeto), y una fase de optimizacin de
cdigo objeto (no aplicable a otros autmatas). Ejemplo de optimizacin:

Generacin de cdigo objeto.


En esta fase, el cdigo intermedio optimizado es traducido a una secuencia de
instrucciones en ensamblador o en cdigo mquina. Por ejemplo, la sentencia A:= B+C se
convertira en una coleccin de instrucciones que podran representarse asi:
LOAD B
ADD C
STORE A
Tabla de smbolos.
El compilador necesita gestionar la informacin de los elementos que se va
encontrando en el programa fuente: variables, tipos, funciones, clases, etc. Esta informacin
se almacena en una estructura de datos interna conocida como tabla de smbolos.
Control de errores.
Informar adecuadamente al programador de los errores que hay en su programa es
una de las misiones ms importantes y complejas de un compilador. El control de errores se
lleva a cabo, sobre todo, en las etapas de anlisis sintctico y semntico.

UNIDAD I. ANALISIS SEMANTICO


1.1 Arboles de expresiones.
Los rboles de expresiones representan el cdigo de nivel del lenguaje en forma de datos.
Los datos se almacenan en una estructura con forma de rbol. Cada nodo del rbol de
expresin representa una expresin, por ejemplo, una llamada al mtodo o una operacin
binaria, como
x < y.
Un rbol de expresin sirve para evaluar expresiones del tipo: (a + b)*c/d
Para que un rbol represente una expresin se deben tomar en cuenta 2 caractersticas muy
importantes:

Cualquier hoja est etiquetada slo con un operando.


Cualquier nodo interior n est etiquetado por un operador.

Al introducir la expresin debemos de tomar en cuenta las siguientes caractersticas:

La raz siempre debe ser un operador

Las hojas siempre deben ser operandos

Si un operador tiene mayor prioridad que la raz se coloca como hijo.

Si un operador tiene igual o menor prioridad que un nodo se coloca como padre.

Un nodo puede contener como hijo otro subrbol que contiene una pequea
expresin.

En los rboles de expresin, la sucesin del preorden de etiquetas nos da lo que se conoce
como la forma prefijo de una expresin.
Anlogamente, la sucesin postorden de las etiquetas de un rbol expresin nos da lo que se
conoce como la representacin postfijo de una expresin.
Finalmente, el inorden de una expresin en un rbol de expresin nos da la expresin infijo
en s misma, pero sin parntesis.

1.2 Acciones semnticas de un analizador sintctico.


Definicin de un analizador sintctico: es la fase del analizador que se encarga de revisar el
texto de entrada en base a una gramtica dada. Y en caso de que el programa de entrada
sea vlido, suministra el rbol sintctico que lo reconoce.
En teora, se supone que la salida del analizador sintctico es alguna representacin del
rbol sintctico que reconoce la secuencia de Token suministrada por el analizador lxico.
En la prctica, el analizador sintctico tambin hace:

Acceder a la tabla de smbolos (para hacer parte del trabajo del analizador semntico).

Revisin de tipos (del analizador semntico).

Generar cdigo intermedio.

Generar errores cuando se producen.

En definitiva, realiza casi todas las operaciones de la compilacin. Este mtodo de


trabajo da lugar a los mtodos de compilacin dirigidos por sintaxis.

Manejo de errores sintcticos


Los errores sintcticos son dados por una expresin aritmtica o parntesis no equilibrados.
El manejo de errores de sintaxis es el ms complicado desde el punto de vista de la creacin
de compiladores. Nos interesa que cuando el compilador encuentre un error, se recupere y
siga buscando errores. Por lo tanto el manejador de errores de un analizador sintctico tiene
como objetivos:

Indicar los errores de forma clara y precisa. Aclarar el tipo de error y su localizacin.

Recuperarse del error, para poder seguir examinando la entrada.

Tipo de gramtica que acepta un analizador sintctico


Nosotros nos centraremos en el anlisis sintctico para lenguajes basados en gramticas
formales, ya que de otra forma se hace muy difcil la comprensin del compilador, y se
pueden corregir, quizs ms fcilmente, errores de muy difcil localizacin, como es la
ambigedad en el reconocimiento de ciertas sentencias.
La gramtica que acepta el analizador sintctico es una gramtica de contexto libre:
Gramtica: G (N, T, P, S)
5

N = No terminales.
T = Terminales.
P = Reglas de Produccin.
S = Axioma Inicial.

Das könnte Ihnen auch gefallen