checkpoint
[sbp.git] / tests / regression.tc
index 040bf84..32e8a59 100644 (file)
@@ -155,7 +155,7 @@ testcase {
     output "poo:{poo:{poox poox} poox}";
     output "poo:{poox poo:{poox poox}}";
     s ::= s s "a"  => "poo"
-    s ::= ()       => "poox"
+        | ()       => "poox"
 }
 
 testcase {
@@ -182,11 +182,11 @@ testcase {
     input "a+(b*c)";
     output "+:{{a} *:{{b} {c}}}";
 
-    s   ::= R
-    R   ::= id
-          | R ^"*" R
-          | R ^"+" R
-          | "(" R ")"
+    s   ::= r
+    r   ::= id
+          | r ^"*" r
+          | r ^"+" r
+          | "(" r ")"
     id  ::= [a-z]++
 }
 
@@ -197,17 +197,16 @@ 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}}}}";
-    s  ::= S
     w  ::= " "
-    L  ::= id
-    S  ::= L "=" Q  => "assign"
-         | Q
-    Q  ::= id
-         | L "=" Q       => "assign"
-         | Q "-" Q       => "minus"
-         | Q "+" Q       => "plus"
-         | Q "*" Q       => "times"
-         | "(" Q ")"
+    l  ::= id
+    s  ::= l "=" q  => "assign"
+         | q
+    q  ::= id
+         | l "=" q       => "assign"
+         | q "-" q       => "minus"
+         | q "+" q       => "plus"
+         | q "*" q       => "times"
+         | "(" q ")"
     id   ::= idl++       => "stringify"
     idl  ::= [a-d]
 }
@@ -215,17 +214,16 @@ testcase {
 testcase {
     input "a*b*c";
     output "times:{stringify:{{a}} times:{stringify:{{b}} stringify:{{c}}}}";
-    s  ::= S
     w  ::= " "
-    L  ::= id
-    S  ::= L "=" R  => "assign"
-         | R
-    R  ::= L
-         | L "=" R       => "assign"
-         | R "+" R       => "plus"
-         | (R) "*" R       => "times"
-         | "(" R ")"
-         | R R           => "times"
+    l  ::= id
+    s  ::= l "=" r  => "assign"
+         | r
+    r  ::= l
+         | l "=" r       => "assign"
+         | r "+" r       => "plus"
+         | (r) "*" r       => "times"
+         | "(" r ")"
+         | r r           => "times"
     id   ::= idl++       => "stringify"
     idl  ::= [a-d]
 }
@@ -233,17 +231,16 @@ testcase {
 testcase {
     input "a+b*c";
     output "plus:{stringify:{{a}} times:{stringify:{{b}} stringify:{{c}}}}";
-    s  ::= S
     w  ::= " "
-    L  ::= id
-    S  ::= L "=" R  => "assign"
-         | R
-    R  ::= L
-         | L "=" R       => "assign"
-         | R "+" R       => "plus"
-         > R "*" R       => "times"
-         | "(" R ")"
-         | R R           => "times"
+    l  ::= id
+    s  ::= l "=" r  => "assign"
+         | r
+    r  ::= l
+         | l "=" r       => "assign"
+         | r "+" r       => "plus"
+         > r "*" r       => "times"
+         | "(" r ")"
+         | r r           => "times"
     id   ::= idl++       => "stringify"
     idl  ::= [a-d]
 }
@@ -275,13 +272,14 @@ outdent !::= " "  outdent " "
 any      !::= [~]*
 s         ::= !any "\n\n" !ww Statement !ww "\n\n" !any => smt
 ww        ::= sp*
+ws       !::= sp**
 sp        ::= " "
 
-block     ::= "\n" !indent  BlockBody
+block     ::= "\n" !indent  blockBody
            &~ "\n" outdent [~\ ] [~]*
 
-BlockBody ::= Statement
-            > Statement BlockBody => "sbb"
+blockBody ::= Statement
+            > Statement blockBody /ws => "sbb"
 
 Statement ::= Call
             | ^"while" Expr block