[antlr-interest] Whats wrong with this?

Mats Ekberg mats.ekberg at arcticgroup.se
Wed Jun 3 15:14:26 PDT 2009


> Hi!
>
> I cant figure out why this grammar dont work (I have left out some  
> not relevant stuff).
> This expression works:    [ LOOKUP( A1234567890, 9TN ) ] 93
> This dont:    [ LOOKUP( A1234567890, ATN ) ] 93
> Why?
>
>
>
> prog   	returns [NationalDutyExprHelper value] :
> 	item (item)* {$value = h;}
> 	;
>
> item   	returns [NationalDutyExprHelper value] :
> 	'[' expr ']' DUTYEXPR
> 	{ h.add(".'").add($DUTYEXPR.text + "'").add(">AMOUNT"); $value = h;}
> 	;
>
> expr
> 	@init { String s = null; }
> 	:
> 	multExpr (('+' {s = "+";} | '-'  {s = "-";} | PERCENT  {s = "* 0.01  
> *";}) multExpr { h.add(s);} )*
>    	;
>    	
> multExpr
> 	@init { String s = null; }
> 	:
>    	atom ( ('*' {s = "*";} | '/' {s = "/";} ) atom { h.add(s);} )*
>    	;
> lookup
> 	:
> 	lu='LOOKUP' '(' TABLEID ',' expr ')'
> 	{ h.addReference(ExtReference.Type.FUNCCALL,  
> $lu.text).addLiteral($TABLEID.text).add($lu.text); }
>    	;
>    	
> funcCall
> 	:
> 	EXTREF '(' expr (',' expr)* ')'
> 	{ h.addReference(ExtReference.Type.FUNCCALL,  
> $EXTREF.text).add($EXTREF.text); }
> 	;
> 	
> parenExpr
> 	:	
> 	'(' expr ')'
> 	;
>
> oneOfMeas
> 	:
> 	'ONE_OF(' me=MEAS
> 	{ h.addReference(ExtReference.Type.MEAS,  
> $me.text).addLiteral($me.text); }
> 	(',' me=MEAS { h.addReference(ExtReference.Type.MEAS,  
> $me.text).addLiteral($me.text); } )*
> 	')'
> 	{ h.add("MEASURE>"); }
> 	;
>
> variable
> 	:
> 	VARIABLE
> 	{ h.addReference(ExtReference.Type.VAR,  
> $VARIABLE.text).add($VARIABLE.text); }
> ;
>
> measure
> 	:
> 	me=MEAS!
> 	{ h.addReference(ExtReference.Type.MEAS, $me.text).add($me.text); }
> ;
> 	
> atom	
> 	:
> 	meu=UNITQ	
> 	{ h.addReference(ExtReference.Type.MEAS_UNIT,  
> $meu.text).add($meu.text); }
> 	|
> 	meu=UNIT	
> 	{ h.addReference(ExtReference.Type.MEAS_UNIT,  
> $meu.text).add($meu.text); }
> 	|
> 	n=NUMBER { h.add($n.text); }
> 	|
> 	lookup
> 	|
> 	funcCall
> 	|
> 	variable
> 	|
> 	oneOfMeas
> 	|
> 	measure
> 	|
> 	parenExpr
> ;	
>
>
> 	
> VARIABLE:	'$' UCLETTER (ALPHANUM|USCORE)* ;	
> EXTREF:		'@' UCLETTER (ALPHANUM|USCORE)* ;	
> DUTYEXPR:	DIGIT DIGIT;
> ID:	LCLETTER (LCLETTER | DIGIT)+ ;
> MEAS:		'&' ALPHANUM ALPHANUM ALPHANUM ALPHANUM;	
> TABLEID	:	UCLETTER (ALPHANUM)* ;
> WS  :   (' '|'\t')+ {skip();} ;
> fragment DIGIT:		'0'..'9';
> fragment UCLETTER:	'A'..'Z';
> fragment LCLETTER:	'a'..'z';
> fragment USCORE:	'_';
> fragment CHAR:	UCLETTER | LCLETTER | DIGIT;
> fragment ALPHANUM:	DIGIT | UCLETTER;
> UNIT	: ALPHANUM ALPHANUM ALPHANUM
> 	;
> UNITQ	: ALPHANUM ALPHANUM ALPHANUM '#' ALPHANUM
> 	;
> PERCENT:	'%' (' ')* 'OF';	
> NUMBER	:	DIGIT+ '.' (DIGIT)* ;
>



-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20090604/181ad7af/attachment.html 


More information about the antlr-interest mailing list