On Mar 3, 2009, at 4:06 PM, Sam Harwell wrote:

> Taken from Java.stg, we end up with a mismatched mark/rewind, which  
> causes the temporary stream buffer (FastQueue) to flush during a  
> predict operation that encounters predicates.

oh right!  that used to work because we buffered up the entire thing.  
thanks for catching this Sam!

>
> /** A state in a cyclic DFA; it's a special state and part of a big  
> switch on
>  *  state.
>  */
> cyclicDFAState 
> (decisionNumber,stateNumber,edges,needErrorClause,semPredState) ::= <<
> int LA<decisionNumber>_<stateNumber> = input.LA(1);<\n>
> <if(semPredState)> <! get next lookahead symbol to test edges, then  
> rewind !>
> int index<decisionNumber>_<stateNumber> = input.index();
> input.rewind();<\n>
> <endif>
> s = -1;
> <edges; separator="\nelse ">
> <if(semPredState)> <! return input cursor to state before we  
> rewound !>
> input.seek(index<decisionNumber>_<stateNumber>);<\n>
> <endif>
> if ( s>=0 ) return s;
> break;
> >>
>
> For now I noticed it “works” to simply add a call input.mark() right  
> after the call to input.rewind(), but I don’t think that’s the  
> proper solution.

Hmm...now I have to remember what the hell I meant the stuff to do.

I assume this is for a tree parser since the parser is not yet using  
the fast queue?
Ter
_______________________________________________
antlr-dev mailing list
[email protected]
http://www.antlr.org/mailman/listinfo/antlr-dev

Reply via email to