anchor.diff:  
   
   literal :
  -        (STRINGLITERAL -> ^(STRING STRINGLITERAL) |
  -         INTLITERAL -> ^(INT INTLITERAL) |
  -         STRINGLITERAL { qnameDisabled = false; } '%%' datatype -> ^(TYPEDLITERAL STRINGLITERAL datatype) |
  +        (STRING_LITERAL -> ^(STRING STRING_LITERAL) |
  +         INT_LITERAL -> ^(INT INT_LITERAL) |
  +         STRING_LITERAL { qnameDisabled = false; } '%%' datatype -> ^(TYPEDLITERAL STRING_LITERAL datatype) |
            { qnameDisabled = false; } '\'' QUALIFIED_NAME '\'' -> ^(TYPEDLITERAL QUALIFIED_NAME) | )
   	;
   
  
positive.code: 
  
  /*
  QUALIFIED_NAME and INTLITERAL are conflicting.  To avoid the conflict in
  literal, QUALIFIED_NAME rule is disabled once an attribute has been parsed, to
  give priority to INTLITERAL.
    */
  
  attributeValuePair
  
negative.code: 
  
  
  INT_LITERAL:
      '-'? DIGIT+
      ;
  
  STRING_LITERAL : '"' (options {greedy=false;} : ~('"' | '\\' | EOL) | ECHAR)* '"';
  
  
  /* This production uses a "Disambiguating Semantic Predicates"
     checking whether we are in scope of a declaration/literal or not. If so,
     rule QUALIFIED_NAME is disabled, to the benefit of PREFX/INT_LITERAL. */
  
  QUALIFIED_NAME:
    { !PROV_NParser.qnameDisabled }?
  