Fase Semántica

Otra de las fases importantes de un compilador  es el análisis semántico, cuya función es comprobar la coherencia semántica del código. Utiliza el árbol de sintaxis de la fase anterior junto con la tabla de símbolos para verificar que el código fuente dado sea semánticamente consistente. También comprueba si el código transmite un significado apropiado.

El análisis semántico, como se describe en Compilers: Principles, Techniques, and Tools de Alfred V. Aho, Mónica S. Lam, Ravi Sethi y Jeffrey D. Ullman (2006), se asegura de que las operaciones realizadas sean válidas, las variables estén correctamente definidas y utilizadas, y las funciones cumplan con las reglas esperadas. Sin esta etapa, el compilador podría generar programas que fallan en tiempo de ejecución o producen resultados inesperados.

Funciones de la fase de análisis semánticos son:

  • Permite  almacenar la información de tipo recopilada y guardarla en una tabla de símbolos o un árbol de sintaxis.
  • Permite realizar verificación de tipo
  • En el caso de una discrepancia de tipos, donde no existen reglas de corrección de tipos exactas que satisfagan la operación deseada, se muestra un error semántico.
  • Recopila información de tipos y comprueba la compatibilidad de tipos.
  • Comprueba si el idioma de origen permite los operandos o no

Tabla de símbolos

La tabla de símbolos es la estructura utilizada por el compilador para almacenar los atributos asociados a los símbolos que se utilizan en un lenguaje de programación. Los atributos que esta estructura almacena para cada símbolo pueden ser:


(Figura 9) Tabla de símbolos de nuestro mini lenguaje 

En esta  figura se puede apreciar la tabla de símbolos con sus respectivos atributos y refleja la información clave sobre las variables utilizadas en el programa y su contexto dentro del análisis semántico.


Verificaciones semánticas

1-Declaración antes del uso: x y y deben ser declaradas antes de ser utilizadas en cualquier operación.
2- Consistencia de tipos: En y = x + 3.14;, x es de tipo entero y 3.14 es de tipo real. El análisis semántico verifica si la operación es válida y realiza una conversión implícita, si es necesario.
3- Inicialización: Antes de usar y en imprime y;, el análisis semántico asegura que se le haya asignado un valor.
4- Ámbitos: Variables declaradas en un bloque deben ser accesibles solo dentro de ese bloque.
5-Uso correcto: Identificadores que se declaren pero no se utilicen pueden generar advertencias.



Código  con un error semántico 


(Figura 10)  

(Figura 10.5)

En estas figuras se muestra un código cuyo resultado esperado genera un error semántico. El compilador detecta que la variable 'y' no ha sido inicializada antes de su uso. Esta debe ser inicializada con un valor; de lo contrario, se marcará un error.



Para una mejor comprensión, comparto un enlace sobre la fase semántica.












Referencias Bibliográficas

Cerulean, K. (2024, 26 septiembre). Phases of Compiler with Example: Compilation Process & Steps. Guru99. https://www.guru99.com/es/compiler-design-phases-of-compiler.html

Documento sin título. (s. f.). https://www.angelfire.com/planet/ispr/Unidad3/3.4.htm 



Comentarios

Entradas más populares de este blog

INTRODUCCION