anchor.diff:  OR
       : '||'
       ;
  +    
  +INVERSE
  +    : '^'
  +    ;
   
   OPEN_BRACE
       : '('
  
positive.code:     ;
  
  conditionalOrExpression
      : conditionalAndExpression ( OR conditionalAndExpression )*
      ;
  
  conditionalAndExpression
      : valueLogical ( AND valueLogical )*
      ;
  
  valueLogical
  
negative.code:  */
  grammar Sparql;
  
  options{
  output = AST;
  }
  
  tokens{
  QUERY;
  UPDATE;
  PROLOGUE;
  SUBSELECT;
  SELECTCLAUSE;
  WHERE_CLAUSE;
  VAR;
  ALIAS;
  GROUPBY;
  ORDERBY;
  ORDERCONDITION;
  BINDINGVALUE;
  TRIPLESTEMPLATE;
  GROUPGRAPHPATTERN;
  GROUPGRAPHPATTERNSUB;
  GRAPHPATTERNNOTTRIPLES;
  TRIPLESBLOCK;
  ARGLIST;
  EXPRESSIONLIST;
  CONSTRUCTTRIPLES;
  PROPERTYLIST;
  COLLECTION;
  BLANKNODEPROPERTYLIST;
  OBJECTLIST;
  NOTEXISTS;
  CONDITIONAL_OR_EXPRESSION;
  CONDITIONAL_AND_EXPRESSION;
  }
  
  @header {
      package com.googlecode.sparkleg;
  }
  