[antlr-interest] uh oh...trouble in meaning of (..)=> pred!!!
Terence Parr
parrt at cs.usfca.edu
Thu Mar 15 11:06:30 PDT 2007
On Mar 15, 2007, at 1:15 AM, Dr. Kocher, Hartmut wrote:
> Hi Terence,
>
> I discussed the issue with my colleague who has a very good
> compiler/parser background.
>
> As you said, not evaluating the predicate is an optimization.
> Therefore, we think the correct solution is that (..)=> is
> evaluated (with backtracking if necessary). When I specify a
> predicate I know that I'm going to take a hit for this. So the
> normal solution is to always add the predicate. However, you could
> still do an optimization. If you expand your lookahead automaton,
> you could still decide early which alt to take. Only if this cannot
> easily be predicted in advance, you start adding the predicate
> code. (Actually, the optimization could be added later, say ANTLR
> 3.1, because it would only speed up things).
With the new gated predicate version of (...)=>, the pred is always
evaluated because that is what you said. I cannot know whether you
have a pred that matches a longer string than the alt like:
A : ('a' DIGIT)=> 'a'
| 'a'
| 'b'
;
For this, 'a9' must match first alt and 'a' must match 2nd alt. No
pred is evaluated for 'b' though.
> The current solution is less than optimal because it's faster, but
> not always correct (I could write an even faster lexer, if it
> doesn't have to be correct :-) ).
ha hah hah!
> I think it's better to generate correct lexer/parsers, then to
> optimize them. Therefore, the rule should be
> 1) always add the predicate
yup.
> 2) leave it out if you can resolve it out correctly in advance.
that could be optimized out later if we can know. Might be
undecidable; figuring out if L(G1)==L(G2) is anyway if I remember.
Thanks!
Ter
More information about the antlr-interest
mailing list