Warnung vor möglichem Datenabfluss

Sie haben auf ein Element geklickt, das Inhalte eines Fremdanbieters abruft. Bei der Weiterleitung zu diesem wird eine Verbindung hergestellt, bei der personenbezogene Daten übermittelt werden (z. B. Ihre IP-Adresse). Damit dies nicht ohne Ihr Zutun geschieht, ist Ihr Einverständnis notwendig.

Ihr Einverständnis wird pro Fremdanbieter nur einmal erfragt: Sind Sie einverstanden, dass Daten von FEHLER abgerufen werden?

Scanner, Parser und Interpreter für Mini-Pascal

In Kapitel 20, Band 2 von Informatik mit Prolog wird dargestellt, wie Konzepte und Methoden der theoretischen Informatik bei der Konstruktion eines Scanners, Parsers, Interpreters und Compilers für die Sprache Mini-Pascal angewendet werden können.

Im Folgenden ist als Beispiel ein Mini-Pascal-Programm für die Berechnung der Fakultaet angegeben:

program Fakultaet;
begin
n:= 7;
i:= 1;
Fak:= 1;
while i < n do begin
i:= i + 1;
Fak:= Fak * i
end;
write(Fak)
end

Der Scanner liest den Quelltext eines Mini-Logo-Programmes ein und erzeugt daraus eine Symbolliste. Der Parser baut aus der Symbolliste einen Parsebaum, den man mit dem Terminterpreter darstellen kann.

Der Interpreter führt das Mini-Pascal-Programm aus und gibt das Ergebnis auf der Prolog-Konsole aus.

speicher(fak, 5040).
speicher(i, 7).
speicher(n, 7).

Der Compiler arbeitet wie der Interpreter auf dem Parsebaum. Er übersetzt das im Parsebaum dargestellte Mini-Pascal-Programm in Assemblersprache:

    mov  ax, 7
mov n, ax
mov ax, 1
mov i, ax
mov ax, 1
mov fak, ax
M1:
mov ax, i
push ax
mov ax, n
pop cx
cmp ax, cx
mov ax, True
jl M2
mov ax, False
M2:
cmp ax, True
jnz M3
mov ax, 1
push ax
mov ax, i
pop cx
add ax, cx
mov i, ax
mov ax, i
push ax
mov ax, fak
pop cx
imul ax, cx
mov fak, ax
jmp M1
M3:
mov ax, fak
out ax

Benutzungshinweise

Laden Sie sich das Mini-Pascal-Paket herunter und entpacken Sie es in ein Verzeichnis minipascal. Starten Sie Swing-Prolog, laden und konsultieren Sie die Datei minipascal.pl. Stellen Sie dann die Anfrage ?- minipascal.

Der Terminterpreter muss installiert sein.