[antlr-interest] tiny filter grammar
    Cameron Taggart 
    cameron.taggart at gmail.com
       
    Wed Sep 20 23:42:57 PDT 2006
    
    
  
Hi I'm trying to build a grammar so that I can parse an existing
filter text.  Here is an example filter text:
( IsNull( {a}) or {b} =1 ) // comment
  AND ( IsNull ({c}) or  {d} = 1 )
 AND {e} = "Please Help!"
Being an antlr newbie, I'm having a hard time figuring out the secret
sauce for dealing with the various expression types.  I'm not really
sure how to deal with groups.  Here is my antlr v3 grammar in its
entirety:
grammar FilterParser;
group : '(' (expression|logical) ')';
expression : relational|isNull; // |logical; recursion overflow to
logical from expression
logical : (expression|group) (logicalOp (expression|group))+;
relational : Variable relationalOp (Number|String);
isNull : 'IsNull' '(' Variable ')';
relationalOp : '='|'!='|'>'|'<'|'>='|'<=';
logicalOp : 'AND'|'or'; // TODO case insensitive
LineComment : '//' ~('\n'|'r')+ {channel=99;};	
Variable : '{' ~('}')* '}';
Number : ('-'|'+')?('0'..'9')+('.'('0'..'9')+)?;
String	: '"' ~('"')* '"';
cheers,
Cameron
    
    
More information about the antlr-interest
mailing list