[antlr-interest] A look-ahead/rewind problem
Andreas Meyer
andreas.meyer at smartshift.de
Mon Mar 23 07:13:48 PDT 2009
If you are in a parser rule, input.LT(2) gives you the second-next
_token_, instead of a character (as inside a lexer rule). So it should work.
Andreas
Lukasz Guminski schrieb:
> input.LT(2).getText() does not work because it returns only the next
> character. So when I have
>
> BLOCK with_a_very_long_name
>
> then LT(2) does not return the full name. Of course, I can set
>
> options{
> k = 100;
> }
>
> but that's not the solution.
> Lucas
>
>
> 2009/3/23 Andreas Meyer <andreas.meyer at smartshift.de
> <mailto:andreas.meyer at smartshift.de>>
>
> Lukasz Guminski schrieb:
> >
> >
> >
> > I would suggest you try without the syntactic predicate,
> turn your
> > semantic predicate into a gated semantic predicate {...}? =>
> such that
> > it is forced to be evaluated:
> >
> > block_open: {is_block_open()}?=> BLOCK_BOUNDARY
> >
> >
> > I cannot use a function without a parameter, because the decision
> > bases on the name of a block. So the function needs to be of a form:
> > /is_block_open(String blockName)/ function, and retrieving the
> > parameter requires the parser to make a look-ahead. That's what
> I need
> > the syntactic predicate for.
> Yes, that was meant as an example. If you need lookahead, you may also
> consider using something like
> input.LT(2).getText().equals(mystackofnames.top()). Anyway, have you
> tried turning the sem. predicate into a gated sem. predicate (just
> add a
> => after the ?)
>
> Andreas
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe:
> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>
>
More information about the antlr-interest
mailing list