[antlr-interest] BUG: Initialization for 3 levels of import
Terence Parr
parrt at cs.usfca.edu
Mon Feb 16 10:47:02 PST 2009
doh! thanks...
http://www.antlr.org/jira/browse/ANTLR-385
Ter
On Feb 16, 2009, at 6:47 AM, George S. Cowan wrote:
> First, I want to thank you again for ANTLR. I can't imagine going
> back to hand-coding or using other parser generators. Unfortunately,
> I have found another bug in the composite grammar code.
>
> I modified the final example at http://www.antlr.org/wiki/display/ANTLR3/Composite+Grammars
> slightly to add an additional level of grammar import. The
> generated CParser.java does not initialize the delegate for the
> lowest level correctly.
>
> --------- Grammar and Lexer files ------------
> lexer grammar L ;
>
> LETTER : 'a'..'z' ;
> SPACE : ' ' ;
> ----------------------------------------------
> parser grammar P0 ;
>
> letter : LETTER ;
> ----------------------------------------------
> parser grammar P1 ;
> import P0 ;
>
> // letter : LETTER ;
> spaces : SPACE+ ;
> ----------------------------------------------
> parser grammar P2 ;
> import P1 ;
>
> letters : letter+ ;
> ----------------------------------------------
> grammar C ;
> import L, P2 ;
>
> stuff : ( letters spaces )+ ;
>
> LETTER: 'a'..'z' | 'A'..'Z' ;
> ------- End of Grammar and Lexer files -------
>
> Here is the delegation code generated for the CParser.java. Note
> that in the CParser constructor gP0 and gP1 are initialized in the
> wrong order. If those last two lines are swapped, my tests work fine.
>
> --------------- CParser.java -----------------
> // delegates
> public C_P2_P1_P0 gP0;
> public C_P2_P1 gP1;
> public C_P2 gP2;
> // delegators
>
>
> public CParser(TokenStream input) {
> this(input, new RecognizerSharedState());
> }
> public CParser(TokenStream input, RecognizerSharedState
> state) {
> super(input, state);
> gP2 = new C_P2(input, state, this);
> gP0 = gP1.gP0;
> gP1 = gP2.gP1;
> }
> ------- End extract from CParser.java --------
>
> Regards,
> George
>
>
>
>
>
> 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