Camelia
Prev: Grammar with error handling

Grammar that is easier to extend

Note! This site is about Perl 6.
If you are looking for a solution for the current production version of Perl 5, please check out the Perl 5 tutorial.

tutorial/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<\*>    { '*' };
}

tutorial/regex2/Add3.pm.out

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


The Perl 6 Tricks and Treats newsletter has been around for a while. If you are interested to get special notification when there is new content on this site, it is the best way to keep track:
Email:
Full name:
This is a newsletter temporarily running on my personal site (szabgab.com) using Mailman, till I implement an alternative system in Perl 6.
Gabor Szabo
Written by Gabor Szabo

Published on 2012-01-01


Prev: Grammar with error handling

Comments

In the comments, please wrap your code snippets within <pre> </pre> tags and use spaces for indentation.
comments powered by Disqus
Suggest a change
Elapsed time: 2.8517221

Perl 6 Tricks and Treats newsletter

Register to the free newsletter now, and get updates and news.
Email:
Name: