One approach is to make ISO dates lexemes. That way the longest match discipline works for you, slurping up all the minus signs before the subtraction logic gets to see them. And whitespace won't be allowed, which I assume is the intent. I've tried it out in a pull request. Some of your tests fail, but I am assuming that's because you're working on that stuff.

-- jeffrey

On 05/20/2014 10:18 AM, Steven Haryanto wrote:
Still playing with Marpa. Recently released a small utility to calculate dates: https://metacpan.org/pod/App::datecalc

The calculator allows writing date literals in the form of YYYY-MM-DD, e.g. 2014-05-20. Other allowable literals include date duration in the form of ISO 8601 notation (e.g. P1Y2M3D) or natural (e.g. "1 year 2 months 3 days").

I'm also trying to add some numeric arithmetics capability to the calculator, so it can do simple arithmetics on numbers e.g. '2014 - 10' (2004) or '3*2 * P1D' (meaning 6 times the duration of 1 day).

And that's where I'm currently stuck. My latest attempt at the time of this writing: https://github.com/sharyanto/perl-App-datecalc/commit/3df0bd0cc681be7bd3a535469ac0fbe439df7deb

If I define op_addsub ~ [+-] then Marpa will treat a date literal '2014-05-20' as subtraction operation, yielding 1979. If I require whitespaces around the subtraction operator (i.e. op_addsub ~ [+] | ' - ') then Marpa will refuse to parse '1-2' (no whitespaces around the minus sign). Moreover, DATE-DATE (subtraction of two dates) doesn't work anymore.

Pointers are very much appreciated.

Regards,
Steven
--
You received this message because you are subscribed to the Google Groups "marpa parser" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected] <mailto:[email protected]>.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "marpa 
parser" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to