Professional Documents
Culture Documents
25
26
Semntica de skip
El estado actual de la mquina es:
([(skip, E), (S1,E1) , (S2, E2), ] , ) El siguiente estado ser: ([(S1,E1) , (S2, E2), ] , )
Composicin Secuencial
El estado actual de la mquina es
([S1 S2 , E), (S3,E1) , (S4, E2), ] , ) El siguiente estado se consigue poniendo (S1, E) y (S2, E) en la pila semntica
El siguiente estado queda entonces:
([(S1, E), (S2, E), (S3,E1), (S4, E2), ], )
27
28
Declaracin de Variables
El estado actual es: ([(local X1 in S1 end, E), (S2, E2), ], ) El siguiente estado es ([(S1, E), (S2, E2), ], ) donde E es E+{X1 X1} X1 es una variable nueva. es el resultado de haberle pedido al ASA que cree la nueva variable.
29
30
Alcance Lxico
proc {P X} local Y in Y = 1 {Browse Y} end X = Y end Ocurrencias Libres Ocurrencias Ligadas
04/04/13
31
32
Alcance Lxico
local Arg1 Arg2 in Arg1 = 111*111 Arg2 = 999*999 Res = Arg1*Arg2 end
Alcance Lxico
local Res in local Arg1 Arg2 in Arg1 = 111*111 Arg2 = 999*999 Res = Arg1*Arg2 end {Browse Res} end ahora s es un programa ejecutable,
porque Res ya no es una variable libre
Ocurrencia Libre
Ocurrencia Ligadas
33
34
Alcance Lxico
local P Q in proc {P} {Q} end proc {Q} {Browse hello} end local Q in proc {Q} {Browse hi} end {P} end end
valores de procedimientos
Un valor de procedimiento en el ASA incluye un ambiente (llamado porque este puede tener referencias externas. local P Q in Q = proc {$} {Browse hello} end P = proc {$} {Q} end local Q in Q = proc {$} {Browse hi} end {P} end end
35
36
valores de procedimiento
La sentencia semntica es (X = proc {Y1Yn} s end, E) Y1Yn son los parmetros formales Sean Z1Zk los identicadores libres con respecto a s. Sea E igual a E |{Z1 ... Zk} Crear un nuevo valor de procedimiento de la forma: 1. (proc {$ Y1Yn} s end, E) , ligado a una variable fresca Xp 2. Ligar la variable E(X) a Xp
04/04/13
37
38
valores de procedimiento
local P Q in Q = proc {$} {Browse hello} end P = proc {$} {Q} end local Q in Q = proc {$} {Browse hi} end {P} X1 end P end proc{$}{Q}end
sentencias suspendibles
Las siguientes sentencias requieren que las variables marcadas estn ligadas a un valor para poder ejecutarse:
( , )
Q X2
X2 ( , )
s ::= | if var then s else s end | { var varvar } | case var of pattern then s1 else s2 end
proc{$}{Browse hello}end
BrowseX0
39
40
aplicacin de procedimiento
el estado actual es:
([({X Y1 Yk}, E), (S1, E1), ] , )
si E(X) es determinada:
Si E(X)no es un valor de procedimiento o tiene aridad distinta de k, marcar un error
Sea E(X) igual a (proc {$ R1Rk} S end, E)
si E(X) es no determinada: suspender
([(S,E+{R1E(Y1),,RkE(Yk)}), (S1, E1), ], )
condicional
el estado actual es:
([(if X then S1 else S2 end , E), (S3, E3), ] , )
Si E(X) es determinada: E(X) no ligada a un booleano (true, false), marcar un error E(X) es true, ([(S1, E), (S3, E3), ] , ) E(X) es false, ([(S2, E), (S3, E3), ] , ) Si E(X) es no determinada: suspender
41
42
sentencia case
el estado actual tiene la siguiente sentencia
(case X of g(f1 :X1 fn:Xn) then S1 else S2 end , E) si E(X) est determinada:
si la etiqueta de E(X) es g y su aridad es [f1 fn]:
[(local X1 = X.f1 Xn=X.fn in S1 end, E),] si no, empujar (S2,E) en la pila:
[(S2,E),] si la condicin de activacin es falsa: suspender
Ejemplos de case
local X=foo(a:1 b:_) case X of foo(a:A b:B) then {Browse [A B]} else {Browse nope} end end local X case X of foo(a:A b:B) then {Browse [A B]} else {Browse nope} end end local X=foo(a:1 b:_) case X of Y(a:A b:B) then {Browse [A B]} else {Browse nope} end end