Anda di halaman 1dari 5

LAS TABLAS DE SIMBOLOS Las tablas de smbolos (tambin llamadas tablas de identificadores y tablas de nombres), realizan dos importantes

funciones en el proceso de traduccin: verificar que la semntica sea correcta y ayudar en la generacin apropiada de cdigo. Ambas funciones se realizan insertando o recuperando desde la tabla de smbolos los atributos de las variables usadas en el programa fuente. Estos atributos, tales como: el nombre, tipo, direccin de almacenamiento y dimensin de una variable, usualmente se encuentran explcitamente en las declaraciones o ms implcitamente a travs del contexto en que aparecen los nombres de variables en el programa. Una de las estructuras de datos que se encuentran relacionadas con las fases del proceso de compilacin es la tabla de smbolos, la cual tiene como propsito registrar informacin que se comparte entre varias etapas y que permite administrar los recursos asociados a las entidades que manipular el programa. La tabla de smbolos tiene tpicamente la siguiente estructura: Una tabla de smbolos puede conceptualizarse como una serie de renglones, cada uno de los cuales contiene una lista de valores de atributos que son asociados con una variable en particular. Las clases de los atributos que aparecen en una tabla de smbolos dependen en algn grado de la naturaleza del lenguaje de programacin para el cual se escribe el compilador. Por ejemplo, un lenguaje puede ser sin tipos, y por lo tanto el atributo tipo no necesita aparecer en la tabla. Similarmente, la organizacin de la tabla de smbolos variar dependiendo de las limitaciones de memoria y tiempo de acceso MANEJO DE ERRORES Es una de las misiones ms importantes de un compilador, aunque, al mismo tiempo, es lo que ms dificulta su realizacin. A veces unos errores ocultan otros. A veces un error provoca una avalancha de muchos errores que se solucionan con el primero. Es conveniente un buen manejo de errores, y que el compilador detecte todos los errores que tiene el programa y no se pare en el primero que encuentre. Hay, pues, dos criterios a seguir a la hora de manejar errores: o Pararse al detectar el primer error. o Detectar todos los errores de una pasada.
ANLISIS LXICO El analizador lxico, tambin conocido como scanner, lee los caracteres uno a uno desde la entrada y va formando grupos de caracteres con alguna relacin entre s (tokens), que constituirn la entrada para la siguiente etapa del compilador. Cada token representa una secuencia de caracteres que son tratados como una nica entidad. Por ejemplo, en Pascal un token es la palabra reservada BEGIN, en C: WHILE, etc. Hay dos tipos de tokens: tiras especficas, tales como palabras reservadas (if, while, begin, etc.), el punto y coma, la asignacin, los operadores aritmticos o lgicos, etc.; tiras no especficas, como identificadores, constantes o etiquetas. Se considera que un token tiene dos partes componentes: el tipo de token y su valor. Las tiras especficas slo tienen tipo (lo que representan), mientras que las tiras no especficas tienen tipo y valor. Por ejemplo, si "Contador" es un identificador, el tipo de token ser identificador y su valor ser la cadena "Contador". El Analizador Lxico es la etapa del compilador que va a permitir saber si es un lenguaje de formato libre o no. Frecuentemente va unido al analizador sintctico en la misma pasada, funcionando entonces como una subrutina de este ltimo. Ya que es el que va leyendo los caracteres del programa, ignorar aquellos elementos innecesarios para la siguiente fase, como los tabuladores, comentarios, espacios en blanco, etc.

ANLISIS SINTCTICO El analizador sintctico, tambin llamado parser, recibe como entrada los tokens que le pasa el Analizador Lxico (el analizador sintctico no maneja directamente caracteres) y comprueba si esos tokens van llegando en el orden correcto (orden permitido por el lenguaje). La salida "terica" de la fase de anlisis sintctico sera un rbol sintctico. As pues, sus funciones son: Aceptar lo que es vlido sintcticamente y rechazar lo que no lo es. Hacer explcito el orden jerrquico que tienen los operadores en el lenguaje de que se trate. Por ejemplo, la cadena A/B*C es interpretada como (A/B)*C en FORTRAN y comoA/(B*C) en APL. Guiar el proceso de traduccin (traduccin dirigida por la sintaxis). Anlisis Semntico El anlisis semntico es posterior al sintctico y mucho ms difcil de formalizar que ste. Se trata de determinar el tipo de los resultados intermedios, comprobar que los argumentos que tiene un operador pertenecen al conjunto de los operadores posibles, y si son compatibles entre s, etc. En definitiva, comprobar que el significado de lo que se va leyendo es vlido. La salida "terica" de la fase de anlisis semntico sera un rbol semntico. Consiste en un rbol sintctico en el que cada una de sus ramas ha adquirido el significado que debe tener. En el caso de los operadores polimrficos (un nico smbolo con varios significados), el anlisis semntico determina cul es el aplicable.

