view tests/agcl/parsifal/pex2.syn @ 0:13d2b8934445

Import AnaGram (near-)release tree into Mercurial.
author David A. Holland
date Sat, 22 Dec 2007 17:52:45 -0500
parents
children
line wrap: on
line source

[
  case sensitive = off
  disregard white space
  lexeme {while body text}
]

space = ' ' + '\t'
eof = 0

white space
 -> space
 -> comment

while loop $
 -> while head, while body text, false while condition
 -> while head, while body text, while iteration..., false while condition

while head
 -> "!while"                                         =save_loop_head << PCB.pointer;

while body text     // skips to find end of loop
 -> [~eof - space, ~eof?...], while body terminator  ={save_loop_tail << PCB.pointer;
                                                       save_loop_top >> PCB.pointer;        // Restore top of loop
                                                       save_loop_top << PCB.pointer;        // Save top of loop
                                                      }
while body terminator
 -> "!endw" | "!endwhile"

true while condition, false while condition
 -> expression:x          ={
                             if (x.value.lval) return;
                             CHANGE_REDUCTION(false_while_condition);
                             save_loop_tail >> PCB.pointer;
                             save_loop_head >> junk;
                           }

while iteration
 -> true while condition, while body, while body terminator ={
                                                               save_loop_top >> PCB.pointer;        // Restore top of loop
                                                               save_loop_top << PCB.pointer;        // Save top of loop
                                                             }
while body
 -> [section | eol...]/..., while body terminator