viernes, 17 de julio de 2009

Unidad 5
ANALIZADOR SEMANTICO
Se compone de un conjunto de rutinas independientes, llamadas por los analizadores morfológico y sintáctico.
El análisis semántico utiliza como entrada el árbol sintáctico detectado por el análisis sintáctico para comprobar restricciones de tipo y otras limitaciones semánticas y preparar la generación de código.
En compiladores de un solo paso, las llamadas a las rutinas semánticas se realizan directamente desde el analizador sintáctico y son dichas rutinas las que llaman al generador de código. El instrumento más utilizado para conseguirlo es la gramática de atributos.
En compiladores de dos o más pasos, el análisis semántico se realiza independientemente de la generación de código, pasándose información a través de un archivo intermedio, que normalmente contiene información sobre el árbol sintáctico en forma linealizada (para facilitar su manejo y hacer posible su almacenamiento en memoria auxiliar).
En cualquier caso, las rutinas semánticas suelen hacer uso de una pila (la pila semántica) que contiene la información semántica asociada a los operandos (y a veces a los operadores) en forma de registros semánticos.
CONVERSION DE TIPOS

Hay situaciones en las cuales se tiene un valor de un tipo dado y se desea almacenar ese valor en una variable de un tipo diferente. En algunos tipos es posible almacenar simplemente el valor sin una conversión de tipos; lo que se denomina conversión automática. Esto sólo es posible en Java si el compilador reconoce que la variable destino tiene la suficiente precisión para contener el valor origen, como almacenar un valor byte en una variable int. A esto se le llama ensanchamiento o promoción, dado que el tipo más pequeño se ensancha o promociona al tipo compatible más grande. Si por el contrario, se desea asignar un valor de variable int a una variable byte se necesita realizar una conversión de tipos explícita. A esto se le llama estrechamiento, dado que se estrecha explícitamente el valor para que quepa en el destino. La conversión de un tipo se realiza poniendo delante un nombre de tipo entre paréntesis, por ejemplo, (tipo) valor. El código siguiente demuestra la conversión de tipos de int a byte. Si el valor del entero fuese mayor que el rango de un byte, se reduciría al módulo (resto de la división) del rango de byte.
ADMINISTRADOR DE LA TABLA DE SIMBOLOS
“La tabla de símbolos registra información acerca de cada nombre de símbolo en un programa. Históricamente, los nombres se llamaron símbolos, más que de una tabla de nombres. En este capítulo, la palabra símbolo significa nombre. La fase de análisis semántico crea la tabla de símbolos, puesto que no es sino hasta este análisis que se tiene la suficiente información sobre un nombre para describirlo. La generación de código usa la tabla de símbolos para extraer las directivas del ensamblador, para el tipo y para el tamaño apropiados.”
Una tabla de símbolos es una estructura de datos que contiene un registro por cada identificador. El registro incluye los campos para los atributos del identificador.
El administrador de la tabla de símbolos se encarga de manejar los accesos a la tabla de símbolos, en cada una de las etapas de compilación de un programa.
MANEJO DE ERRORES SEMANTICOS

No hay comentarios:

Publicar un comentario