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