[antlr-interest] Binary Expression Problem!

Sebastian Kaliszewski Sebastian.Kaliszewski at softax.com.pl
Tue Jun 20 02:33:49 PDT 2006


>>The Grammar below is structured in a way that it
>>should observes the perority of relational operators.
>>But in this Grammar one problem persists i.e. a Binary
>>Expression should be comprised of two operands where
>>as from the Grammar it is obvivous that it may come up
>>with a single operand too. Could any body help me in
>>this regard to overcome the single operand issue
>>without loosing the operator's perority.
>>e.g. the Grammar permits: "Hello" where as the
>>required expression is "Hello" = "Hello" without
>>loosing the operator's perority.
>>
>>BinaryExp: EqualityExp;
>>
>>EqualityExp: RelationalExp ((Not_Equal|Equal)
>>RelationalExp)*;
>>
>>RelationalExp: additiveExp ((GT|GTE|LT|LTE)
>>additiveExp)*;
>>
>>additiveExp: MultipicativeExp
>>((PLUS|MINUS)MultipicativeExp)*;
>>
>>MultipicativeExp: SimpleExp ((MUL|DIV|MOD)
>>SimpleExp)*;
>>
>>SimpleExp: STRING|CONSTANTVALUE;
>>
 >
> Try:
> 
> EqualityExp: RelationalExp ((Not_Equal|Equal) RelationalExp)+
> 
> I forget if antlr supports + though, i usually only use ? * :)

I'm affraid it's not what Muhammad wanted. I.e. this will only accept 
"hello" = "hello" but will not accept things like 10+40.

Something like this might be the sollution (although I find that restriction 
somewhat strange)

Binary: Relational ((EQ|NEQ) Relational)+ | BiRelational;

BiRelational: Additive ((GT|GTE|LT|LTE) Additive)+ | BiAdditive;

Relational: Additive ((GT|GTE|LT|LTE) Additive)*;

BiAdditive: Multiplicative ((PLUS|MINUS) Multiplicative)+|BiMultiplicative;

Additive: Multiplicative ((PLUS|MINUS) Multiplicative)*;

BiMultiplicative: Simple ((MUL|DIV|MOD) Simple)+;

Multiplicative: Simple ((MUL|DIV|MOD) Simple)*;

Simple: STRING|CONSTANTVALUE;


rgds
-- 
Sebastian Kaliszewski


More information about the antlr-interest mailing list