Analizando en detalle el proceso de compilacin, se divide en dos grandes fases, una de Anlisis y la otra de Sntesis. Fase de Anlisis: En el llamado anlisis lexicogrfico o lxico, el compilador revisa y controla que las "palabras" estn bien escritas y pertenezcan a algn tipo de token (cadena) definido dentro del lenguaje, como por ejemplo que sea algn tipo de palabra reservada, o si es el nombre de una variable que este escrita de acuerdo a las pautas de definicin del lenguaje. En esta etapa se crea la tabla de smbolos, la cual contiene las variables y el tipo de dato al que pertenece, las constantes literales, el nombre de funciones y los argumentos que reciben etc. En el anlisis sintctico como su nombre lo indica se encarga de revisar que los tokens estn ubicados y agrupados de acuerdo a la definicin del lenguaje. Dicho de otra manera, que los tokens pertenezcan a frases gramaticales validas, que el compilador utiliza para sintetizar la salida. Por lo general las frases gramaticales son representadas por estructuras jerrquicas, por medio de rboles de anlisis sintctico. En esta etapa se completa la tabla de smbolos con la dimensin de los identificadores y los atributos necesarios etc. El anlisis semntico se encarga de revisar que cada agrupacin o conjunto de token tenga sentido, y no sea un absurdo. En esta etapa se rene la informacin sobre los tipos para la fase posterior, en esta etapa se utiliza la estructura jerrquica de la etapa anterior y as poder determinar los operadores, y operandos de expresiones y preposiciones. Fase de Sntesis: Etapa de generacin de cdigo intermedio, aunque algunos compiladores no la tienen, es bueno saber de su existencia, en esta etapa se lleva el cdigo del programa fuente a un cdigo interno para poder trabajar mas fcilmente sobre l. Esta representacin interna debe tener dos propiedades, primero debe ser fcil de representar y segundo debe ser fcil de traducir al cdigo objeto. En la etapa de optimizacin de cdigo, se busca obtener el cdigo mas corto y rpido posible, utilizando distintos algoritmos de optimizacin. Etapa de generacin de cdigo, se lleva el cdigo intermedio final a cdigo maquina o cdigo objeto, que por lo general consiste en un cdigo maquina relocalizable o cdigo ensamblador. Se selecciona las posiciones de memoria para los datos (variables) y se traduce cada una de las instrucciones intermedias a una secuencia de instrucciones de maquina puro. La tabla de smbolos no es una etapa del proceso de compilacin, sino que una tarea, una funcin que debe realizar el proceso de compilacin. En ella se almacenan los identificadores que aparecen en el cdigo fuente puro, como as tambin los atributos de los mismos, su tipo, su mbito y en el caso de los procedimientos el nmero de argumentos el tipo de los mismos etc. En otras palabras una tabla de smbolos es una estructura de datos, que contiene un registro por cada identificador, y sus atributos. La tabla de smbolo es accedida tanto para escritura como parar lectura por todas las etapas. Detector de errores o manejador de errores, al igual que la tabla de smbolos no es una etapa del proceso de compilacin, si no que es una funcin, muy importante, pues al ocurrir un error esta funcin debe tratar de alguna forma el error para as seguir con el proceso de compilacin (la mayora de errores son detectados en las etapas de anlisis lxico, anlisis sintctico, anlisis semntico).

Anlisis Lxico El analizador lxico lee los caracteres del programa fuente, y verifica que correspondan a una secuencia lgica (identificador, palabra reservada etc.). Esta secuencia de caracteres recibe el nombre componente lxico o lexema. En este caso el analizador lxico verifica si el identificador id1 (nombre interno para "suma") encontrado se halla en la tabla de smbolos, si no esta produce un error porque todava no fue declarado, si la preposicin hubiese sido la declaracin del identificador "suma" en lenguajes C, C++ (int suma;) el analizador lxico agregaria un identificador en la tabla de smbolos, y as sucesivamente con todos los componentes lxicos que aparezcan. id1= id2+ id3 * 10 Anlisis Sintctico El analizador sintctico impone una estructura jerrquica a la cadena de componentes lxicos, generada por el analizador lxico, que es representada en forma de un rbol sintctico. = / \ id1 + / \ id2 + / \ id3 10 Anlisis Semntico El analizador semntico verificara en este caso que cada operador tenga los operandos permitidos. = / \ id1 + / \ id2 + / \ id3 tipo_ent | 10 Generador de cdigo intermedio En esta etapa se lleva la preposicin a una representacin intermedia como un programa para una maquina abstracta. temp1= tipo_ent(10) temp2= id3 * temp1 temp3= id2 + tem2 id1= temp3 Optimizacin de cdigo

El cdigo intermedio obtenido es representado de una forma mas optima y eficiente. temp1= id3 * 10.0 id1= id2 + temp1 Generador de cdigo Finalmente lleva el cdigo intermedio a un cdigo objeto que en este caso es un cdigo relocalizable o cdigo ensamblador (tambin llamado cdigo no enlazado). MOVF id3, R2 MULT #10.0, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1 Este el cdigo objeto obtenido que es enviado al modulo de ensamblado. Para entender todo esto veamos un ejemplo utilizando como lenguaje en este caso al popular lenguaje de programacin C creado por Kernighan y Ritchie. El siguiente cdigo esta definido de acuerdo al standard ANSI C

Anda mungkin juga menyukai