Fase semántica

El análisis semántico es la fase del compilador que se encarga de validar que el código escrito tenga sentido dentro del contexto del lenguaje. Esto significa que, además de verificar que el programa sigue las reglas gramaticales (sintaxis), se asegura de que las operaciones realizadas sean lógicas y válidas según las reglas definidas en el lenguaje.


Para nuestro lenguaje de figuras geométricas, esto implica:

  1. Verificar que las variables y parámetros estén declarados antes de usarse.
  2. Comprobar que los argumentos pasados a las figuras geométricas sean del tipo correcto.
  3. Validar las restricciones propias del lenguaje, como que los radios de las figuras sean positivos o que las coordenadas sean valores válidos.

Objetivos del análisis semántico

1.-Validación de tipos: Asegura que los argumentos de las figuras geométricas cumplan con los tipos requeridos.

Ejemplo: La función circle(x, y, r) debe recibir dos coordenadas x, y (tipo int o float) y un radio r (tipo float o int).

circle(10, 20, -5); // Error semántico: El radio no puede ser negativo.


2.-Declaración previa: Verifica que las variables usadas en las declaraciones estén previamente definidas en el código.

square(a, b, 10); // Error semántico: 'a' y 'b' no están declarados.


3.-Restricciones del lenguaje: Garantiza que las figuras sean dibujadas correctamente según las reglas del lenguaje. Por ejemplo, triangle debe recibir tres puntos válidos.


4.-Control de ámbito: Asegura que las variables no se usen fuera del contexto donde fueron declaradas.


Tabla de símbolos en nuestro lenguaje

En el análisis semántico, la tabla de símbolos registra información sobre todas las variables y constantes declaradas en el programa. En nuestro lenguaje, la tabla de símbolos puede lucir así:
Ejemplo de tabla de símbolos:

Figura 13 Tabla de símbolos.

Esta tabla que contiene de los símbolos es fundamental para validar las reglas del programa durante el análisis semántico.

Reglas semánticas de nuestro lenguaje

Regla 1: Todas las variables deben declararse antes de ser usadas.
circle(x, y, 10); // Error: 'x' y 'y' no están declarados.

Regla 2: Los argumentos de las figuras deben cumplir con los tipos esperados.
square(10, 20, "lado"); // Error: El tercer argumento debe ser un número.

Regla 3: Los valores geométricos deben ser positivos.
triangle(-1, 0, 5); // Error: Las coordenadas deben ser positivas.


Ejemplo de ejecución

1.- Supongamos que nuestra entrada es la siguiente:
int x, y, r; 
x = 10; 
y = 20; 
circle(x, y, 15);

Como nuestra entrada respeta las reglas de nuestro lenguaje nuestra salida del analizador semántico: Análisis semántico exitoso.

2.- Supongamos que nuestra segunda entrada es la siguiente:
circle(a, b, 10);

Como nuestra entrada no respeta las reglas gramaticales del lenguaje la salida del analizador semántico sería la siguiente: Error semántico: Variable 'a' no declarada.



El análisis semántico asegura que el programa no solo sea correcto en su estructura, sino también lógico en su significado. En nuestro lenguaje de figuras geométricas, esta fase valida que las figuras sean creadas con los argumentos correctos y que todas las restricciones del lenguaje sean respetadas. Este proceso es crucial para garantizar que el código sea robusto y libre de errores que podrían causar problemas durante su ejecución.


Dejo el link del siguiente video, para mayor aprendizaje:
BebetoxD. (2019, 21 noviembre). Analizador semántico [Vídeo]. YouTube. https://www.youtube.com/watch?v=pqHmyJMvyGs




Referencias:

¿Qué es el Análisis Semántico? (s. f.). https://www.calton.io/blog-es/que-es-el-analisis-semantico

Silvino, A. C. J. J. E. H. E. I. G. R. G. G. N. G. y. R. G. (s. f.). UNIDAD VI.-Análisis semántico. https://cursocompiladoresuaeh.blogspot.com/2010/11/unidad-vi-analisis-semantico.html

(S/f-g). Uhu.es. Recuperado el 6 de diciembre de 2024, de https://www.uhu.es/francisco.moreno/gii_pl/docs/Tema_5.pdf


Comentarios

Entradas más populares de este blog