grammar Arithmetic { # expression -> (term add_op)* term rule expression { [ ]* } # term -> (factor mul_op)* factor rule term { [ ]* } # factor -> atom | '(' expression ')' rule factor { | | '(' ')' } # add_op -> '+' | '-' token add_op { <[+-]> # that's a char class } # mul_op -> '*' | '/' token mul_op { <[*/]> } token atom { \d+ } } # match it: $input ~~ Grammar.expression;