Fases de un compilador 2

 Analizador Semántico 

 El analizador semántico es aquel que verifica que el significado de las instrucciones del programa para que tenga sentido, cumpla con las reglas del lenguaje y que tenga lógica o coherencia. Utilizando el árbol sintáctico y su información almacenada en la tabla de símbolos, que contiene detalles sobre los nombres de variables, tipos de datos y otros elementos definidos en el programa. (Aho, A. V., Lam, M. S., Sethi, R., & Ullman, J. D., Compiladores: principios, técnicas y herramientas, 2006).

Objetivo del analizador semántico

El objetivo principal del analizador semántico es verificar que las estructuras sintácticas reconocidas en el análisis sintáctico sean válidas semánticamente. Esto incluye:

  • Validar los tipos de datos.

  • Comprobar el uso correcto de las funciones o comandos.

  • Detectar errores como parámetros inválidos.

A continuación el análisis semántico aplicado en nuestro lenguaje que genera figuras geométricas(Figura7):

  • Tipos de Datos Compatibles:
  1. Asegurarse de que las coordenadas y dimensiones sean números válidos.
  2. Por ejemplo, en CIRCLE 100 100 fifty, el analizador semántico detectará que fifty no es un número y generará un error.

  • Restricciones Lógicas:

  1. Comprobar si las figuras tienen sentido geométrico.
  2. Un CIRCLE debe tener un radio mayor a 0.
  3. Un RECTANGLE debe tener un ancho y alto mayores a 0.
  4. Un TRIANGLE debe estar definido por tres vértices distintos.
  • Rango de Valores:

  1. Validar que las coordenadas y dimensiones estén dentro del rango permitido (por ejemplo, dentro de una resolución de pantalla específica si es necesario).
"Figura 7. Fases de verificación del análisis semántico para nuestro lenguaje"
"Fuente: Ham Gómez, G. (2024, 24 de noviembre). Herramienta Word."

Todas estas fases aseguran que los datos sean del tipo adecuado, que las figuras sean geométricamente válidas y que las dimensiones estén dentro de los límites establecidos. Si hay errores como parámetros inválidos o inconsistencias, el analizador semántico los detectara y avisara al programador de los errores para que los solucione antes de continuar con las fases posteriores, como la generación de código. Esto asegura que el programa tenga una base sólida para que pueda ejecutarse correctamente, sí tienes alguna duda del tema puedes leer:

Capítulo 5. Análisis semántico. (n.d.). http://arantxa.ii.uam.es/~alfonsec/docs/compila5.htm

Generación de código intermedio

La generación de código intermedio es el proceso de traducir un programa fuente a un código destino con el  propósito de que sea más simplificado que el código máquina, pero más específico que el código fuente original. Esto sirve como un puente entre el análisis del programa (análisis léxico, sintáctico y semántico) y la generación del código final (código máquina o ensamblador).

¿Qué hace la generación de código intermedio?

  • Sirve como puente entre análisis y generación final: Conecta las fases de análisis (léxico, sintáctico y semántico) con la generación de código máquina o ensamblador.
  • Optimiza el programa: Proporciona una base para aplicar optimizaciones antes de convertirlo en el código final.
  • Representa operaciones básicas: Utiliza una notación simplificada, como el código de tres direcciones o pilas abstractas, para describir las operaciones del programa.
  • Verifica consistencia: Garantiza que el programa traducido cumpla con las reglas semánticas establecidas durante las fases previas del compilador.


En el caso de nuestro lenguaje de figuras geométricas, la generación de código puede tomar diferentes formas dependiendo del propósito del lenguaje(Figura 8):

  1. Salida Gráfica:

    • Generar instrucciones para una biblioteca gráfica (como OpenGL, SVG, HTML5 Canvas, etc.) que dibujen las figuras geométricas.

  2. Salida Intermedia:

    • Generar un archivo en un formato estándar como JSON, XML, o un lenguaje gráfico intermedio que pueda ser procesado por otras herramientas.

  3. Traducción a un Lenguaje de Programación:

    • Generar el equivalente en otro lenguaje como Python, JavaScript, etc., que dibuje las figuras.


