anchor.diff:  
   //special rule for syntactic predicate
   variableStart
  -    : type/*?*/ memberName ('in'|'=')
  +    : variable ('in'|'=')
       ;
   
   // Lexer
   
  -NATURALLITERAL
  -    : Digit Digit*
  -    ;
  -
   fragment
  -Digit 
  -    : '0'..'9'
  -    ;
  -
  -FLOATLITERAL
  -    :   ('0' .. '9')+ '.' ('0' .. '9')+ Exponent?  
  -    //|   '.' ( '0' .. '9' )+ Exponent?  
  -    //|   ('0' .. '9')+ Exponent  
  +Digits
  +    : ('0'..'9')+
       ;
   
   fragment 
   Exponent    
       :   ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ 
  +    ;
  +
  +fragment FLOATLITERAL :;
  +fragment ELLIPSIS :;
  +fragment RANGE :;
  +fragment DOT :;
  +NATURALLITERAL
  +    : Digits 
  +      ( { input.LA(2) != '.' }? => '.' Digits Exponent? { $type = FLOATLITERAL; } )?
  +    | '.' ( '..' { $type = ELLIPSIS; } | '.'  { $type = RANGE; } | { $type = DOT; } )
       ;
   
   CHARLITERAL
  
positive.code: 
  fragment
  StringPart
      :    
      ( ~ /* NonStringChars*/ ('{' | '\\' | '"' | '$' | '\'')
       | EscapeSequence) *
      ;
      
  fragment
  
negative.code:     : expression | existsCondition | nonemptyCondition | isCondition
      ;
  
  existsCondition
      : 'exists' controlVariableOrExpression
      -> ^(EXISTS_EXPR controlVariableOrExpression)
      ;
      
  nonemptyCondition
      : 'nonempty' controlVariableOrExpression
      -> ^(NONEMPTY_EXPR controlVariableOrExpression)
      ;
  
  isCondition
      : 'is' type ( (memberName '=') => memberName specifier | expression )
      -> ^(IS_EXPR type memberName? specifier? expression?)
  