El compilador está escrito en Rust, usa la librería Pest para parsear el lenguaje. En el archivo main se define una función para procesar un archivo de texto con el programa.
Para usarse se necesita tener instalado Rust, se usa cargo build
para generar el programa, que termina en target/debug/me_myself
. Para correrlo, sólo se tiene que llamar en la terminal ./me_myself
.
- Los comentarios se cierran con %%, por problemas con el parser por el newline
- Los comentarios se pueden escribir en casi cualquier parte del programa
Para usar el ejecutable, el archivo del lenguaje debe estar en un .txt
. Primero se debe compilar el programa usando el comando:
./me_myself compile <input_file> <output_file>
Si no se especifica el nombre del archivo de salida, se escribe en el archivo file.obj
.
Una vez que se tenga el archivo .obj
, el programa se corre usando el comando:
./me_myself run <input_file>
Si no se especifica el nombre del archivo de entrada, se lee el archivo file.obj
.
En la carpeta de examples se encuentran distintos programas para demostrar el uso del lenguaje. Para correr cualqueir ejemplo se tiene que compilar y correr como cualquier programa de MeMyself:
./me_myself compile examples/dragon.txt dragon.obj && ./me_myself run dragon.obj
En la primer línea debe ir el nombre del programa:
Program testProgram;
A continuación se declaran las variables globales, las cuales pueden ser int, float o char:
Program testProgram;
var int: var1, var2; float: var3, var4; char: var5, var6;
Los comentarios son opcionales, y se denota el inicio y final de estos con el %%
:
%% Este es un comentario de MeMyself %%
Las operaciones aritméticas permitidas en MeMyself son:
Operador | Descripción |
---|---|
+ | Suma |
- | Resta |
* | Multiplicación |
/ | División |
% | Módulo |
Estas operaciones se pueden hacer entre ints y floats
Las operaciones booleanas permitidas en MeMyself son:
Operador | Descripción |
---|---|
< | Menor que |
> | Mayor que |
<= | Menor o igual que |
>= | Mayor o igual que |
== | Igual a |
<> | Diferente a |
& | And |
| | Or |
Estas operaciones están permitidas entre:
- Int e int
- Int y float
- Float y float
- Char y Char
En MyMyself hay 3 tipos de condicionales:
- if..else
- for
- while
%% Uso de if %%
if (A <> B) then {
} else {
}
%% Uso de for %%
for (A = 0) to (120) do {
}
%% El for aumenta de uno en uno, mientras el operando del lado izquierdo sea menor que el operando del lado derecho %%
%% Uso de while %%
while (A < 10) do {
}
%% NOTA: el whilke no cambia el valor de la variable a comparar, queda a discreción del programador cambiar dicha variable %%
MeMyself permite la escritura de datos a la consola:
var int: A;
write(A, "Hello World");
MeMyself permite la lectura de datos para ser asignados a variables:
var int: A;
read(A);
La declaración de funciones se hace empezando en el tipo de retorno de la función, el cual puede ser int
, float
, char
, o void
, seguido de la palabra module
, el nombre de la función, y los parámetros, si se necesitan. Después se declaran las variables locales a la función, y luego los estatutos.
- Todo programa debe contar con una función
main
de tipo de retornovoid
, y sin parámetros de entrada, o no compilará el programa.
Un ejemplo sería:
int module helloWorld() {
var char: c; {
write("Hello World!");
return(0);
}
}
Para la declaración de retornos en funciones que retornen algún tipo de resultado, se puede agregar el valor de retorno entre los paréntesis:
return (return_value);
Un programa ejemplo completo sería:
Program example;
var int: hello;
void module main() {
var float: test; {
read(test);
if (test == 100.0) {
hello = 200;
} else {
hello = 100;
}
test = test * hello;
write(test);
}
}
MeMyself es un lenguaje gráfico, por lo que incluye la ya tan conocida "Tortuga" como una salida gráfica. La lista de comandos disponibles para manipular la tortuga son los siguientes:
Center()
: regresa la tortuga al centro de la pantallaForward(float value)
: avanza la tortuga la cantidad de pasosBackward(float value)
: regresa la tortuga la cantidad de pasosLeft(float angle)
: mueve la tortuga a la izquierda por cierto ángulo. Valores aceptados: 0-360Right(float angle)
: mueve la tortuga a la derecha por cierto ángulo. Valores aceptados: 0-360PenUp()
: levanta la pluma de la tortuga. Deja de pintar si se muevePenDown()
: baja la pluma de la tortuga. Empieza a pintar si se mueveColor(float Red, float Green, float Blue)
: cambia el color de la pluma de la tortuga.Size(float)
: cambia el tamaño de la pluma de la tortugaClear()
: limpia la pantalla de los dibujosPosition(float x, float y)
: mueve la tortuga a la posiciónx, y
en la pantallaBackgroundColor(float Red, float Green, float Blue)
: cambia el color de fondo de la pantallaFillColor(float Red, float Green, float Blue)
: cambia el color del relleno que se hace en los dibujos.StartFill()
: empieza el relleno del dibujo que se está haciendo. Se tiene que llamarEndFill()
para empezar otro relleno.EndFill()
: termina el relleno del dibujo que se está haciendo. Se tiene que llamarStartFill()
antes.