I Op - TICSw

Anuncio
Yaëlle Borghini (201124323)
ISIS-4109 Diseño de Lenguajes
Trabajo en Clase - Semántica denotacional
Ejercicio 1 : Manipulación de una pila
Sintaxis
Semántica
Ins → I
Ins [ I ] = I [ I ] ε
I→λ
I →Op ; I
I [ λ ]P = P
I [ Op ; I ]P = let Is = I [ Op ]P in I [ I ]Is endLet
Op → Push V
Op → Pop
Op → Sum
I [ Push V ]P = N [ λ ]P P
I [ Pop ]P = if empty(P) then error else rest(P) endif
I [ Sum ]P = if lengh(P)<2
then error
else
let n = first(rest(P)) + first(P) in
P = n rest(rest(P)) endLet
Op → Sub
Op → Mult
Op → Div
V → num
endif
I [ Sub ]P = if lengh(P)<2
then error
else
let n = first(rest(P)) - first(P) in
P = n rest(rest(P)) endLet
endif
I [ Mult ]P = if lengh(P)<2
then error
else
let n = first(rest(P)) * first(P) in
P = n rest(rest(P)) endLet
endif
I [ Div ]P = if lengh(P)<2
then error
else
let n = first(rest(P)) / first(P) in
P = n rest(rest(P)) endLet
endif
N [ num ] = num.val
Ejercicio 2 : Las Torres de Hanoï
Consideramos el problema con 3 torres y 8 discos, pero si podrá también hacer lo mismo con más.
S será una secuencia de 4 pilas (la representación de los discos en las diferentes torres, y el cuarto es el disco que ha
sido tomando pero todavía no poniendo). Utilizaremos el método S[i] para encontrar la pila correspondiente a la
Torre i o el disco pendiente. Cada disco será representado con un numero con corresponde a su tamaño.
Sintaxis
Semántica
Ins → Ordenes
Ins [ Ordenes ] = O [Ordenes ] { {1, 2, 3, 4, 5, 6, 7, 8},
Ordenes → λ
Ordenes →Orden; Ordenes
O [ λ ]S = S
O [Orden; Ordenes ]S = let S2 = O [Ordenes]P in O [Ordenes ]S2 endLet
Orden → Tomar Torre
O [Tomar Torre ]S = let t = T [ Torre ] in
ε, ε , ε }
if empty(S[t]) or S[4]!= ε
then error
else
S[4] = first(S[t])
S[t] = rest(S[t])
endIf
endLet
Orden → Poner Torre
O [Poner Torre ]P = let t = T [ Torre ] in
if S[4]= ε
then error
else
if empty(S[t])
then
S[t] = { S[4] }
S[4] = ε
else
if S[4] > first(S[t])
then error
else
S[t] = S[4]
S[4] = ε
endIf
endIf
endIf
endLet
Torre → 1
Torre → 2
Torre → 3
T[ 1 ] = 1
T[ 2 ] = 2
T[ 3 ] = 3
S[t]
Descargar