[antlr-interest] C# code generation errors

Gavin Lambert antlr at mirality.co.nz
Fri May 1 12:55:14 PDT 2009


At 06:32 2/05/2009, Bill Steer wrote:
 >INT		: (DIGIT)+ ;
 >FLOAT	:	INT
 >		| INT '.' INT
 >		| '.' INT
 >;
 >CONSTANT:	FLOAT
 >		|	FLOAT ('e' | 'E') ('+' | '-')? INT
 >;
[...]
 >IDENT	:	LETTER (LETTER | DIGIT)* ;
 >REGISTER:	IDENT ('!'IDENT)* ;

You're quite likely to run into parsing trouble with these rule 
defintions.  Remember that lexer rules are executed without parser 
context; ANTLR will choose a rule based solely on what the input 
looks like, so having multiple top-level lexer rules that accept 
exactly the same input isn't really a good idea.

You should probably merge and left-factor these rules, and modify 
the parser rules to eg. accept either an INT or a FLOAT token in 
contexts where it is expecting a FLOAT, and an IDENT or REGISTER 
where it is expecting a REGISTER.  (And the distinction between 
FLOAT and CONSTANT doesn't make much sense to me.  Shouldn't that 
be part of FLOAT?)



More information about the antlr-interest mailing list