[antlr-interest] Subrule alternatives - MismatchedTokenException cannot be explained

st3 stempuro2 at gmail.com
Mon Aug 30 13:01:28 PDT 2010


Hi,

I have a simple grammar - which includes a '+' or '-' operation on a
variable (ID) or constant (INT).
The "add" rule is obviously: "mult" (+/- "mult"). 

However, the way I need the "add" rule defined throws the
MismatchedTokenException:
----------------------------------------------------------------------------
add	:	mult	
		( 
			('+' mult) 
			| 
			('-' mult) 
		)*
	;

while this way to define "add" rule works just fine:
----------------------------------------------------------------------------
add	:	mult ( ( '+' | '-' ) mult)*	;


Can you please give some insights white Antlr 3.0 does not like the first
way to define "add" rule?
The reason I need it this way is to use tree rewrites.

I tried using syntactic predicates but they error out. I have consulted
Anltr reference book as well - however nothing obvious jumped at me.

Full grammar below.

Thanks a lot for your help!



grammar Dummy;

expr : add ';' ;

add	:	mult	
		( 
			('+' mult) 
			| 
			('-' mult) 
		)*
	;

//add	:	mult ( ( '+' | '-' ) mult)*	;

mult	:	constant
		|	variable
		|	'(' expr ')'
		;
						
variable	:	ID;	
constant	:	INT;

ID  :	('a'..'z'|'A'..'Z') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ;
INT :	'0'..'9'+;
WS  :   ( ' ' | '\t' | '\r' | '\n' ) { $channel=HIDDEN; } ;

-- 
View this message in context: http://antlr.1301665.n2.nabble.com/Subrule-alternatives-MismatchedTokenException-cannot-be-explained-tp5479806p5479806.html
Sent from the ANTLR mailing list archive at Nabble.com.


More information about the antlr-interest mailing list