[antlr-interest] Error: "Message ID 100 created but is not present in errorMsgIDs"

Johannes Luber jaluber at gmx.de
Fri Jul 11 07:57:03 PDT 2008


Andy Doddington schrieb:
> I have written a very simple grammar, that supports single line 
> comments, and a primitive 'DEFINE name' statement.
> 
> Processing this inside AntlrWorks seems to be reasonably OK< e.g. 
> generating the parse tree. However, when I try
> to debug or generate code I get the following error:
> 
>     error(100): 
> U:\Development\NomadSchemaAnalyser\grammar\NomadSchema.g:0:0: syntax 
> error: codegen: <AST>:0:0: unexpected end of subtree
>     error(10):  internal error: 
> org.antlr.tool.Message.toString(Message.java:124): Assertion failed! 
> Message ID 100 created but is not present in errorMsgIDs or warningMsgIDs.
> 
> This looks like an internal Antlr bug - referring to a non-existent 
> 'Message ID 100' am I correct in this supposition? If so,
> when is it due to be fixed; if not, what am I doing wrong?
> 
> My grammar is as given below:
> 
>     grammar TestGrammar;
> 
>     DefList: (CommentLine | Def | WS)*;
> 
>     fragment Def: 'DEFINE' WS Name;   
>     fragment CommentLine:    '!' ~('\n'|'\r')* '\r'? '\n' { $channel =
>     HIDDEN; };
>     fragment Name:    Letter AlphaNum*;
>     fragment AlphaNum:    Letter | Digit;
>     fragment Digit:    '0'..'9';
>     fragment Letter    : 'A'..'Z' | 'a'..'z';
>     fragment WS: ( ' ' | '\t' | '\r' | '\n')+    { $channel = HIDDEN; };
> 
> Thanks,
> 
>     Andy D
> 

There are some bugs indeed - ANTLR doesn't deal correctly with your 
input. Considering your grammar it may have some bugs, too. Try this:

     grammar TestGrammar2;

     defList: (CommentLine | Def | WS)*;

     Def: 'DEFINE' WS Name;
     CommentLine:    '!' ~('\n'|'\r')* '\r'? '\n' { $channel = HIDDEN; };
     fragment Name:    Letter AlphaNum*;
     fragment AlphaNum:    Letter | Digit;
     fragment Digit:    '0'..'9';
     fragment Letter    : 'A'..'Z' | 'a'..'z';
     WS: ( ' ' | '\t' | '\r' | '\n')+    { $channel = HIDDEN; };

I've changed DefList into a parser rule and removed fragment to create 
tokens to scan for.

Johannes


More information about the antlr-interest mailing list