Análisis semántico: Fase que sigue al análisis sintáctico
Enviado por luiiBarrios • 10 de Enero de 2019 • Ensayo • 786 Palabras (4 Páginas) • 181 Visitas
Análisis semántico: Fase que sigue al análisis sintáctico. En esta fase se explora el árbol de sintaxis con el fin de detectar errores semánticos (Aquellos que no logra cubrir la gramática). Se trabaja con la tabla de símbolos.
Tree-Parser: Es quien proporciona de un significado coherente a lo que se ha hecho en el parcer. El chequeo semántico se encarga de que los tipos que intervienen en las expresiones sean compatibles o que los parámetros en la definición de una variable correspondan con los argumentos en la llamada.
Funciones del tree parser:
- Identificar cada tipo de instrucción y sus componentes
- Completar la tabla de símbolos
- Realizar distintas comprobaciones y validaciones
Con el analizador semántico es donde se 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.
La especificación de la semántica puede realizarse de dos formar:
- Lenguaje natural
- Especificación formal: semántica operacional, denotacional, axiomática, con atributos.
Dependiendo de las 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 operandos implicados
- Procedimientos y funciones: Comprobar el #, orden y tipo de los parámetros actuales de c/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 izq. De una asignación
- Conversiones y equivalencias de tipo: verificaciones
- Sobrecarga de operadores: detectar y solventar.
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 -> gramática de atributos.
VENTAJAS: Son más pequeños y más rápidos que los de dos o más pasos
DESVENTAJAS: No generan programas eficientes, debido al alcance limitado de la info. disponible
Compilador de dos o más pasos: Se realiza independientemente de la generación de código (Se crea un archivo por ej. Se tokeniza todo y se ponen en el archivo) y luego se lee.
En ambos caso se utiliza una pila semántica.
Gramáticas de atributo: Consiste en introducir en las reglas sintácticas ciertos símbolos adicionales no sintácticos (símbolos de acción). Generalmente los atributos se escriben después de un símbolo terminal para realizar una acción semántica (como meter a la pila). En los LL1 la introducción de los símbolos de acción en las rutinas es trivial y en los bottom-up es delicados ya que los estados del análisis se mueven simultáneamente sobre varias reglas
...