Configuration and development of a generic compiler: analysis phase and intermediate code generation
Andrés Ollero Morales · Archivo Digital UPM (Universidad Politécnica de Madrid) · 2026
DRACO (Dinámica de Refuerzo del Aprendizaje de Compiladores) es una plataforma software educativa cuyo desarrollo comenzó en 2013 con el objetivo de mejorar la experiencia de aprendizaje en asignaturas relacionadas con la construcción de compiladores mediante la aplicación de estrategias de gamificación. El sistema fue diseñado específicamente para dar soporte a asignaturas como Procesadores de Lenguajes y Traductores de Lenguajes, en las que los estudiantes deben adquirir tanto conocimientos teóricos como competencias prácticas relacionadas con el diseño e implementación de compiladores. La plataforma proporciona a los estudiantes un entorno interactivo que contiene una amplia variedad de actividades orientadas a reforzar los conceptos introducidos durante las clases teóricas y las sesiones de laboratorio. Estas actividades permiten a los alumnos practicar de forma autónoma los contenidos fundamentales de la asignatura, recibiendo además retroalimentación inmediata sobre su rendimiento. La resolución satisfactoria de las actividades recompensa a los estudiantes con puntos que contribuyen a su posición dentro del sistema de clasificación de DRACO, fomentando así la participación, el aprendizaje continuo y una competencia saludable entre compañeros. Paralelamente, DRACO ofrece a los profesores una interfaz de gestión completa a través de la cual pueden supervisar el uso general de la plataforma, analizar el progreso de los estudiantes y acceder a estadísticas detalladas sobre el rendimiento individual y los resultados de aprendizaje alcanzados. Una de las funcionalidades más relevantes de DRACO es su capacidad para evaluar automáticamente los diferentes módulos que componen las prácticas asociadas a las asignaturas de construcción de compiladores. Esta funcionalidad constituye el eje central del presente Trabajo de Fin de Máster. En la asignatura de Procesadores de Lenguajes, los estudiantes deben implementar la fase de análisis de un compilador, que comprende el análisis léxico, el análisis sintáctico, el análisis semántico y la tabla de símbolos. Estos componentes son responsables de procesar el código fuente, validar su estructura y verificar su corrección semántica de acuerdo con las reglas definidas por el lenguaje. Por otro lado, la asignatura de Traductores de Lenguajes se centra en la fase de síntesis de un compilador, requiriendo la implementación de módulos encargados de la generación de código intermedio y de la generación de código objeto, los cuales transforman programas previamente validados en representaciones ejecutables. Para dar soporte a estas actividades, la interfaz de profesor de DRACO incorpora un conjunto de herramientas que permiten definir las características formales de los lenguajes utilizados en las prácticas de las asignaturas. Estas herramientas se presentan mediante una secuencia de formularios que guían al docente a lo largo del proceso de especificación de los aspectos léxicos, sintácticos y semánticos de un lenguaje. Como parte del desarrollo realizado en este proyecto, se introdujeron diversas mejoras y ampliaciones en dichas interfaces de especificación con el objetivo de incrementar su usabilidad, flexibilidad y mantenibilidad. Asimismo, el trabajo desarrollado no se limitó a la implementación del módulo de síntesis, sino que también incorporó funcionalidades adicionales destinadas a facilitar la definición de lenguajes y la configuración de las prácticas. A pesar de las capacidades existentes de DRACO, su subsistema de evaluación de prácticas se encontraba originalmente limitado a la corrección automática de las prácticas desarrolladas para la asignatura de Procesadores de Lenguajes. Esta restricción generaba una falta en el soporte ofrecido a las prácticas de Traductores de Lenguajes, donde los estudiantes no disponían de un mecanismo equivalente que permitiera validar automáticamente sus implementaciones. Con el propósito de resolver esta limitación, el presente Trabajo de Fin de Máster propone e implementa, como principal contribución, un marco de evaluación genérico para la fase de síntesis de compiladores, capaz de adaptarse a diferentes especificaciones de lenguaje definidas por los profesores. --ABSTRACT-- DRACO (Dynamic Reinforcement for Compiler Learning) is an educational software platform whose development began in 2013 with the objective of enhancing the learning experience in compiler-related subjects through the application of gamification strategies. The system was specifically designed to support courses such as Language Processors and Language Translators, where students are required to acquire both theoretical knowledge and practical skills in compiler construction. The platform provides students with an interactive environment containing a wide range of activities aimed at reinforcing the concepts introduced during lectures. These activities allow students to practice key topics in a self-directed manner while receiving immediate feedback on their performance. Successful completion of activities rewards students with points that contribute to their position in the DRACO ranking system, thereby encouraging participation, continuous learning, and healthy competition among peers. In parallel, DRACO offers instructors a comprehensive management interface through which they can monitor overall system usage, analyze student progress, and access detailed statistics regarding individual performance and learning outcomes. A particularly relevant feature of DRACO is its capability to automatically assess the different modules that compose the practical assignments associated with compiler construction courses. This functionality represents the central focus of the present Master’s Thesis. In the Language Processors course, students are required to implement the analysis phase of a compiler, which encompasses lexical analysis, syntactic analysis, semantic analysis, and symbol table. These components are responsible for processing the source code, validating its structure, and verifying its semantic correctness according to the rules of the language. Conversely, the Language Translators course focuses on the synthesis phase of a compiler, requiring students to implement modules responsible for intermediate code generation and object code generation, which transform validated source programs into executable representations. To support these activities, the DRACO instructor interface includes a collection of tools that enable teachers to define the formal characteristics of the languages employed in course assignments. These tools are presented as a sequence of forms that guide instructors through the process of specifying lexical, syntactic, and semantic aspects of a language. Despite the existing capabilities of DRACO, its assignment evaluation subsystem was originally limited to the automatic assessment of practical assignments developed for the Language Processors course. This restriction created a significant gap in the support available for Language Translators assignments, where students lacked an equivalent automated mechanism for validating their implementations. This Master’s Thesis proposes and implements, as its main goal, a generic synthesis-phase evaluation framework capable of adapting to different language specifications. By providing automated verification of compiler synthesis components, the proposed solution extends the educational value of DRACO and contributes to a more complete and consistent assessment process across compiler-related courses.