viernes, 18 de octubre de 2013

ANALIZADOR SEMANTICO

TAREA_1_FERNANDEZ
FASE DE ANALISIS SEMANTICO
Esta fase revisa al árbol sintáctico junto con los atributos y la tabla de símbolos para tratar de encontrar errores semánticos. Para todo esto se analizan los operadores y operandos de expresiones y proposiciones. Finalmente reúne la información necesaria sobre los tipos de datos para la fase posterior de generación de código. En resumen la semántica corresponde al significado asociado a las estructuras formales (sintaxis) del lenguaje.
El componente más importante del análisis semántico es la verificación de tipos. Aquí, el compilador verifica si los operandos de cada operador son compatibles según la especificación del lenguaje fuente.

FUNCIONES PRINCIPALES:
1)   Identificar cada tipo de instrucciones y sus componentes.
2)   Completar la tabla de símbolos.
3)   Realizar distintas comprobaciones y validaciones:
§  Comprobaciones de tipos
§  Comprobaciones del flujo de control
§  Comprobaciones de unicidad
§  Comprobaciones de emparejamiento
El analizador semántico finaliza la fase de análisis del compilador y comienza la fase de síntesis, en la cual se comienza a generar el código objeto.


ACCIONES SEMANTICAS
Dependiendo del tipo de sentencias, las acciones semánticas pueden agruparse en:
1.    SENTENCIAS DE DECLARACION: completar la sección de los tipos de la tabla de símbolos.
2.    SENTENCIAS “EJECUTABLES”: realizar comprobaciones de tipos entre los operandos implicados.
3.    FUNCIONES Y PROCEDIMIENTOS: comprobar el número, orden y tipo de los parámetros actuales en cada llamada a una función o procedimiento.
4.    IDENTIFICACION DE VARIABLES: comprobar si un identificador ha sido declarado antes de utilizarlo.
5.    ETIQUETAS: comprobar si hay etiquetas repetidas y validación.
6.    CONSTANTES: comprobar que no se utilicen en la parte izquierda de una asignación.
7.    CONVERSIONES Y EQUIVALENCIAS DE TIPO: verificación.
8.    SOBRECARGA DE OPERADORES Y FUNCIONES: detectar y solventar.

TABLA DE SIMBOLOS
La tabla de símbolos permite que al analizador léxico devuelva un token distinto según la categoría del identificador en este contexto. Esta tabla va conteniendo un registro por cada identificador definido/declarado por el programador, añadiéndose información asociada:
§  Registra del identificador (¿mayúsculas y minúsculas¿).
§  Categoría: variable, constante, tipo, campo, procedimiento, función, parámetro, clase, etiqueta, modulo, macro, etc.
§  A que ámbito pertenece (profundidad).



ESTRUCTURA DE LA TABLA DE SIMBOLOS
A.  LOGICA: viene determinada por:

·        El tipo de ámbito (estático o dinámico)
·        Los mecanismos de ámbito del lenguaje:
                Procedimientos, bloques, herencia, módulos, espacios de nombres, registros, witch,….
·        Si se da más de una pasada.
·        Compilación separada: ficheros con tablas.

B.    IMPLEMENTACION FISICA: más eficiente suele ser la de una tabla de hash, asociada a pila de ámbitos activos.
      Truco: mover (insertar, al menos) el elemento actual a la cabeza de la lista.

C.  LAS RISTRAS: (identificadores, constantes) pueden ir en lista(s) aparte.

CHEQUEOS DE TIPOS (Y OTROS).
Un compilador debe realizar una serie de chequeos estáticos, como chequeos de tipos:
ü Consistencia: unicidad, existencia, no –ciclicidad,….
ü Equivalencia y compatibilidad de tipos.
ü Conversión explicita [cast] o forzada [coercion].
ü Inferencia de tipos (en valores).
ü Sobrecarga de funciones y operadores.
ü Funciones polimórficas.

DEFINICIONES DE TIPOS
También llamadas “expresiones de tipos”, en las que el programador desarrolla los componentes de la estructura. CUESTIONES:
1)   Puede ser conveniente construir un árbol/grafo:
§  En caso de equivalencias estructural
§  Para comprobación de no-ciclicidad:
                                                 Type    a=b;      b=a;
2)   (Descomponer en) tipos anónimos.
Las definiciones incompletas (declaraciones) son necesarias para definiciones recursivas: entrada en tabla provisionalmente “vacía” para tipo base.


No hay comentarios:

Publicar un comentario