BuK/IIm20/Vorlesung 10 Thomas

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>FLACI_c3053gi1fr45ta</language>
= Kreativaufgabe: LOOP, WHILE, GOTO - Compiler =
== Grammatik ==
[[Bild:St52pybu_Buk_grammatik.jpg|300px|Grammatik]]
== Parser==
[[Bild:St52pybu_Buk_parser.jpg|300px|Parser]]
== Compiler ==
=== LOOP -> WHILE ===
* LOOP Syntax
** Wertzuweisung $x_i~:=x_j~+c~x_i~:=x_j~-c$
** Sequenz $P_1:P_2$
** Zyklus $\mathrm{P}$ ist ein LOOP-Programm, dann ist $\mathrm{LOOP}~x_i~\mathrm{DO}~\mathrm{P}~ \mathrm{END}$ auch ein LOOP Programm
* minimalistische Syntaktik wird nicht geparst, Bsp: $x_i := x_j$
* LOOP kann mit WHILE Simuliert werden
** $x_i~:=~x_j;~\mathrm {WHILE}~x_i~\neq~0~\mathrm{DO}~x_i~:=~x_i~-~1;~\mathrm{P}~\mathrm{END}$
<run id="60cf9d8890e63">x1 := x1 + 1;
LOOP x0 DO x2 := x1 + 1 END;
LOOP x1 DO x3 := x1 + 1 END</run>

<run id="60cf9d8890fa0">x0 := x0 + 0;
x2 := x1 - 1;
LOOP x2 DO x0 := x1 + 1 END; 
x1 := x0 + 2;
LOOP x1 DO
	x4 := x0 + 2;
	LOOP x1 DO
		x5 := x3 + 4;
		x6 := x1 + 5;
		LOOP x6 DO x0 := x0 + 0 END;
		x4 := x4 + 1
	END;
	x3 := x3 + 1
END</run>

=== WHILE -> WHILE ===
* WHILE Syntax
** $\mathrm {WHILE}~x_i~\neq~0~\mathrm{DO}~\mathrm{P}~\mathrm{END}$
<run id="60cf9d8891017">x0:=x0+1;
WHILEx0!=0DOx0:=x0-1END</run>

=== GOTO -> WHILE ===
* GOTO Syntax
** Wertzuweisung $x_i~:=x_j~+c~x_i~:=x_j~-c$
** unbedingter Sprung: $\mathrm{GOTO}~M_i$
** bedingter Sprung: $\mathrm{IF}~x_i~=~\mathrm{c}~\mathrm{THEN}~\mathrm{GOTO}~M_j$
** Stopanweisung: $\mathrm{HALT}$
<run id="60cf9d88910c6">M1 : x0 := x1 + 0;
M2 : x3 := x2 + 0;
M3 : IF x3 = 0 THEN GOTO M7;
M4 : x0 := x0 + 1;
M5 : x3 := x3 - 1;
M6 : GOTO M3;
M7 : HALT</run>
==== Idee zu GOTO -> WHILE ====
[[Bild:St52pybu_Buk_gotoW.jpg|400px|Beweisidee]]
[[Bild:St52pybu_Buk_gotoW2.jpg|400px|Beweisidee Einzelheiten]]
----
*Entwicklung eines zweiten/dritten Compilers
** 1ter Compiler -> Loop, GOTO, WHILE -> LOOP, WHILE Syntax
** 2/3ter Compiler -> LOOP, WHILE -> WHILE
*** Beispiel: IF Anweisungen von LOOP zu WHILE
** Prüfung ob Loop, GOTO, WHILE -> LOOP -> WHILE "einfacher"
[[Bild:St52pybu_Buk_g1.jpg|400px|IF Beispiel LOOP 1]]
[[Bild:St52pybu_Buk_g2.jpg|400px|IF Beispiel LOOP 2]]
[[Bild:St52pybu_Buk_compiler_idee.png|400px|IF Beispiel LOOP 2]]