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
- Associa v1=0 e v2=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))
)
)
)
)
;;