# use Grammar::Tracer;
grammar foo {
rule TOP { [ <SBN> | <enumerated> ] ['#' .* ]? }
rule SBN { '{' ~ '}' [ <var> <[:|]> <expression> '>' <expression> ] }
rule var { $<abs(>='|' ~ $<)>='|' <var> | <name> }
token name { \w+ }
rule enumerated { :!r '{' ~ '}' <list> }
rule list { :!r <expression>* % ',' }
regex expression { <term>+ % [ '*' | <.ws> ]? }
regex term { $<abs(>='|' ~ $<)>='|' <expression> | <literal> | <name> }
token literal { \d+ }
}
say foo.parse: $_ for q:to<END>.lines;
{|x |x |x|||} #Wow, this gets resolved!
{|x |x |x|| x|} #Oh-uh, this has true ambiguity...
{|x |a|b|}
{x | x > 0}
{x | |x| > 3}
{x |x|}
END