Está en la página 1de 3

ngel Antonio Carvajal C.

Jess Antonio Hoyos Perdomo COMPILADOR SENCILLO DE UNA PASADA COMPILADOR SENCILLO DE UNA PASADA Examina el cdigo fuente una vez, generando el cdigo o programa objeto. ANALISIS LEXICO En un compilador, el anlisis lineal se llama anlisis lxico o exploracin Por ejemplo, en el anlisis lxico los caracteres de la proposicin de asignacin siguiente: Posicin:= inicial + velocidad * 60 Se agruparan en los componentes lxicos siguientes: El identificador posicin. El smbolo de asignacin := El identificador inicial. El signo suma El identificador velocidad El signo de multiplicacin El numero 60 Los espacios en blanco que separan los caracteres de estos componentes lxicos normalmente se eliminan durante el anlisis lxico. La fase de anlisis lxico lee los caracteres en el programa fuente y los agrupa en una cadena de componentes lxico en los que cada componente representa una secuencia lgicamente coherente de caracteres, como un identificador, una palabra clave (if, While, etc), un carcter de puntuacin, o un operador de varios caracteres, como := . La secuencia de caracteres que forma un componente lxico se denomina l exema del componente A ciertos componentes lxicos se les agregara un valor lxico. As, cuando se encuentra un identificador como velocidad, el analizador lxico no solo genera un componente lxico, por ejemplo: id, sino que tambin introduce el lexema velocidad en la tabla de smbolos, si aun no estaba all. El valor lxico asociado con esta aparicin de id seala la entrada de la tabla de smbolos correspondiente a velocidad. En esta seccin, se usaran id 1 , id 2 e id 3 , para posicin, inicial y velocidad, respectivamente, para enfatizar que la representacin interna de un identificador es diferente de la secuencia de caracteres que forman el identificador. Por tanto, la representacin Posicin:= inicial + velocidad * 60 despus del anlisis lxico queda sugerida por: id 1 := id 2 + id 3 * 60 Se deberan construir componentes lxicos para el operador de varios caracteres := y el numero 60, para reflejar su representacin

interna. En id 1 := id 2 + id 3 * 60 ya se introdujeron las fases segunda y tercera: los anlisis sintctico y semntico. El anlisis sintctico impone una estructura jerrquica a la cadena de componentes lxicos, que se representara por medio de arboles sintcticos as: Id 1 Id 2 Id 3 60 := + * a) Una estructura de datos tpica para el rbol sera la siguiente: := + * 1 Id 2 Id 3 Id 60 num En la que un nodo interior es un registro con un campo para el operador y dos campos que contienen apuntadores a los registros de los hijos izquierdo y derecho. Una hoja es un registro con dos o mas campos, una para identificar el componente lxico de la hoja, y los otros para registrar informacin sobre el componente lxico. Se puede tener informacin adicional sobre las construcciones del lenguaje aadiendo mas campos a los registros de los nodos. ANALISIS SINTACTICO Tambin llamado anlisis jerrquico. Este implica agrupar los componentes lxicos del programa fuente en frases gramaticales que el compilador utiliza para sintetizar la salida. Por lo general las frases gramaticales del programa fuente se representan mediante un rbol de anlisis sintctico como el de la siguiente figura: Proposicin de asignacin Expresin Expresin Expresin Expresin Identificador Identificador Posicin Inicial Velocidad 60 := + * Expresin Identificador Numero En la expresin inicial + velocidad * 60, la frase velocidad * 60 es una unidad lgica, porque las convenciones usuales de las expresiones aritmticas indican que la multiplicacin se hace antes que la suma. Puesto que la expresin inicial + velocidad va seguida de un *, no se agrupa en una sola frase independiente. La estructura jerrquica de un programa normalmente se expresa utilizando reglas recursivas. Por ejemplo, se pueden dar las siguientes reglas como parte de la definicin de expresiones: Cualquier identificador es una expresin Cualquier nmero es una expresin. Si expresion 1 y expresion 2 son expresiones, entonces tambin lo son Expresion 1 + Expresion 2 ( Expresion 1 )

Las reglas a) y b) son reglas bsicas, mientras que la regla c) define expresiones en funcin de operadores aplicados a otras expresiones. As, por la regla a), inicial y velocidad son expresiones. Por la regla b), 60 es una expresin, mientras que por la regla c), primero podemos inferir que velocidad * 60 es una expresin, y finalmente, que inicial + velocidad * 60 tambin es una

expresin. De manera similar, muchos lenguajes definen recursivamente las proposiciones mediante reglas como: Si Identificador 1 es un identificador y Expresion 1 es una expresin, entonces Identificador 1 := Expresion 2 es una proposicin Si Expresion 1 es una expresin y Proposicion 2 es una proposicin, entonces While ( expresin 1 ) do proposicion 2 If ( expresin 1 ) then proposicion 2 son proposiciones. La divisin entre anlisis lxico y anlisis sintctico es algo arbitraria. Generalmente se elige una divisin que simplifique la tarea completa del anlisis. Un factor para determinar la divisin es si una construccin del lenguaje fuente es inherentemente recursiva o no. Las construcciones lxicas no requieren recursin, mientras que las construcciones sintcticas suelen requerirla. Las gramticas independientes del contexto son una formalizacin de reglas recursivas que se pueden usar para guiar el anlisis sintctico. Por ejemplo, no se requiere recursin para reconocer los identificadores, que suelen ser cadenas de letras y dgitos que comienzan con una letra. Normalmente, se reconocen los identificadores por el simple examen del flujo de entrada, esperando hasta encontrar un carcter que no sea ni letra ni digito, y agrupando despus todas las letras y dgitos encontrados hasta ese punto en un componente lxico identificador. Los caracteres asi agrupados se registran en una tabla, llamada tabla de smbolos, y se retiran de la entrada, para que pueda empezar el procesamiento del siguiente elemento lxico. Por otra parte, esta clase de anlisis lxico lineal no es suficientemente poderoso para analizar expresiones o proposiciones. Por ejemplo, no podemos emparejar de manera apropiada los parntesis de las expresiones, o las palabras begin y end en proposiciones sin imponer alguna clase de estructura jerrquica o de anidamiento a la entrada. El rbol de anlisis sintctico de la figura anterior describe la estructura sintctica de la entrada. Una representacin interna ms comn de esta estructura es la que da el rbol sintctico de la figura a) Posicin Inicial Velocidad 60 := + * a) Entareal Posicin Inicial Velocidad 60 := + * TABLA DE SIMBOLOS Un compilador necesita guardar y usar la informacin de los objetos que se va encontrando en el texto fuente, como variables, etiquetas, declaraciones de tipos, etc. Esta informacin se almacena en una estructura de datos interna conocida como tabla de smbolos. El compilador debe desarrollar una serie de funciones relativas a la manipulacin de esta tabla como insertar un nuevo elemento en ella, consultar la informacin relacionada con un smbolo, borrar un elemento, etc. Como se tiene que acceder mucho a la tabla de smbolos los accesos deben ser lo ms rpidos posible para que la compilacin sea eficiente. GRAMATICA TIPO CERO Una cadena de componentes lxicos es una secuencia de cero o ms componentes lxicos. Si la cadena posee cero componentes entonces se dice que es una cadena vaca y se escribe .

También podría gustarte