-
Notifications
You must be signed in to change notification settings - Fork 0
5. Programa
La clase Program
es la clase necesaria para realizar un programa y poder ejecutarlo. Esta clase se construye a través de elementos AST, como lo son los tipos de datos, los operadores, las variables y los controles de flujo. Este provee distintas funcionalidades:
Necesario para ejecutar todas las instrucciones del programa. Notar que se puede crear un programa, pero no ejecutarlo en el mismo momento. Sin embargo, el método se puede usar en el momento de la creación de un programa, siendo ambas igual de válidas. Por ejemplo:
// Ejecución después de la creación
Program program = new Program(...);
program.execute();
// Ejecución al momento de la creación
Program program = new Program(...).execute();
Este método se puede usar de dos formas:
- Sin entregarle ningún parámetro. En dicho caso retornará una lista de las variables globales al finalizar la ejecución de un programa. Si es que el programa aún no se ejecuta retorna una lista vacía.
- Entregándole el nombre de una variable. En este caso retornará dicha variable. Arroja un error en caso de que la variable no se encuentre.
A continuación veremos un ejemplo en el que se construye un programa para el Algoritmo de Euclides. Este se simboliza a través del siguiente AST.
En nuestro caso se construye a través del siguiente código:
Program program = new Program(
new Variable("a").assign(new TypeInt(100000001)),
new Variable("b").assign(new TypeInt(17)),
new While(
new NotEquals(new Variable("b"), new TypeInt(0)),
new IfElse(
new GreaterThan(new Variable("a"), new Variable("b")),
new Variable("a").assign(
new Sub(new Variable("a"), new Variable("b"))
),
new Variable("b").assign(
new Sub(new Variable("b"), new Variable("a"))
)
)
)
).execute();
System.out.println(program);
System.out.println(program.getGlobalVariables("a"));
System.out.println(program.getGlobalVariables("b"));
Lo que imprime:
a = 100000001
b = 17
While ( b != 0 ) {
If ( a > b ) {
a = a - b
} Else {
b = b - a
}
}
Variable{name=a, value=
TypeInt{value=17}}
Variable{name=b, value=
TypeInt{value=0}}