checkpoint
[sbp.git] / tests / regression.tc
index f0815a8..7626c55 100644 (file)
 //    s ::= ()       => s0
 //}
 
-tibcase {
-    input 
-"
-  hello 
-    there
-    how
-      { are }
-";
-    output "yep:{are}";
-
-    s        ::= { Hello } => "yep"
-    w        ::= " " | "\n"
-    ws      !::= w**
-    Hello    ::= "hello" ws { "there" "how" { "are" } }
-}
-
-
 testcase {
     input "ab c";
     output "1:{{a b} {c}}";
@@ -86,6 +69,16 @@ testcase {
 }
 
 testcase {
+    input "aabb";
+    output "xbx:{abab:{a b}}";
+
+    x  !::= ~[]
+    s   ::= x* b x* => xbx
+    b   ::= [ab][ab] => abab
+         &~ ( "aa" | "bb" )
+}
+
+testcase {
     input "12111211";
     output "ac:{{2 1 2 1}}";
     //output "a:{{2 1 2 1}}";
@@ -272,59 +265,78 @@ testcase {
   q  ::= [a-z]++ => "q"
 }
 
-testcase {
-
-    input "
-
-
- while x>0
-   while y>0
-    foo()
-     bar()
-
- while x>0
-   while y>0
-    foo()
-   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}}}}";
-
-indent  !::= ww
-outdent !::= " "  outdent " "
-           | " "  (~[]*)  "\n"
-
-any      !::= ~[]*
-s         ::= any "\n\n" ww statement ww "\n\n" any => smt
-ww       !::= sp*
-ws       !::= sp**
-sp        ::= " "
-
-block     ::= "\n" indent  blockBody
-           &~ "\n" outdent ~[\ ] ~[]*
-
-blockBody ::= statement
-            > statement blockBody /ws => "sbb"
-
-statement ::= call
-            | ^"while" expr block /ws
-
-expr      ::= ident
-            | call
-            | expr ^">" expr   /ws
-            | num
-
-call      ::= expr "()"        /ws
+//testcase {
+//
+//    input "
+//
+//
+//
+// while x>0
+//    while y>0
+//       foo()
+//          bar()
+//
+//
+// while x>0
+//    while y>0
+//          foo()
+//        bar()
+//
+//
+//
+//";
+//  output "smt:{while:{>:{{x} {0}} while:{>:{{y} {0}} sbb:{{f o o} {b a r}}}} while:{>:{{x} {0}} sbb:{while:{>:{{y} {0}} {f o o}} {b a r}}}}";
+//
+//indent  !::= ww
+//outdent !::= " "  outdent " "
+//           | " "  (~[]*)  "\n"
+//
+//w        !::= " " | "\n" | "\r"
+//ws       !::= w*
+//ww       !::= sp*
+//sp       !::= " "
+//any      !::= ~[]*
+//
+//s         ::= ws statement ws statement ws => smt
+//
+//block     ::= "\n" indent  blockBody
+//           &~ "\n" outdent ~[\ ] ~[]*
+//
+//blockBody ::= statement
+//            > statement ws blockBody => "sbb"
+//
+//statement ::= call
+//            | ^"while" expr block /ws
+//
+//expr      ::= ident
+//            | call
+//            | expr ^">" expr   /ws
+//            | num
+//
+//call      ::= expr "()"        /ws
+//
+//num       ::= [0-9]++
+//
+//ident     ::= [a-z]++ &~ keyword
+//keyword   ::= "if" | "then" | "else" | "while"
+//
+//
+//
+//}
+//
 
-num       ::= [0-9]++
 
-ident     ::= [a-z]++ &~ keyword
-keyword   ::= "if" | "then" | "else" | "while"
+testcase {
+    input "abc                         ";
 
-w         ::= " " | "\n" | "\r"
-ws        ::= w*
+    s   ::= q " "* => s
+    q   ::= [a-z] [a-z] [a-z] => a3
+         &~ ~[] "b" ~[]*
+}
 
+testcase {
+    input "abc                         ";
+    output "s:{a b c}";
 
+    s   ::= [a-z] [a-z] [a-z] " "* => s
 }