Perl 6 Compiler Design and Implementation of the Perl 6 Compiler #19

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> 
Copyright © 2005 Patrick R. Michaud