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:
- Asegurarse de que las coordenadas y dimensiones sean números válidos.
- 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:
- Comprobar si las figuras tienen sentido geométrico.
- Un CIRCLE debe tener un radio mayor a 0.
- Un RECTANGLE debe tener un ancho y alto mayores a 0.
- Un TRIANGLE debe estar definido por tres vértices distintos.
- Rango de Valores:
- 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).
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):
Salida Gráfica:
Generar instrucciones para una biblioteca gráfica (como OpenGL, SVG, HTML5 Canvas, etc.) que dibujen las figuras geométricas.
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.
Traducción a un Lenguaje de Programación:
Generar el equivalente en otro lenguaje como Python, JavaScript, etc., que dibuje las figuras.
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:
Referencias:
Aho, A. V., Lam, M. S., Sethi, R., & Ullman, J. D. (2006). Compilers: Principles, Techniques, and Tools (2nd Edition). Addison-Wesley.
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/