BuK/IIm11/Studenten/simawiel/ue9

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

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