Traductor e intérprete del lenguaje CL 1.23
Traductor e intérprete del lenguaje CL
Author:
José Miguel Rivero Almeida <rivero at lsi dot upc dot edu> (ver Créditos)

Introducción

Esta aplicación implementa un traductor del lenguaje imperativo CL, similar a Pascal. La traducción genera como resultado un programa equivalente en t-code, un lenguaje de bajo nivel de tres direcciones, tipo ensamblador.

Este precompilador tiene la siguiente estructura secuencial: en primer lugar una serie de etapas analizan la corrección léxica, sintáctica y semántiva de la entrada, y a continuación, si el programa es correcto, una fase de generación de codigo lo traduce al lenguaje destino.

Para poder ejecutar el programa generado, se usa un intérprete que comprueba que el t-code es correcto y lo ejecuta, obteniendo el resultado a partir de unos datos.

Créditos

La práctica que aquí se propone no es más que la adaptación, preparada para funcionar con la herramienta ANTLR v3, de una práctica similar diseñada para una versión anterior de ANTLR (PCCTS v1.33). Ambas han sido diseñadas en el contexto de la asignatura Compiladors de la Facultat d'Informàtica de Barcelona de la UPC.

La práctica con PCCTS ha sido desarrollada por varios profesores de la FIB: Robert Nieuwenhuis, Pilar Nivela, Guillem Godoy, Josep Carmona, Lluis Padró, entre otros. Ellos han ido definiendo todos los aspectos de la misma, desde el propio lenguaje CL hasta la implementación de los diferentes módulos que la componen.

Estructura del traductor de CL

dot_inline_dotgraph_1.png

La herramienta ANTLR http://antlr.org permite generar los diferentes programas que realizan estas etapas a partir de una serie de ficheros que describen la sintaxis del lenguaje CL, sus propiedades semánticas y cómo traducirlo a t-code.

  • La especificación léxica y sintáctica del lenguaje CL (tokens y reglas de la gramática) se realiza en el fichero CL.g
  • Cómo se hace la comprobación de tipos y la detección de errores semánticos se realiza en el fichero TypeCheck.g
  • Cómo se traduce un programa CL correcto a un programa equivalente en t-code se especifica, utilizando la herrramienta adicional StringTemplate, en los ficheros CodeGen.g y CodeGen.stg

Estos cuatro ficheros describen, en la distribución que se proporciona a los alumnos, una versión muy elemental del lenguaje CL. Los ficheros están documentados y los alumnos deben completarlos para poder traducir cualquier programa CL. La descripción del lenguaje CL se hace a través de programas de ejemplo en los llamados juegos de prueba.

Para poder construir un precompilador completo, las etapas descritas necesitan algunas clases auxiliares que se proporcionan completamente implementadas y documentadas. Los alumnos deben entender perfectamente el funcionamiento de estas clases auxiliares, definidas en los siguientes ficheros:

  • En CL_AST.java y CL_AST_Adaptor.java se describen los nodos del árbol de sintaxis abstracta (AST)
  • En TypeTree.java se describen los tipos de datos, básicos y estructurados, que CL soporta
  • En SymTab.java se describe la tabla de símbolos usada tanto en el análisis semántico como en la generación de t-code
  • En SemanticErrors.java se describen todos los posibles errores semánticos que detecta el análisis semántico

Estructura del intérprete de t-code

dot_inline_dotgraph_2.png

El intérprete se les da a los alumnos completamente implementado, aunque no es necesario entender su funcionamiento. El intérprete se encuentra distribuido en los siguientes ficheros:

  • En TCode.g se encuentra la descripción léxica y sintáctica del t-code, y dará lugar al analizador de t-code. También realiza una pequeña comprobación semántica
  • En TCode.java se define una representación interna del t-code, y se encuentra el intérprete propiamente dicho. También algunas funciones necesarias en el analizador de t-code
  • El fichero HeapMgr.java implementa un gestor de heap, una clase auxiliar que utiliza el intérprete cuando ejecuta t-code

Estos tres ficheros no se encuentran documentados dado que el alumno sólo debe implementar el precompilador. El intérprete únicamente se necesita para comprobar que la ejecución del t-code generado produce los resultados correctos.

 All Classes Files Functions Variables Enumerations