intermediate checkpoint
[sbp.git] / tests / regression.tc
index 0dd4853..37a302e 100644 (file)
@@ -24,8 +24,8 @@ testcase {
     output "1:{{a b} {c}}";
 
     s   ::= ids
-    ids ::= id (" " ids &~ id [~]*) => "1"
-          | id (    ids &~ id [~]*) => "2"
+    ids ::= id (" " ids &~ id ~[]*) => "1"
+          | id (    ids &~ id ~[]*) => "2"
           | id
     id  ::= [a-z]++
 }
@@ -45,11 +45,11 @@ testcase {
 
 testcase {
     input "aaabbbccc";
-    output "";
+    output "ab";
 
     s   ::= ab & dc
-    ab  ::= a b
-    dc  ::= d c
+    ab  ::= a b       => ab
+    dc  ::= d c       => dc
     a   ::= "a" a     | ()
     b   ::= "b" b "c" | ()
     c   ::= "c" c     | ()
@@ -60,8 +60,8 @@ testcase {
     input "aaabbbbccc";
 
     s   ::= ab & dc
-    ab !::= a b
-    dc !::= d c
+    ab !::= a b       => ab
+    dc !::= d c       => dc
     a   ::= "a" a     | ()
     b   ::= "b" b "c" | ()
     c   ::= "c" c     | ()
@@ -90,11 +90,12 @@ testcase {
 }
 
 testcase {
-    input  "xbambambam";
-    output "bam:{a bam:{a bam:{a x}}}";
+    input  "qxbambambam";
+    output "bam:{a bam:{a bam:{a x:{x}}}}";
 
-    s ::= a s ^"bam"
-    s ::= ^"x"
+    s ::= "q" z
+    z ::= a z ^"bam"
+    z ::= ^"x"
     a ::= ()       => "a"
 }
 
@@ -218,7 +219,7 @@ testcase {
     l  ::= id
     s  ::= l "=" r  => "assign"
          | r
-    R  ::= l
+    r  ::= l
          | l "=" r       => "assign"
          | r "+" r       => "plus"
          | (r) "*" r       => "times"
@@ -246,57 +247,69 @@ testcase {
 }
 
 testcase {
+  input "aa bb";
+  output "{q:{{a a}} q:{{b b}}}";
+
+  s  ::= q */ ws
+  ws ::= " "*
+  q  ::= [a-z]++ => "q"
+}
+
+testcase {
 
     input "
 
 
+
  while x>0
    while y>0
     foo()
-     bar()
+   bar()
 
  while x>0
    while y>0
     foo()
-   bar()
+     bar()
+
 
 
 ";
-    output "smt:{while:{>:{{x} {0}} while:{>:{{y} {0}} sbb:{{f o o} {b a r}}}}}";
-    output "smt:{while:{>:{{x} {0}} sbb:{while:{>:{{y} {0}} {f o o}} {b a r}}}}";
+     output "smt:{while:{>:{{x} {0}} sbb:{while:{>:{{y} {0}} {f o o}} {b a r}}} while:{>:{{x} {0}} while:{>:{{y} {0}} sbb:{{f o o} {b a r}}}}}";
+     output "smt:{while:{>:{{x} {0}} sbb:{while:{>:{{y} {0}} {f o o}} {b a r}}} while:{>:{{x} {0}} sbb:{while:{>:{{y} {0}} {f o o}} {b a r}}}}";
 
 indent  !::= ww
 outdent !::= " "  outdent " "
-           | " "  [~]*    "\n"
+           | " "  (~[]*)  "\n"
+
+w        !::= " " | "\n" | "\r"
+ws       !::= w*
+ww       !::= sp*
+sp       !::= " "
+any      !::= ~[]*
 
-any      !::= [~]*
-s         ::= !any "\n\n" !ww Statement !ww "\n\n" !any => smt
-ww        ::= sp*
-sp        ::= " "
+s         ::= ws statement ws statement ws => smt
 
-block     ::= "\n" !indent  BlockBody
-           &~ "\n" outdent [~\ ] [~]*
+block     ::= "\n" indent  blockBody
+           &~ "\n" outdent ~[\ ] ~[]*
 
-BlockBody ::= Statement
-            > Statement BlockBody => "sbb"
+blockBody ::= statement
+            | statement ws blockBody => "sbb"
 
-Statement ::= Call
-            | ^"while" Expr block
+statement ::= call
+            | ^"while" expr block /ws
 
-Expr      ::= ident
-            | Call
-            | Expr ^">" Expr
+expr      ::= ident
+            | call
+            | expr ^">" expr   /ws
             | num
 
-Call      ::= Expr "()"
+call      ::= expr "()"        /ws
 
 num       ::= [0-9]++
 
 ident     ::= [a-z]++ &~ keyword
 keyword   ::= "if" | "then" | "else" | "while"
 
-w         ::= " " | "\n" | "\r"
-ws        ::= w*
 
 
 }