ue9
Aus ProgrammingWiki
Kreativaufgabe: Entwickeln Sie einen Compiler, der als Eingabesprache L_{WHILE} \bigcup L_{GOTO} \bigcup L_{LOOP} verwendet und ein zur Eingabe äquivalentes Programm aus L_{WHILE} (Zielsprache) erzeugt.
erste Grammatik
G = (N, T, P, s) N = {Programm, Sequenz, Ausdruck, Zuweisung, Kontrollstruktur, Operation, WHILE, GOTO, LOOP, Marke, DO, END, Markenbezeichner, Register, Zahlwert, Operand, Wahrheitswert, Wert, Vergleichsoperand} T = {Unterprogramm, :=, ;, While, Goto, Loop, :, Do, End, [a-z]+[0-9]*, x[0-9], [1-9]*[0]*, +, -, false, true, !=, <, ==, >} P = {
Programm -> Sequenz
Sequenz -> Ausdruck Sequenz | EPSILON
Ausdruck -> Unterprogramm | Marke | Zuweisung
| Kontrollstruktur
Zuweisung -> Register := Zahlwert ;
| Operation
Kontrollstruktur -> LOOP | GOTO | WHILE
Operation -> Register Operand Zahlwert ;
WHILE -> While Wahrheitswert DO Sequenz END
GOTO -> Goto Markenbezeichner ;
LOOP -> Loop Zahlwert DO Unterprogramm END
| Loop Zahlwert DO Sequenz END
Marke -> Markenbezeichner : Sequenz
DO -> Do
END -> End ; | End
Markenbezeichner -> [a-z]+[0-9]*
Register -> x[0-9]
Zahlwert -> [1-9]*[0]*
Operand -> + | -
Wahrheitswert -> false
| true
| Wert Vergleichsoperand Wert
Wert -> Register | Zahlwert
Vergleichsoperand -> != | < | == | > } s = Programm