MODULE emil; VAR d, e, a, b, f : integer; BEGIN a := d+e*(b+a)-f; IF (a < b) THEN a := d; b := 6; ELSIF (a = e) THEN f := a; ELSIF (b<a) THEN a := 5; ELSE b := 7 END; WHILE (a <= b) DO a := a-1 END END emil.
Die Übersetzung von a := d+e*(b+a)-f:
Der abstrakte Syntaxbaum:
:=
a
-
+
d
*
e
+
b
a
f
Die Postfixdarstellung:
a(2) d(0) e(1) b(3) a(2) + * + f(4) - :=
Die Übersetzung der IF-Amweiung:
Der abstrakte Syntaxbaum:
if
<
a
b
;
:=
a
d
;
:=
b
6
;
NULL
NULL
elsif
==
a
e
;
:=
f
a
;
NULL
NULL
Die Postfixdarstellung:
a(2) b(3) < BF L00001 a(2) d(0) := b(3) 6 := JMP L00002 L00001 : a(2) e(1) == BF L00003 f(4) a(2) := JMP L00002 L00003 :
elsif
<
b
a
;
:=
a
5
;
NULL
NULL
else
;
:=
b
7
NULL
b(3) a(2) < BF L00004 a(2) 5 := JMP L00002 L00004 : b(3) 7 := L00002 :
Die Übersetzung der WHILE-Amweiung:
Der abstrakte Syntaxbaum:
while
<=
a
b
;
:=
a
-
a
1
NULL
NULL
Die Postfixdarstellung:
L00005 : a(2) b(3) <= BF L00006 a(2) a(2) 1 - := JMP L00005 L00006 :
Prof. Dr. Reinhard Völler