Pila semántica en un analizador sintáctico
Árbol De Expresiones o Árbol Semántico
Es una estructura jerárquica en la cual se registran las operaciones que realiza el programa fuente, en cada una de las ramas de el árbol se registra el valor o significado que este debe tener y el análisis analiza cual de los valores registrado en las ramas es aplicable
ACCIONES SEMÁNTICAS
Dependiendo del tipo de sentencias, las acciones semánticas pueden agruparse en: Sentencias de Declaración: Completar la sección de tipos de la Tabla de
Símbolos.
Sentencias “ejecutables”: Realizar comprobaciones de tipos entre los operando
implicados.
Funciones y procedimientos: Comprobar el número, orden y tipo de los
parámetros actuales en cada llamada a una función o procedimiento.
Identificación de variables: Comprobar si un identificador ha sido declarado
antes de utilizarlo.
Etiquetas: Comprobar si hay etiquetas repetidas y validación.
Constantes: Comprobar que no se utilicen en la parte izquierda de una asignación.
Conversiones y equivalencias de tipo: Verificación.
Sobrecarga de operadores y funciones: Detectar y solventar.
Acciones semánticas de un analizador sintáctico
Definición de un analizador sintáctico: es la fase del analizador que se encarga de
chequear el texto de entrada en base a una gramática dada. Y en caso de que el
programa de entrada sea válido, suministra el árbol sintáctico que lo reconoce.
En teoría, se supone que la salida del analizador sintáctico es alguna
representación del árbol sintáctico que reconoce la secuencia de Token
suministrada por el analizador léxico.
En la práctica, el analizador sintáctico también hace:
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.
Manejo de errores sintácticos
Los errores sintácticos son dados por una expresión aritmética o paréntesis no
equilibrados.
El manejo de errores de sintaxis es el más complicado desde el punto de vista de
la creación de compiladores. Nos interesa que cuando el compilador encuentre un
error, se recupere y siga buscando errores. Por lo tanto el manejador de errores
de un analizador sintáctico tiene como objetivos:
Indicar los errores de forma clara y precisa. Aclarar el tipo de error y
su localización.
Recuperarse del error, para poder seguir examinando la entrada.
No ralentizar significativamente la compilación
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 operando (y a veces a los operadores) en forma de registros semánticos.
No hay comentarios:
Publicar un comentario