Compiler ZRa in Scheme+Turtle

Aus ProgrammingWiki
Archivierte Version vom 2008-12-11T11:04:01+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

<eval> (pencolor turtle 0 0 0)(do ((i 1 (+ i 1)))((&gt; i 36) 'OK) (do ((i 1 (+ i 1)))((&gt; i 4) 'OK) (forward turtle 50)(right turtle 90))(right turtle 10))(pencolor turtle 0 0 0)(do ((i 1 (+ i 1)))((&gt; i 36) 'OK) (do ((i 1 (+ i 1)))((&gt; i 4) 'OK) (forward turtle 50)(right turtle 90))(right turtle 10))(pencolor turtle 0 0 0)(pencolor turtle 0 0 0)(do ((i 1 (+ i 1)))((&gt; i 36) 'OK) (do ((i 1 (+ i 1)))((&gt; i 4) 'OK) (forward turtle 50)(right turtle 90))(right turtle 10)) </eval>

Ihr Browser unterstützt Canvas nicht.