testcase { input "if (foo) if (bar) baz else bop"; output "IfThen:{Identifier:{{f o o}} IfThenElse:{IfThen:{Identifier:{{b a r}} Identifier:{{b a z}}} Identifier:{{b o p}}}}"; s = Expr Expr = IfThen:: "if" "(" Expr ")" Expr /ws | IfThenElse:: "if" "(" Expr ")" (x:: Expr "else" Expr /ws &~ Expr) /ws | Identifier:: [a-z]++ ws = [\n ]** }