BuK-KA-WHILE-COMPILER
Aus ProgrammingWiki
Inhaltsverzeichnis |
Aufgabenstellung
Entwickeln Sie einen Compiler, der als Eingabesprache $L_{WHILE}\cup L_{GOTO}\cup L_{LOOP}$ verwendet und ein zur Eingabe äquivalentes Programm aus $L_{WHILE}$ (Zielsprache) erzeugt. Die Interpretation des jeweils entstandenen $WHILE$-Programms ist nicht gefordert.
Verwenden Sie AtoCC
Grammatik
G = (N, T, P, s)
N={S, P_GOTO, Anweisung, P_LOOP, P_WHILE, Wertezuweisung, Variable, Marke, Konstante, Digit, Operation}
T={;, HALT, :, IF, ==, THEN, GOTO, LOOP, DO, END, WHILE, !=, 0, :=, x, M, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, -}
P={
S -> P_GOTO ; HALT | P_LOOP | P_WHILE
P_GOTO -> Marke : Anweisung | Anweisung | P_GOTO ; P_GOTO
Anweisung -> Wertezuweisung | GOTO Marke
| IF Variable == Konstante THEN GOTO Marke
P_LOOP -> Wertezuweisung | P_LOOP ; P_LOOP | LOOP Variable DO P_LOOP END
P_WHILE -> Wertezuweisung | P_WHILE ; P_WHILE
| WHILE Variable != 0 DO P_WHILE END
Wertezuweisung -> Variable ':=' Variable Operation Konstante
Variable -> x Konstante
Marke -> M Konstante
Konstante -> Digit Konstante | Digit
Digit -> 0|1|...|9
Operation -> + | -
}
Beispielprogramme
LOOP-Programm:
$x_1 := x_1 + 1$; LOOP $x_0$ DO $x_1 := x_1 + 1$ END
Zugehöriger Ableitungsbaum für das Eingabewort x1 := x1 + 1; LOOP x0 DO x1 := x1 + 1 END:
WHILE-Programm:
$x_1 := x_1 +1$; WHILE $x_1$ != 0 DO $x_1 := x_1 + 1$ END
Zugehöriger Ableitungsbaum für das Eingabewort x1 := x1 +1;WHILE x1 != 0 DO x1 := x1 + 1 END:
GOTO-Programm:
M1: IF $x_1 = 1$ THEN GOTO M2; GOTO M2; HALT
Zugehöriger Ableitungsbaum für das Eingabewort M1: IF x1 == 1 THEN GOTO M2;GOTO M2;HALT:
Scanner
Definition:
Simulation:
Parser
Compiler
http://www.michael-hielscher.de/compilerwiki/index.php/ComilerBuK_WHILE





