Analisis Semantico Unidad I
Analisis Semantico Unidad I
Analisis Semantico Unidad I
Algoritmo
Operador
Acceder a la tabla de símbolos (para hacer parte del trabajo del analizador
semántico).
Chequeo de tipos (del analizador semántico).
Generar código intermedio.
Generar errores cuando se producen.
En definitiva, realiza casi todas las operaciones de la compilación. Este
método de trabajo da lugar a los métodos de compilación dirigidos por
sintaxis.
Los errores sintácticos son dados por una expresión aritmética o paréntesis no
equilibrados.
Gramática: G (N, T, P, S)
N = No terminales.
T = Terminales.
P = Reglas de Producción.
S = Axioma Inicial.
Comprobaciones estáticas
Características
-Diferente de la dinámica en runtime.
-Ejemplo: comprobación de tipos, flujo de control, unicidad.
Comprobaciones dinámicas
Verificación de tipos
Inferencia de tipos
Las pilas y colas son estructuras de datos que se utilizan generalmente para
simplificar ciertas operaciones de programación. Estas estructuras pueden
implementarse mediante arrays o listas enlazadas.
Pila: colección de datos a los cuales se les puede acceder mediante un extremo,
que se conoce generalmente como tope. Las pilas tienen dos operaciones
básicas:
Las pilas se utilizan en muchas aplicaciones que utilizamos con frecuencia. Las
pilas y colas son estructuras de datos que se utilizan generalmente para simplificar
ciertas operaciones de programación. Estas estructuras pueden implementarse
mediante arrays o listas enlazadas.
Al decir pila semántica no se refiere a que hay varios tipos de pila, hace referencia
a que se debe programar única y exclusivamente en un solo lenguaje, es decir, no
podemos mezclar código de C++ con Visual Basic.
Ventajas
Objetivo teórico
Las rutinas semánticas suelen hacer uso de una pila que contiene la información
semántica asociada a los operadores en forma de registros semánticos.
Reglas semánticas
La evaluación de las reglas semánticas define los valores de los atributos en los
nodos del árbol de análisis sintáctico para la cadena de entrada. Una regla
semántica también puede tener efectos colaterales, por ejemplo, imprimir un valor
o actualizar una variable global.
Compatibilidad de tipos
Durante la fase de análisis semántico, el compilador debe verificar que los tipos y
valores asociados a los objetos de un programa se utilizan de acuerdo con la
especificación del lenguaje.
Analizadores descendentes:
Bottom up
Top-down
Traducción descendente
Un atributo heredado de un símbolo debe ser calculado por una acción que
aparezca antes que el símbolo, y un atributo sintetizado del no terminal de la
izquierda se debe calcular después de que hayan sido calculados todos los
atributos de los que depende.
Obsérvese que, en general, para poder aplicar un esquema de traducción hay que
construir el árbol sintáctico y después aplicar las acciones empotradas en las
reglas en el orden de recorrido primero-profundo. Por supuesto, si la gramática es
ambigua una frase podría tener dos árboles y la ejecución de las acciones para
ellos podría dar lugar a diferentes resultados. Si se quiere evitar la multiplicidad de
resultados (interpretaciones semánticas) es necesario precisar de qué árbol
sintáctico concreto se está hablando.
1.6 Generación de la tabla de símbolo y de direcciones
Una de las estructuras de datos que se encuentran relacionadas con las fases del
proceso de compilación es la tabla de símbolos, la cual tiene como propósito
registrar información que se comparte entre varias etapas y que permite
administrar los recursos asociados a las entidades que manipulará el programa.
La tabla de símbolos tiene típicamente la siguiente estructura:
Una tabla de símbolos 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 símbolos dependen en algún grado de la naturaleza del lenguaje de
programación 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 organización de la tabla de
símbolos variará dependiendo de las limitaciones de memoria y tiempo de acceso.
1.7 Manejo de errores semánticos
A veces un error provoca una avalancha de muchos errores que se solucionan con
el primero.