[ Inhalt ] [ Index ]

Next: Index Up: Codeerzeugung Previous: Postfixcodeerzeugung

Die Übersetzung eines Beispielprogramms

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 :




Next: Index Up: Codeerzeugung Previous: Postfixcodeerzeugung

Prof. Dr. Reinhard Völler