Parsers
Sets of rules can be created to quickly form parsers.
Here's a simple arithmetic expression parser:
rule ident { [ <alpha> | _ ] \w+ }
rule literal { \d+ }
rule factor {:w <literal> | <ident> | \( <expr> \) }
rule term {:w <factor> [ $<mulop>:=[<[*/]>] <factor> ]* }
rule expr {:w <term> [ $<addop>:=[<[+\-]>] <term> ]* }
An expression like
"a + b * 4" ~~ / <expr> /
produces (excerpted):
$/: <a + b * 4 @ 0> $/<expr>: <a + b * 4 @ 0> $/<expr><addop>[0]: <+ @ 2> $/<expr><term>[0]<factor>[0]<ident>: <a @ 0> $/<expr><term>[1]<mulop>[0]: <* @ 6> $/<expr><term>[1]<factor>[0]<ident>: <b @ 4> $/<expr><term>[1]<factor>[1]<literal>: <4 @ 8>