anchor.diff:  DIVIS : '/';
   WS : [ \n\r\t];
   NUMBER : ('0'|[1-9][0-9]*)('.'[0-9]+)?;
  -ALPHA : ~(','|':'|'('|')'|'{'|'}'|'"'|' '|'+'|'-'|'*'|'/'|'\n'|'\r'|'\t')+;
  +ALPHA : ~(','|':'|'('|')'|'{'|'}'|'"'|' '|'+'|'-'|'*'|'/'|'\n'|'\r'|'\t'|'\\')+;
   
  
positive.code:          | NUMBER                       # ExprNumber
           ;
  
  // TODO: add escaping
  string : QUOTE content+=(ALPHA|NUMBER|TAG_MARKER|COMMA|FUNCTION_MARKER|COLON|LPAREN|RPAREN|LBRACE|RBRACE|PLUS|MINUS|MULTIP|DIVIS|WS)* QUOTE
         ;
  
  ws : WS*
  
negative.code: TAG_MARKER : ',,';
  COMMA : ',';
  FUNCTION_MARKER : '::';
  COLON : ':';    // This is needed because ALPHA can't match a single colon; this must be matched separately
  LPAREN : '(';
  RPAREN : ')';
  LBRACE : '{';
  RBRACE : '}';
  ESCAPED_QUOTE : '\\"';
  BACKSLASH : '\\';
  QUOTE : '"';
  PLUS : '+';
  MINUS : '-';
  