anchor.diff:  tagIdens : names+=ALPHA(ALPHA|NUMBER)* (ws COMMA ws names+=ALPHA(ALPHA|NUMBER)*)*
            ;
   
  -text : content+=(ALPHA|NUMBER|COMMA|COLON|QUOTE|LPAREN|RPAREN|LBRACE|RBRACE|PLUS|MINUS|MULTIP|DIVIS|WS)+
  +text : content+=(ALPHA|NUMBER|COMMA|COLON|QUOTE|LPAREN|RPAREN|LBRACE|RBRACE|PLUS|MINUS|MULTIP|DIVIS|ESCAPED_QUOTE|BACKSLASH|WS)+
        ;
   
   funcArgs : argumentNodes+=funcArg (ws COMMA ws argumentNodes+=funcArg)*
  
positive.code: DIVIS : '/';
  WS : [ \n\r\t];
  NUMBER : ('0'|[1-9][0-9]*)('.'[0-9]+)?;
  ALPHA : ~(','|':'|'('|')'|'{'|'}'|'"'|' '|'+'|'-'|'*'|'/'|'\n'|'\r'|'\t')+;
  
  
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 : '-';
  