Mercurial > ~dholland > hg > ag > index.cgi
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 +