[antlr-interest] Re: syntax predicates
lgcraymer
lgc at mail1.jpl.nasa.gov
Thu Sep 12 16:47:57 PDT 2002
Yeah, there's a synpred bug in 2.7--synpreds only work if they
reference a single rule or token. I pointed this out to Ter a few
months back, so it's probably on the "to be fixed" list.
--Loring
--- In antlr-interest at y..., "richardhensley99" <richard.hensley at m...>
wrote:
> I have a question about syntax predicates because I think I found a
> bug.
>
> I have the following grammar snippet
>
> startRule
> : ( "create" (("or" "replace" "force" "view") => createView)?
> | skipTokens
> )* EOF
> ;
>
> createView
> : (ID)* "view"
> ;
>
> skipTokens
> : ~("create")
> ;
>
> And it generates the following code in the startRule method
>
> case LITERAL_create :
> {
> AST tmp1_AST = null;
> tmp1_AST = (AST) astFactory.create(LT(1));
> astFactory.addASTChild(
> currentAST,
> tmp1_AST);
> match(LITERAL_create);
> {
> boolean synPredMatched2949 = false;
> if (((LA(1) == LITERAL_view
> || LA(1) == ID)
> && (_tokenSet_0.member(LA(2)))
> && (_tokenSet_0.member(LA(3)))
> && (_tokenSet_0.member(LA(4))))) {
> int _m2949 = mark();
> synPredMatched2949 = true;
> inputState.guessing++;
> try {
> {
> match(LITERAL_or);
> match(LITERAL_replace);
> match(LITERAL_force);
> match(LITERAL_view);
> }
> }
> catch (RecognitionException pe) {
> synPredMatched2949 = false;
> }
> rewind(_m2949);
> inputState.guessing--;
> }
>
> The problem seems to be the following line of code:
>
> if (((LA(1) == LITERAL_view
> || LA(1) == ID)
>
> Which is generated because of the syntax predicate, however the
> syntax predicate is for the literal "or", not an ID or the
> literal "view". I'm not sure what gives, but this causes problems
> when the testLiterals options is true for an ID token because the
> token is kicked out of the lexicial analyzer as a LITERAL_or instead
> of an ID.
>
> Has anybody else encountered this problem?
>
> I've worked around it by just using my createView rule as a
predicate
> to createView, but I thought I would ask.
>
> Richard
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
More information about the antlr-interest
mailing list