Skip to content

Descripción de MLang

En este apartado se describe el lenguaje para el cual se hará un compilador a lo largo de este tutorial. Será una de las tareas de este tutorial, precisamente, expresar dichas características de manera formal con distintos metalenguajes.

Programa de ejemplo

Antes de entrar a detallar sus características, será de ayuda ver un programa de ejemplo en MLang para tener una visión general de su 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;

En el programa anterior se pueden ver cómo son las definiciones de las variables, así como la asignación y escritura de distintas expresiones aritméticas.

Características

Complementando aquello que pueden observarse en el ejemplo anterior, se detallan ahora las características del lenguaje.

Aspectos generales:

  • La sección DATA deberá aparecer obligatoriamente antes de la sección CODE y cada una de ellas solo puede aparecer una vez.
  • Podrán aparecer comentarios en cualquier parte del programa. Al igual que en C/C++ o Java, podrán ser de una línea (comienzan con //) o de varias líneas (comienzan con /* y terminan con */).
  • Tanto las sentencias como las definiciones terminan con un punto y coma ;.

Sección de Datos:

  • En la sección DATA se realizan las definiciones de variables (no puede haber definiciones en la sección CODE).
  • No es obligatorio que se definan variables pero, en cualquier caso, tiene que aparecer la palabra reservada DATA.
  • Las variables solo pueden ser de tipo int (2 bytes) o float (4 bytes).
  • En cada definición sólo puede haber una variable (por ejemplo, no se permite int a,b;)

Sección de Código:

  • En la sección CODE aparecerán las sentencias del programa (no puede haber sentencias en la sección DATA).
  • Un programa puede no tener ninguna sentencia pero, en cualquier caso, es obligatorio que aparezca la palabra reservada CODE.
  • En la sección CODE puede haber dos tipos de sentencias: escritura (print) y asignación.
  • La escritura (print) puede ser tanto de expresiones enteras como reales.
  • Las expresiones podrán estar formadas por literales enteros, literales reales y variables, pudiendo combinarse todos ellos mediante operadores aritméticos (+, -, * y /). Los operadores tendrán la prioridad y asociatividad habitual.
  • Se podrán agrupar expresiones mediante paréntesis.
  • Las operaciones aritméticas solo podrán realizarse entre operandos del mismo tipo, no habiendo conversiones implícitas. Esto quiere decir que, por ejemplo, no se puede sumar un entero con un real.
  • En las asignaciones, el tipo de la variable a asignar deberá coincidir con el tipo del valor a ser asignado. Por tanto, no se puede asignar un valor real a una variable entera ni a la inversa.