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]