examples/regex2/Add3.pm
grammar Add3 {
rule TOP { ^ <math> $ }
rule math {
<operand>
[ <operator> || [ \D { die "Invalid operator" } ] || {die "missing operator"} ]
[ <operand> || { die "Missing second operand" } ]
[ \S { die "Invalid value after the second operand" } ]?
}
token operand { \d+ }
proto token operator { <...> };
token operator:sym<\+> { '+' };
token operator:sym<\*> { '*' };
}
2 + 3 OK 2 + 4 OK 2 + 3 x exception received: Invalid value after the second operand 2 + exception received: Missing second operand 2 3 exception received: missing operator 2 - 3 exception received: Invalid operator