+}
+
+
+testcase "unnamed" {
+ input "abc ";
+
+ s = s2:: q " "*
+ q = a3:: [a-z] [a-z] [a-z]
+ &~ ("":: ~[])! "b" ("":: ~[]*)!
+}
+
+testcase "unnamed" {
+ input "abc ";
+ output "s:{a b c}";
+
+ s = s:: [a-z] [a-z] [a-z] " "*
+}
+
+testcase "a+2" {
+
+ input "a+2";
+ output "Plus:{left:{Foo} right:{{2}}}";
+
+ s = Expr
+ Expr = "":: [0-9]++
+ | Plus:: (left::Expra) "+" (right::Expr)
+ Expra = Foo:: ("a" | "b")
+
+}
+
+testcase "unnamed" {
+ input "aaaaa";
+ output "top:{a q a}";
+
+ s = top:: z (q::"a"*) z
+ z = a:: "a"
+}
+
+testcase "dangling else" {
+ 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 "unnamed" {
+ input "12111211";
+ output "ac:{{2 1 2 1}}";
+
+ s = ab:: ab
+ | ac:: ac
+ | bc:: bc
+ 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 "follow restrictions on empty string" {
+ input "xxx";
+ s = x:: "x" A "x" C "x"
+ A = B
+ B = "y"
+ | () -> ~"x"
+ C = D -> ~"x"
+ D = ()
+}
+
+testcase "unnamed" {
+ input "axxxxxc";
+ output "q:{a {x x x x x} c}";
+ s = q:: A ws (B|()) ws C
+ ws = "":: [x]**
+ A = a:: "a"
+ B = b:: "b"
+ C = c:: "c"
+}
+
+testcase "unnamed" {
+ input "aaaaaaaaaaaaaaaaaaaa";
+ output "";
+ s = As & AAs
+ As = () | As "a"
+ AAs = () | AAs "aa"
+}