+
+testcase {
+ input "aaaaa";
+ output "top:{a q:{{a a a}} a}";
+
+ s = top:: z (q::"a"*) z
+ z = a:: "a"
+}
+
+testcase {
+ input "if (x) if (y) z else q";
+ output "if:{ident:{{x}} else:{if:{ident:{{y}} then:{ident:{{z}}}} ident:{{q}}}}";
+
+ s = Expr
+ Expr = if:: "if" "(" Expr ")" IfBody /ws
+ | ident:: [a-z]++
+ IfBody = else:: Expr "else" Expr /ws
+ | then:: Expr &~ ((~[])* "else" Expr! /ws)
+ ws = [ ]**
+}
+
+
+testcase {
+ input "12111211";
+ output "ac:{{2 1 2 1}}";
+ //output "a:{{2 1 2 1}}";
+ //output "c:{{c:{1 1} c:{1 1}}}";
+
+ 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 = ("b":: x "2")*
+ c = ("c":: x "2" x "1")*
+ x = [123]
+}
+
+
+//testcase {
+// input "ab";
+//
+// s = a:"a" b:"b"
+//}
+
+
+testcase {
+ input "a c";
+ s = first:: A WSA B? WSB C
+ A = "a"
+ B = "b"
+ C = "c"
+ WSA = WSA:: " "**
+ WSB = () -> ~" "
+ | WSB:: " "++
+}
+
+//testcase {
+// input "aaaaaXaaaa";
+// output "";
+// s = ManyA &~ EndsWithZ
+// EndsWithZ = Anything "Z"
+// ManyA = () | "a" ManyA
+// Anything = () | ("a" | "X" | "Z") Anything
+//}
+
+testcase {
+ input "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
+ output "";
+ s = ManyA
+ ManyA = ()
+ | A ManyA! & ManyAB
+ A = "a"
+ ManyAB = ()
+ | "a" ManyAB
+ | "b" ManyAB
+}
+
+testcase {
+ input "aaaaaaaa";
+ output "";
+ s = As & AAs
+ As = () | As "a"
+ AAs = () | AAs "aa"
+}
+
+