Compiler ZRa in Scheme+Turtle

Aus ProgrammingWiki

Wechseln zu: Navigation, Suche

Loading
ZRa sei die Sprache eines Zeichenroboters mit folgender Definition.

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.

Persönliche Werkzeuge
Werkzeuge

Life-Hilfe zum Wiki