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ónCODE
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ónCODE
). - 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ónDATA
). - 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.