Exercício 5

Enunciado: ps pdf


Funções auxiliares

Funções para manipulação da memória e conversão entre (num n) e o inteiro correspondente.

Ficheiro: auxiliar.ml


Exemplo de implementação da função eval

let rec eval =
  fun (mem,true) -> (mem,true)
    | (mem,add(e1,e2)) -> let (mem1,r1) = eval (mem,e1) in
                            let (mem2,r2) = eval (mem1,e2) in
                              (mem2, num ( (intOfNum r1)+(intOfNum r2) ) )
;;
Nota: Função definida apenas para true e add(e1,e2).


Testes ao interpretador

Teste ao while_xl : executa o while enquanto v1 tiver um valor menor ou igual a 5.
let test_while =
  ([], seq( assign("v1",num(0)), 
            while_xl( 
                      leq(val("v1"), num(5)) , 
                      assign( "v1", add(val("v1"), num(1))) )
          ) 
  ) 
;;
Teste ao passign : simplificando a sintaxe, este teste faz o seguinte
  1. Associa v1=0 e v2=2;
  2. Executa passign(v1,v2, v2+2, v1+1), ou seja v1=v2+2 e v2=v1+1;
O resultado deverá ter na memória v1=4 e v2=1.
let test_passign = 
  ( [], seq( assign("v1", num(0)),
             seq( assign("v2", num(2)),
                  passign("v1", "v2", 
                            add(val("v2"), num(2)),
                            add(val("v1"), num(1))
                         )
                )
           )
  )
;;