diff 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 diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/agcl/parsifal/pex2.syn	Sat Dec 22 17:52:45 2007 -0500
@@ -0,0 +1,44 @@
+[
+  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
+