[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