Compiler ZRa in Scheme+Turtle

Aus ProgrammingWiki
Archivierte Version vom 2008-12-11T10:06:42+00:00. Aktuelle Version

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

mmm