anchor.diff:         // an expression symbol, e.g.:<X + Y>
        | '<' expr '>' #expressionSymbol
          // function application, e.g.: f(X)
  -     | functor=expr '(' ( args+=expr (',' args+=expr)* )? ')' # functionApplication
  +     | expr_function_application # functionApplication
          // tuple, e.g.: (A, B, C)
        | '(' expr ',' expr (',' expr)* ')' #tuple
          // counting formula, e.g.: | X in 1..10 : X < 5 |
  
positive.code:       FLOAT_TYPE_SUFFIX?
      ;
  
  SYMBOLIC_NAME
      : ([a-zA-Z] | [0-9] | '_') ([a-zA-Z] | [0-9] | '_')* ('\'')*
      | '"'  (ESCAPE_SEQUENCE | ~('\\' | '"' ) )* '"'
      | '\'' (ESCAPE_SEQUENCE | ~('\\' | '\'') )* '\''
      ;
  
  
negative.code: UNDERSCORE              : '_' ;
  PERIOD                  : '.' ;
  
  INTEGER 
      : ('0'..'9')+
      ;
      
  RATIONAL
      : ('0' | '1'..'9' '0'..'9'*)
      | ('0'..'9')+ '.' ('0'..'9')+ EXPONENT? FLOAT_TYPE_SUFFIX?
  