"Figura 8. Generación de código en diferentes lenguajes"
"Fuente: Ham Gómez, G. (2024, 24 de noviembre). Herramienta Word."

Si el código contiene errores semánticos, la fase de generación de código debe reportarlos y omitir las partes defectuosas. Por ejemplo, si el RECTANGLE tiene un ancho negativo, el generador podría omitirlo o indicar un error en la salida, para mayor explicación del tema puede investigar aquí: 

De Guanajuato, U. (2022, September 24). Clase digital 14. Generación de código intermedio: Expresiones. Recursos Educativos Abiertos. https://blogs.ugto.mx/rea/clase-digital-14-generacion-de-codigo-intermedio-expresiones/


Videos de los temas vistos:

kevin danilo raba arango. (2020, April 10). COMPILADORES USO TABLA DE SÍMBOLOS [Video]. YouTube. https://www.youtube.com/watch?v=p8oDMlGHFF0
Fernando Luque. (2021, March 6). Compiladores - Autómata finito [Video]. YouTube. https://www.youtube.com/watch?v=7V8pPmvhIy8
Iraic. (2020, May 26). Lenguajes y Autómatas I T5 Análisis Sintáctico mp4 [Video]. YouTube. https://www.youtube.com/watch?v=F63j5rHkXls
Alejandro Garcia. (2019, April 11). Analizador-Semántico-ITSSMO [Video]. YouTube. https://www.youtube.com/watch?v=IXGtzi9_bjw
Angel Valdez. (2014, May 8). Generación de Codigo Intermedio - Compiladores [Video]. YouTube. https://www.youtube.com/watch?v=NS2aXgnPKZ0

Referencias:

Aho, A. V., Lam, M. S., Sethi, R., & Ullman, J. D. (2006). Compilers: Principles,  Techniques, and  Tools (2nd Edition). Addison-Wesley. 


vin danilo raba arango. (2020, April 10). COMPILADORES USO TABLA DE SÍMBOLOS [Video]. YouTube. https://www.youtube.com/watch?v=p8oDMlGHFF0
Fernando Luque. (2021, March 6). Compiladores - Autómata finito [Video]. YouTube. https://www.youtube.com/watch?v=7V8pPmvhIy8
Iraic. (2020, May 26). Lenguajes y Autómatas I T5 Análisis Sintáctico mp4 [Video]. YouTube. https://www.youtube.com/watch?v=F63j5rHkXls
Alejandro Garcia. (2019, April 11). Analizador-Semántico-ITSSMO [Video]. YouTube. https://www.youtube.com/watch?v=IXGtzi9_bjw
Angel Valdez. (2014, May 8). Generación de Codigo Intermedio - Compiladores [Video]. YouTube. https://www.youtube.com/watch?v=NS2aXgnPKZ0

Soto, R. (2010). Teoría de Autómatas y Compiladores [ICI-445]: Capítulo 1: Lenguajes y Gramáticas Formales. Escuela de Ingeniería Informática, Pontificia Universidad Católica de Valparaíso. https://zeus.inf.ucv.cl/~rsoto/assets/pdf/ICI/Cap1_ICI445.pdf

Hilario, S. M. (s.f.). Análisis sintáctico. Benemérita Universidad Autónoma de Puebla. https://www.cs.buap.mx/~hilario_sm/slide/compiladores/analisis%20sintactico%20.pdf

Capítulo 5. Análisis semántico. (n.d.). http://arantxa.ii.uam.es/~alfonsec/docs/compila5.htm

De Guanajuato, U. (2022, September 24). Clase digital 14. Generación de código intermedio: Expresiones. Recursos Educativos Abiertos. https://blogs.ugto.mx/rea/clase-digital-14-generacion-de-codigo-intermedio-expresiones/