| P | : | program |
| L | : | list |
| S | : | statement |
| E | : | expression |
| N | : | number |
| D | : | digit |
| I | : | identifier |
| L | : | letter |
| P | -> | L |
| L | -> | L1 ';' L2 | S |
| S | -> | I ':=' E | 'if' E 'then' L1 'else' L2 'fi' | 'while' E 'do' L 'od' |
| E | -> | E1 '+' E2 | E1 '-' E2 | E1 '*' E2 | E1 '/' E2 | E1 '%' E2 | N |
| N | -> | N D | D |
| D | -> | '0' | '1' | '2' | ... | '9' |
| I | -> | I L | L |
| L | -> | 'a' | 'b' | 'c' | ... | 'z' |
| + | : | Integer x Integer | -> | Integer |
| - | : | Integer x Integer | -> | Integer |
| * | : | Integer x Integer | -> | Integer |
| / | : | Integer x Integer | -> | Integer |
| % | : | Integer x Integer | -> | Integer |
| P | : Program | -> Environment_ |
| P[[L]] = L[[L]](Env0) | ||
| L | : list | -> Environment_ -> Environment_ |
|
L[[L1 ';' L2]](Env) = L[[L2]](Env) o L[[L1]](Env) L[[S]] = S[[S]] |
||
| S | : Statement | -> Environment_ -> Environment_ |
|
S[[I ':=' E]](Env) = Env & {I = E[[E]](Env)} S[['if' E 'then' L1 'else' L2 'fi']](Env) = cond(E[[E]](Env);L[[L1]](Env);L[[L2]](Env)) S[['while' E 'do' L 'od']](Env) = cond(E[[E]](Env);L[[L]](Env) o S[['while' E 'do' L 'od']](Env);id(Env)) |
||
| E | : Expression | -> Environment_ -> Integer_ |
|
E[[E1 '+' E2]](Env) = E[[E1]](Env) + E[[E2]](Env) E[[E1 '-' E2]](Env) = E[[E1]](Env) - E[[E2]](Env) E[[E1 '*' E2]](Env) = E[[E1]](Env) * E[[E2]](Env) E[[E1 '/' E2]](Env) = E[[E1]](Env) / E[[E2]](Env) E[[E1 '%' E2]](Env) = E[[E1]](Env) % E[[E2]](Env) E[[I]](Env) = Env(I) E[[N]](Env) = N[[N]] |
||
| N | : Number | -> Integer |
|
N[[ND]] = 10 * N[[N]] + N[[D]] N[[D]] = D[[D]] |
||
| D | : Digit | -> Integer |
|
D[['0']] = 0 D[['1']] = 1 D[['2']] = 2 D[['3']] = 3 D[['4']] = 4 D[['5']] = 5 D[['6']] = 6 D[['7']] = 7 D[['8']] = 8 D[['9']] = 9 |
ret := 0;
members := members / 2;
while members do
members := members / 2;
ret := ret + 1
od
Initialzustand
| Env { | members = 16 |
(L[['while' members 'do' members ':=' members '/' 2 ';' ret ':=' ret '+' 1 'od']] o L[[members ':=' members '/' 2]] o L[[ret ':=' 0]])(Env) =
S[['while' members 'do' members ':=' members '/' 2 ';' ret ':=' ret '+' 1 'od']](S[[members ':=' members '/' 2]](S[[ret ':=' 0]])) =
S[['while' members 'do' members ':=' members '/' 2 ';' ret ':=' ret '+' 1 'od']](S[[members ':=' members '/' 2]](Env & {ret = E[[0]]})) =
S[['while' members 'do' members ':=' members '/' 2 ';' ret ':=' ret '+' 1 'od']](S[[members ':=' members '/' 2]](Env & {ret = 0})) =
S[['while' members 'do' members ':=' members '/' 2 ';' ret ':=' ret '+' 1 'od']](Env & {members = E[[members '/' 2]](Env)}) =
S[['while' members 'do' members ':=' members '/' 2 ';' ret ':=' ret '+' 1 'od']](Env & {members = 8}) =
cond(E[[members]];(S[['while' members 'do' members ':=' members '/' 2 ';' ret ':=' ret '+' 1 'od']] o S[[ret ':=' ret '+' 1]] o S[[members ':=' members '/' 2]])(Env);id(Env)) =
cond(8;(S[['while' members 'do' members ':=' members '/' 2 ';' ret ':=' ret '+' 1 'od']] o S[[ret ':=' ret '+' 1]] o S[[members ':=' members '/' 2]])(Env);id(Env)) =
cond(4;(S[['while' members 'do' members ':=' members '/' 2 ';' ret ':=' ret '+' 1 'od']] o S[[ret ':=' ret '+' 1]] o S[[members ':=' members '/' 2]])(Env);id(Env)) =
cond(2;(S[['while' members 'do' members ':=' members '/' 2 ';' ret ':=' ret '+' 1 'od']] o S[[ret ':=' ret '+' 1]] o S[[members ':=' members '/' 2]])(Env);id(Env)) =
cond(1;(S[['while' members 'do' members ':=' members '/' 2 ';' ret ':=' ret '+' 1 'od']] o S[[ret ':=' ret '+' 1]] o S[[members ':=' members '/' 2]])(Env);id(Env)) =
cond(0;(S[['while' members 'do' members ':=' members '/' 2 ';' ret ':=' ret '+' 1 'od']] o S[[ret ':=' ret '+' 1]] o S[[members ':=' members '/' 2]])(Env);id(Env)) =
id(Env) =
Env
| Env { |
members = 0 ret = 4 |