Compiler ZRa in Scheme+Turtle
Aus ProgrammingWiki

G = (N, T, P, s)
N = {Programm, Anweisungen, Anweisung, Zahl, Ziffer-ab-1, Ziffer, Zahl0, Farbwert, Status}
T = {WH, [, ], FARBE, RE, STIFT, VW, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, gelb, blau,
gruen, rot, schwarz, weiss, oben, radiert, schreibt, unten}
P = {
Programm -> Anweisungen
Anweisungen -> Anweisung Anweisungen
| EPSILON
Anweisung -> WH Zahl [ Anweisungen ]
| FARBE Farbwert
| RE Zahl
| STIFT Status
| VW Zahl
Zahl -> Ziffer | Ziffer-ab-1 Zahl0
Ziffer-ab-1 -> 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Ziffer -> 0 | Ziffer-ab-1
Zahl0 -> Ziffer | Ziffer Zahl0
Farbwert -> blau | gruen | rot | schwarz | weiss | gelb
Status -> oben | radiert | schreibt | unten
}
s = Programm
Zur Konstruktion eines Parsers reduzieren wir diese Grammatik um die syntaktischen Einheiten, die vom Scanner analysiert werden. Dadurch werden die Nichtterminale Zahl, Farbwert und Status zu Terminalen. Zahl0 und Ziffer-ab-1 entfallen.
G = (N, T, P, s)
N = {Programm, Anweisungen, Anweisung}
T = {WH, Zahl, [, ], FARBE, Farbwert, RE, STIFT, Status, VW}
P = {
Programm -> Anweisungen
Anweisungen -> Anweisung Anweisungen
| EPSILON
Anweisung -> WH Zahl [ Anweisungen ]
| FARBE Farbwert
| RE Zahl
| STIFT Status
| VW Zahl
}
s = Programm
Wir verwenden VCC, um einen Compiler zu beschreiben und zu generieren (Java, LALR(1)), der je ein ZRa-Programm nimmt und das zugehörige Scheme+Turtle-Programm erzeugt.
Beispiel: Das folgende ZRaProgramm
FARBE rot WH 18 [ WH 4 [ VW 50 RE 90 ] RE 20 ] STIFT radiert WH 18 [ WH 4 [ VW 50 RE 90 ] RE 20 ] STIFT schreibt FARBE blau WH 18 [ WH 4 [ VW 50 RE 90 ] RE 20 ]
übersetzt der ZRa2Turtle-Compiler in folgenden Zielcode:
Compiler ZRa2Turtle Demo verwendet einen ZRa2Tutle-Compiler. Dort kann man diesen Zielcode generieren lassen.