[antlr-interest] Parsing a time expression

Rick Mann rmann at latencyzero.com
Sat Apr 24 23:54:30 PDT 2010


On Apr 24, 2010, at 22:58:35, Ron Burk wrote:

> I'm wondering if you meant to disallow spaces in your
> "interval"s. If not, then if you allow (as it appears you intend):
> 
> + 15/  7
> 
> Should that "7" be interpreted as the hours part of the
> interval that starts with "15/" (meaning there's an error
> because the user forgot to supply a second interval operand
> to the '+') or should the "7" be interpreted as a second
> interval (7 seconds)?
> 
> The grammar appears to be ambiguous.

Thanks for the response, and you bring up another question I had: how do I disallow spaces in certain places?

In fact, I do wish to allow whitespace around the slash, but not around the colons. This is because sometimes the expression is copied from a source that puts a space between the slash and the leading hour.

My grammar rewrites something of the form a/b:c:d to (/ a b c d). This much appears to be working fine (output from my test rig):

> 15/ + 1/ + 3.1
The tree:
(+ (+ (/ 15) (/ 1)) 3.1)

But this illustrates the problem, I think. The second sum has three children, an interval, and two INTs, which should form an intRTL.

> 1/ 2:3:4.5 + 6:7 + 8.9
The tree:
(+ (+ (/ 1 2 3 4.5) 6 7) 8.9)

You can see the rewrite rules on line 60-61:

	http://pastie.org/private/k9holwmls7emhfpgzo1oxw

I wanted to rewrite the rule on line 62 to insert a token to give the tree walker a clue as to what was coming next, but I don't know how to insert a fake token (or even if it's possible).

BTW, the error points to one line, but ANTLRWorks colors the intRTL rule red when I add that sum rule on line 15. Is that a clue?

-- 
Rick



More information about the antlr-interest mailing list