1 of 25

Software HAL

Una breve introducción

2 of 25

¿Qué es HAL?

  • HAL, es un programa hecho en Haskell, desarrollado por docentes de nuestra facultad con un subsidio FONSOFT:
    • Emmanuel Gunther, Alejandro Gadea, Miguel Pagano, Renato Cherini, Leticia Losano, Araceli Acosta,
  • Nos permitirá entender de manera visual la ejecución de un programa imperativo.
  • Puede utilizarse, en otras versiones, como asistente para demostrar la corrección de programas imperativos.

3 of 25

Tipos de datos

  • En HAL se pueden utilizar dos tipos de datos:
    • Int
    • Bool
  • Los tipos se escriben con la primera letra en mayúsculas.

4 of 25

Definición de variables

  • En HAL se pueden definir dos tipos de variables:
    • que requieren al usuario su valor inicial:

varinput x:Int;

    • auxiliares:

vardef aux:Int;

  • Las sentencias terminan en general con punto y coma.

5 of 25

6 of 25

Expresiones aritméticas

  • Se construyen a partir de:
    • Constantes: 1, 2, 3, ...
    • Operadores: +, *, -, /, % (módulo)
    • Variables enteras: x, y, …
  • Ejemplos:
    • (3+x)/(2+y)
    • (-1)*z + 4

7 of 25

Expresiones booleanas

  • Se construyen a partir de:
    • Constantes: True, False
    • Operadores: &&, ||, not
    • Relaciones (entre enteros): =, <
    • Variables booleanas: a, b, …
  • Ejemplo: ( i < n || i = n)
  • ¿Cómo expreso “i mayor o igual a n”?
    • not (i < n)

8 of 25

Evaluación de expresiones

  • HAL permite evaluar las expresiones con variables.
    • ¿Cómo? Comando evaluar()
    • ¿Cuándo?, si las únicas dos instrucciones que utilice son definir variables y evaluar()
    • ¿Para qué?, para que puedan comprobar si han definido bien los resultados para Expresiones.

9 of 25

Evaluación de expresiones

varinput x : Int;

varinput y : Int;

varinput b : Bool;

evaluar 3 + y;

evaluar x * 2;

evaluar y % 3;

evaluar b && (x % 2 = 0);

10 of 25

11 of 25

La idea es que puedan chequear el comportamiento que definieron.

EL objetivo es que puedan chequear el comportamiento definido

12 of 25

Asignación

  • En HAL para asignar valor a una variable (previamente definida) hacemos:
    • x := E;
  • E debe ser expresión del tipo de la variable x!

13 of 25

Asignación

vardef y : Int;

vardef b : Bool;

y := 3;

b := False;

14 of 25

Asignación

15 of 25

Asignación

16 of 25

Condicional

  • En HAL el condicional es muy parecido al formalismo básico:

if E1 -> S1;

| E2 -> S2;

...

| En-> Sn;

fi

E1…En son expresiones booleanas,

S1…Sn son programas

Alguna de las expresiones booleanas debe ser verdadera, sino el programa aborta.

17 of 25

Condicional

varinput x : Int;

varinput y : Int;

vardef b : Bool;

if (x<y) -> b:=True;

| not (x<y) -> b:=False;

fi

18 of 25

Condicional

19 of 25

Condicional

20 of 25

Condicional

21 of 25

Condicional

22 of 25

Ciclo

  • En HAL un ciclo es muy parecido al formalismo básico:

do E ->

S;

od

E es una expresión booleana,

S es un programa

23 of 25

Ciclo

varinput x : Int;

varinput y : Int;

vardef i : Int;

i := 0;

do not (x<y) ->

x := x-y;

i := i+1;

od

24 of 25

Proyecto 3

  • Los objetivos son:
    • Aprender cómo se ejecuta HAL, y cómo se escribe y ejecuta un programa. Entender la ejecución secuencia y el estado de un programa.
    • Implementar el estado, la función para evaluar expresiones aritméticas, y la función para modificar el estado según las instrucciones.
    • Hacer más programas para entender más que es la programación imperativa.

25 of 25

Proyecto 3

  • Para la primera parte (ej. 1, 2, 5, 6 y 7 ), van a poder utilizar HAL desde un ejecutable.
  • Para la segunda parte (ej. 3, 4 y 8), van a bajar el código fuente de HAL para:
    • implementar en el archivo ListaAsoc.hs las funciones indefinidas;
    • entender los tipos definidos en Syntax.hs;
    • implementar las funciones indefinidas de Semantics.hs.
      • Estos archivos están en la carpeta Language.