IIm18-Kreativaufgabe8
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
=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 [http://flaci.de/ FLACI] entwickelt. === Grammatik === [[Bild:Gr11wety_Loop-while-goto-grammatik.png|300px|Grammatik Ableitungsregeln]] [[Bild:Gr11wety_LOOP-WHILE-GOTO_Syntax.png|300px|Grammatik Syntax]] Ü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 -> <br/>x1 := x1 + 1;<br/>LOOP x0 DO x1 := x1 + 0 END;<br/>LOOP x1 DO x1 := x1 + 1 END * bei IF xi == c THEN P END wesentlich umfangreicher * Exemplarische Darstellung mit Hilfe der LOOP-Funktionen in [https://web1.hszg.de/cwagenknecht-lehre/prala/ PRALA] * Import der notwendigen Funktionen