Skip to content

Alcance del Tutorial

Objetivos

Este tutorial tiene dos objetivos principales:

  1. Mostrar de manera práctica las fases básicas en las que se divide la construcción de un compilador.
  2. Mostrar cómo utilizar distintas herramientas y técnicas para agilizar la creación de cada fase.

Como parte del segundo objetivo, se verán los siguientes aspectos:

  • Cómo usar Anltr para generar analizadores léxicos y sintácticos.
  • Cómo crear un árbol de sintaxis abstracta (AST) para representar el código fuente.
  • Ejemplos de creación de gramáticas atribuidas y su implementación.
  • Uso de una especificaciones de código.
  • Mostrar cómo hacer todo lo anterior de manera manual o bien con la herramienta VGen (opcional).

El objetivo no es ver a fondo cada uno de estos elementos, sino tener una visión general que permita entender lo más importante de cada uno de ellos. Por ello, se recomienda acompañar lo aquí presentado con los apuntes sobre construcción de Traductores, donde se presenta la materia con mayor detalle y de los cuales surgió este tutorial como complemento práctico.

MLang

Se ha creado para el tutorial un lenguaje de programación llamado MLang (Minimal LANGuage). Se ha pretendido un lenguaje lo más pequeño posible de tal manera que su comprensión sea sencilla y no distraiga del objetivo principal del tutorial, que es aprender las fases del compilador. Se ha buscado un lenguaje lo más pequeño posible que permita ver lo más importante de cada fase.

Un programa en MLang tiene esta estructura:

c
DATA
	float price;
	int width;
	int height;
	float total;

CODE
	price = 9.95;
	total = (price - 3.0) * 1.18;
	print total;

	width = 10; height = 20;
	print 0 - width * height / 2;

El ejemplo define una serie de variables globales que posteriormente utiliza para pedir unos valores al usuario. Con ellos realiza una serie de cálculos imprimiendo finalmente el resultado. El lenguaje se describirá en más detalle en un capítulo posterior.

Contacto

Para notificar erratas en los contenidos o cualquier otra cuestión relativa a los mismos, contactar con Raúl Izquierdo Castanedo (raul@uniovi.es).