checkpoint
[sbp.git] / tests / regression.tc
index 8802d29..394847f 100644 (file)
@@ -2,9 +2,9 @@
 //    input  "x";
 //    output "a1:{x}";
 //
-//    s ::= a        => a1
-//    a ::= s        => s1
-//    a ::= ^"x"
+//    s   = a        => a1
+//    a   = s        => s1
+//    a   = ^"x"
 //}
 //
 //testcase {
 //    output "s2:{s0 x}";
 //
 //
-//    s ::= s s      => s2
-//    s ::= ^"x"
-//    s ::= ()       => s0
+//    s   = s s      => s2
+//    s   = ^"x"
+//    s   = ()       => s0
 //}
 
 testcase {
     input "ab c";
     output "1:{{a b} {c}}";
 
-    s   ::= ids
-    ids ::= id (" " ids &~ id ~[]*) => "1"
+    s     = ids
+    ids   = id (" " ids &~ id ~[]*) => "1"
           | id (    ids &~ id ~[]*) => "2"
           | id
-    id  ::= [a-z]++
+    id    = [a-z]++
 }
 
 testcase {
@@ -36,45 +36,45 @@ testcase {
     output "2:{{a} 1:{{b} {c}}}";
     output "1:{{a b} {c}}";
 
-    s   ::= ids
-    ids ::= id " " ids => "1"
+    s     = ids
+    ids   = id " " ids => "1"
           | id     ids => "2"
           | id
-    id  ::= [a-z]+
+    id    = [a-z]+
 }
 
 testcase {
     input "aaabbbccc";
     output "ab";
 
-    s   ::= ab & dc
-    ab  ::= a b       => ab
-    dc  ::= d c       => dc
-    a   ::= "a" a     | ()
-    b   ::= "b" b "c" | ()
-    c   ::= "c" c     | ()
-    d   ::= "a" d "b" | ()
+    s     = ab & dc
+    ab    = a b       => ab
+    dc    = d c       => dc
+    a     = "a" a     | ()
+    b     = "b" b "c" | ()
+    c     = "c" c     | ()
+    d     = "a" d "b" | ()
 }
 
 testcase {
     input "aaabbbbccc";
 
-    s   ::= ab & dc
-    ab  ::= a b       => ab
-    dc  ::= d c       => dc
-    a   ::= "a" a     | ()
-    b   ::= "b" b "c" | ()
-    c   ::= "c" c     | ()
-    d   ::= "a" d "b" | ()
+    s     = ab & dc
+    ab    = a b       => ab
+    dc    = d c       => dc
+    a     = "a" a     | ()
+    b     = "b" b "c" | ()
+    c     = "c" c     | ()
+    d     = "a" d "b" | ()
 }
 
 testcase {
     input "aabb";
     output "xbx:{{a} abab:{a b} {b}}";
 
-    x   ::= ~[]
-    s   ::= x* b x* => xbx
-    b   ::= [ab][ab] => abab
+    x     = ~[]
+    s     = x* b x* => xbx
+    b     = [ab][ab] => abab
          &~ ( "aa" | "bb" )
 }
 
@@ -84,40 +84,40 @@ testcase {
     //output "a:{{2 1 2 1}}";
     //output "c:{{c:{1 1} c:{1 1}}}";
 
-    s ::= ab => "ab"
+    s   = ab => "ab"
         | ac => "ac"
         | bc => "bc"
         //| a  =>  "a"
         //| b  =>  "b"
         //| c  =>  "c"
-    ab ::= a & b
-    ac ::= a & c
-    bc ::= b & c
-    a ::= ("1" x)*
-    b ::= (x "2" => "b")*
-    c ::= (x "2" x "1" => "c")*
-    x ::= [123]
+    ab   = a & b
+    ac   = a & c
+    bc   = b & c
+    a   = ("1" x)*
+    b   = (x "2" => "b")*
+    c   = (x "2" x "1" => "c")*
+    x   = [123]
 }
 
 testcase {
     input  "qxbambambam";
     output "bam:{a bam:{a bam:{a x:{x}}}}";
 
-    s ::= "q" z
-    z ::= a z ^"bam"
-    z ::= ^"x"
-    a ::= ()       => "a"
+    s   = "q" z
+    z   = a z ^"bam"
+    z   = ^"x"
+    a   = ()       => "a"
 }
 
 testcase {
     input  "baaaa";
     output "s2:{b0 a:{a:{epsilon}}}";
     output "b:{a:{a:{epsilon}} epsilon}";
-    s ::= b t        => "s2"
+    s   = b t        => "s2"
         | ^"b" t b
-    t ::= ^"a" t "a"
+    t   = ^"a" t "a"
         | ()         => "epsilon"
-    b ::= "b"        => "b0"
+    b   = "b"        => "b0"
         | ()         => "epsilon"
 }
 
@@ -125,20 +125,20 @@ testcase {
     input  "qaq";
     output "q:{a:{s1:{epsilon}}}";
 
-    s ::= ^"q" x "q"
-    x ::= ^"a" a
-    x ::= ()        => "epsilon"
-    a ::= x         => "s1"
+    s   = ^"q" x "q"
+    x   = ^"a" a
+    x   = ()        => "epsilon"
+    a   = x         => "s1"
 }
 
 testcase {
     input "baa";
     output "s1:{a2:{a2:{a0 b0} b0}}";
 
-    s ::= "b" a     => "s1"
-    a ::= "a" a b   => "a2"
+    s   = "b" a     => "s1"
+    a   = "a" a b   => "a2"
         | ()        => "a0"
-    b ::= ()        => "b0"
+    b   = ()        => "b0"
 }
 
 testcase {
@@ -155,9 +155,9 @@ testcase {
     output "s3:{epsilon a0 epsilon a0}";
     output "s3:{epsilon a0 a0 epsilon}";
 
-    s ::= "a" s a a a => "s3"
+    s   = "a" s a a a => "s3"
         | ()          => "epsilon"
-    a ::= "a"         => "a0"
+    a   = "a"         => "a0"
         | ()          => "epsilon"
 }
 
@@ -165,40 +165,40 @@ testcase {
     input "aa";
     output "poo:{poo:{poox poox} poox}";
     output "poo:{poox poo:{poox poox}}";
-    s ::= s s "a"  => "poo"
+    s   = s s "a"  => "poo"
         | ()       => "poox"
 }
 
 testcase {
     input "baa";
     output "s:{aa:{aa:{a b} b}}";
-    s ::= "b" a      => "s"
-    a ::= "a" a b    => "aa"
-    a ::= ()         => "a"
-    b ::= ()         => "b"
+    s   = "b" a      => "s"
+    a   = "a" a b    => "aa"
+    a   = ()         => "a"
+    b   = ()         => "b"
 }
 
 testcase {
     input "aaab";
     output "sx:{b aa:{aa:{b b} b}}";
-    s ::= b d "a" "b"  => "sx"
-    s ::= "a" d "a" d  => "sy"
-    d ::= "a" a b      => "aa"
-    a ::= "a" b b      => "aa"
-    a ::= ()           => "a"
-    b ::= ()           => "b"
+    s   = b d "a" "b"  => "sx"
+    s   = "a" d "a" d  => "sy"
+    d   = "a" a b      => "aa"
+    a   = "a" b b      => "aa"
+    a   = ()           => "a"
+    b   = ()           => "b"
 }
 
 testcase {
     input "a+(b*c)";
     output "+:{{a} *:{{b} {c}}}";
 
-    s   ::= r
-    r   ::= id
+    s     = r
+    r     = id
           | r ^"*" r
           | r ^"+" r
           | "(" r ")"
-    id  ::= [a-z]++
+    id    = [a-z]++
 }
 
 testcase {
@@ -208,61 +208,61 @@ testcase {
     output "plus:{stringify:{{a}} times:{minus:{stringify:{{b}} stringify:{{d}}} stringify:{{c}}}}";
     output "times:{minus:{plus:{stringify:{{a}} stringify:{{b}}} stringify:{{d}}} stringify:{{c}}}";
     output "minus:{plus:{stringify:{{a}} stringify:{{b}}} times:{stringify:{{d}} stringify:{{c}}}}";
-    w  ::= " "
-    l  ::= id
-    s  ::= l "=" q  => "assign"
+    w    = " "
+    l    = id
+    s    = l "=" q  => "assign"
          | q
-    q  ::= id
+    q    = id
          | l "=" q       => "assign"
          | q "-" q       => "minus"
          | q "+" q       => "plus"
          | q "*" q       => "times"
          | "(" q ")"
-    id   ::= idl++       => "stringify"
-    idl  ::= [a-d]
+    id     = idl++       => "stringify"
+    idl    = [a-d]
 }
 
 //testcase {
 //    input "a*b*c";
 //    output "times:{stringify:{{a}} times:{stringify:{{b}} stringify:{{c}}}}";
-//    w  ::= " "
-//    l  ::= id
-//    s  ::= l "=" r  => "assign"
+//    w    = " "
+//    l    = id
+//    s    = l "=" r  => "assign"
 //         | r
-//    r  ::= l
+//    r    = l
 //         | l "=" r       => "assign"
 //         | r "+" r       => "plus"
 //         | (r) "*" r       => "times"
 //         | "(" r ")"
 //         | r r           => "times"
-//    id   ::= idl++       => "stringify"
-//    idl  ::= [a-d]
+//    id     = idl++       => "stringify"
+//    idl    = [a-d]
 //}
 
 testcase {
     input "a+b*c";
     output "plus:{stringify:{{a}} times:{stringify:{{b}} stringify:{{c}}}}";
-    w  ::= " "
-    l  ::= id
-    s  ::= l "=" r  => "assign"
+    w    = " "
+    l    = id
+    s    = l "=" r  => "assign"
          | r
-    r  ::= l
+    r    = l
          | l "=" r       => "assign"
          | r "+" r       => "plus"
          > r "*" r       => "times"
          | "(" r ")"
          | r r           => "times"
-    id   ::= idl++       => "stringify"
-    idl  ::= [a-d]
+    id     = idl++       => "stringify"
+    idl    = [a-d]
 }
 
 testcase {
   input "aa bb";
   output "{q:{{a a}} q:{{b b}}}";
 
-  s  ::= q */ ws
-  ws ::= " "*
-  q  ::= [a-z]++ => "q"
+  s    = q */ ws
+  ws   = " "*
+  q    = [a-z]++ => "q"
 }
 
 //testcase {
@@ -287,38 +287,38 @@ testcase {
 //";
 //  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 " "
+//indent  !  = ww
+//outdent !  = " "  outdent " "
 //           | " "  (~[]*)  "\n"
 //
-//w        !::= " " | "\n" | "\r"
-//ws       !::= w*
-//ww       !::= sp*
-//sp       !::= " "
-//any      !::= ~[]*
+//w        !  = " " | "\n" | "\r"
+//ws       !  = w*
+//ww       !  = sp*
+//sp       !  = " "
+//any      !  = ~[]*
 //
-//s         ::= ws statement ws statement ws => smt
+//s           = ws statement ws statement ws => smt
 //
-//block     ::= "\n" indent  blockBody
+//block       = "\n" indent  blockBody
 //           &~ "\n" outdent ~[\ ] ~[]*
 //
-//blockBody ::= statement
+//blockBody   = statement
 //            > statement ws blockBody => "sbb"
 //
-//statement ::= call
+//statement   = call
 //            | ^"while" expr block /ws
 //
-//expr      ::= ident
+//expr        = ident
 //            | call
 //            | expr ^">" expr   /ws
 //            | num
 //
-//call      ::= expr "()"        /ws
+//call        = expr "()"        /ws
 //
-//num       ::= [0-9]++
+//num         = [0-9]++
 //
-//ident     ::= [a-z]++ &~ keyword
-//keyword   ::= "if" | "then" | "else" | "while"
+//ident       = [a-z]++ &~ keyword
+//keyword     = "if" | "then" | "else" | "while"
 //
 //
 //
@@ -329,8 +329,8 @@ testcase {
 testcase {
     input "abc                         ";
 
-    s   ::= q " "* => s
-    q   ::= [a-z] [a-z] [a-z] => a3
+    s     = q " "* => s
+    q     = [a-z] [a-z] [a-z] => a3
          &~ ~[] "b" ~[]*
 }
 
@@ -338,7 +338,7 @@ testcase {
     input "abc                         ";
     output "s:{a b c}";
 
-    s   ::= [a-z] [a-z] [a-z] " "* => s
+    s     = [a-z] [a-z] [a-z] " "* => s
 }
 
 testcase {
@@ -346,9 +346,9 @@ testcase {
     input "a+2";
     output "";
 
-    s     ::= Expr
-    Expr  ::= [0-9]++
+    s       = Expr
+    Expr    = [0-9]++
             | Plus:: left:Expra "+" right:Expr
-    Expra ::= Foo:: ("a" | "b")
+    Expra   = Foo:: ("a" | "b")
 
 }