BuK/IIm20/Vorlesung 10 Grüning

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>FLACI_c3040gfy2wykcr</language>
= Kreativaufgabe LoopGotoWhile-Compiler Seite 48 =

Loop:

- Wobei dabei das "LOOP xz" nur mit "WHILE xz != 0" erstetzt wird. Das ergibt validen WHILE-Code, jdeoch wird die Semantik höchst wahrscheinlich verfälscht.

<run id="60cb92095735f">
x0 := x4 + 1;
LOOP x2 DO x0 := x4 + 1 END;
x0 := x4 + 1;
LOOP x2 DO LOOP x2 DO x0 := x4 + 1 END END
</run>


While:

- $\neq$ wird als "!=" dargestellt

<run id="60cb9209573ba">
x0 := x4 + 1 ;
WHILE x2 != 0 DO x0 := x4 + 1 END ;
x0 := x4 + 1 ;
WHILE x2 != 0 DO x0 := x4 + 4; WHILE x2 != 0 DO x0 := x4 + 1 END END
</run>


Goto:

- Um geparst zu werden muss auf jeder Zeile des GOTO-Programms eine Marke stehen.

- GOTO-Programm muss in der Form: $M1: A1; M2: A2; ... ; Mk: Ak$ vorliegen um semantisch richtig kompiliert zu werden.

- xz = c wird aktuell mit xz - c != 0 übersetzt was inhaltlich nicht stimmt. Das richtige Vergleichen ist jedoch sehr umfangreich.

- Neue Hilfsvariablen müssten noch dynamisch ermittelt werden und nicht fest immer wieder zum Einsatz kommen:
  - x90 = Nullregister
  - x100 = große WHILE-Schleife
  - x101 = if mit LOOP
  - x102 = Hilfe für While-Simulation von LOOP

- $xz > k$ müsste noch implementiert werden.

[[Bild:GotoToWhile.png]]


<run id="60cb9175a56e0">
M1: IF x1 = 0 THEN GOTO M2;
M3: x0 := x0 + 0;
M2: GOTO M1;
M4: x0 := x0 + 1
</run>