IIm18-Kreativaufgabe8
Inhaltsverzeichnis |
LOOP - WHILE - GOTO
Entwickeln Sie einen Compiler, der als Eingabesprache LWHILE ∪ LGOTO ∪ LLOOP verwendet und ein zur Eingabe äquivalentes Programm aus LWHILE(Zielsprache) erzeugt. Die Interpretation des jeweils entstandenen WHILE-Programms ist nicht gefordert.
Compiler
Grammatik, Scanner und Parser wurden mit Hilfe von FLACI entwickelt.
Grammatik
Übersetzer-URL: https://flaci.com/c2362g5ni12oga.js
Durch Anlegen eines Compiler-Bausteins und Verwenden der Übersetzer-URL kann der Scanner und der Parser verwendet werden.
Testprogramme
WHILE
x0 := x0+1; WHILE x0 != 0 DO x0 := x0 - 1 END
LOOP
x1 := x1 + 1; LOOP x0 DO x1 := x1 + 0 END; LOOP x1 DO x1 := x1 + 1 END
GOTO
M1: IF x1 == 0 THEN GOTO M2; M3: x0 := x0 + 0; M2: GOTO M1; M4: x0 := x0 + 1;
Im Compiler wurde die Übertragung von GOTO nach WHILE nur vereinfacht dargestellt, da allein schon das Transformieren einer bedingten Verzweigung recht unübersichtlich wird. Da unter Umständen noch IFs in einander verschachtelt sind oder auf Gleichheit einer Konstanten geprüft wird, die nicht 0 ist, wäre das Resultat der Transformation noch komplizierter. Deshalb wird im folgenden Kapitel erklärt, wie bei der Transformation eines solchen Spezialfalls vorzugehen ist.
Vergleich übertragen
- IF kann mit LOOP simuliert werden
- LOOP kann durch WHILE simuliert werden
- bei IF xi == 0 THEN P END ->
x1 := x1 + 1;
LOOP x0 DO x1 := x1 + 0 END;
LOOP x1 DO x1 := x1 + 1 END - bei IF xi == c THEN P END wesentlich umfangreicher
- Exemplarische Darstellung mit Hilfe der LOOP-Funktionen in PRALA
- Import der notwendigen Funktionen Gr11wety_Prala-funktionen.zip
- equals-Funktion kann wieder aufgeschlüsselt werden, sodass nur LOOP verwendet wird
- succ() kann ersetzt werden durch xi := xi + 1

