El Análisis Semántico es la tercera fase del Compilador . El análisis semántico se asegura de que las declaraciones y declaraciones del programa sean semánticamente correctas. Es una colección de procedimientos que el analizador llama cuando lo requiere la gramática. Tanto el árbol de sintaxis de la fase anterior como la tabla de símbolos se utilizan para comprobar la coherencia del código dado. La verificación de tipos es una parte importante del análisis semántico donde el compilador se asegura de que cada operador tenga operandos coincidentes.
Analizador semántico:
utiliza el árbol de sintaxis y la tabla de símbolos para verificar si el programa dado es semánticamente consistente con la definición del lenguaje. Reúne información de tipos y la almacena en el árbol de sintaxis o en la tabla de símbolos. Esta información de tipo es utilizada posteriormente por el compilador durante la generación de código intermedio.
Errores semánticos:
los errores reconocidos por el analizador semántico son los siguientes:
- Tipo de discrepancia
- Variables no declaradas
- Mal uso del identificador reservado
Funciones del Análisis Semántico:
- Comprobación de tipos:
garantiza que los tipos de datos se utilicen de forma coherente con su definición. - Comprobación de etiquetas:
un programa debe contener referencias de etiquetas. - Verificación de control de flujo:
mantiene una verificación de que las estructuras de control se usan de manera adecuada (ejemplo: sin declaración de interrupción fuera de un ciclo)
Ejemplo:
float x = 10.1; float y = x*30;
En el ejemplo anterior, el entero 30 se encasillará en float 30.0 antes de la multiplicación, mediante un analizador semántico.
Semántica estática y dinámica:
- Semántica estática:
se llama así por el hecho de que se verifican en el momento de la compilación. La semántica estática y el significado del programa durante la ejecución están indirectamente relacionados. - Análisis semántico dinámico:
define el significado de diferentes unidades de programa como expresiones y declaraciones. Estos se verifican en tiempo de ejecución a diferencia de la semántica estática.
Publicación traducida automáticamente
Artículo escrito por palaksinghal9903 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA