anchor.diff:  HEX : DIGIT | 'A'..'F' | 'a'..'z';
   
   fragment
  -PN_LOCAL_ESC : '\\' ( '_' | '~' | '.' | '-' | '!' | '$' | '&' | '\'' | '(' | ')' | '*' | '+' | ',' | ';' | '=' | ':' | '/' | '?' | '#' | '@' | '%' );    	
  +PN_LOCAL_ESC : '\\' ( '_' | '~' | '.' | '-' | '!' | '$' | '&' | '\'' | '(' | ')' | '*' | '+' | ',' | ';' | '=' | '/' | '?' | '#' | '@' | '%' );    	
   
   fragment
   DIGIT : '0'..'9';
   
  -COMMENT : '#' .* EOL -> skip;
  +COMMENT : '#' .* EOL -> channel(99);
   
   fragment
   EOL : '\n' | '\r';
  
positive.code: 
  PNAME_LN : PNAME_NS PN_LOCAL;
      
  BLANK_NODE_LABEL : '_:' PN_LOCAL;
  
  VAR1 : '?' VARNAME;
  
  
negative.code:     | '\u3001'..'\uD7FF'
      | '\uF900'..'\uFDCF'
      | '\uFDF0'..'\uFFFD'
      //| '\u10000'..'\uEFFFF'
      ;
  
  fragment
  PN_CHARS_U : PN_CHARS_BASE | '_';
  
  fragment
  VARNAME : (PN_CHARS_U | DIGIT) (PN_CHARS_U | DIGIT | '\u00B7' | '\u0300'..'\u036F' | '\u203F'..'\u2040')*;
  
  fragment
  PN_CHARS : PN_CHARS_U | MINUS | DIGIT | '\u00B7' | '\u0300'..'\u036F' | '\u203F'..'\u2040';
  
  fragment
  PN_PREFIX : PN_CHARS_BASE ((PN_CHARS|DOT)* PN_CHARS)?;
  
  fragment
  PN_LOCAL : (PN_CHARS_U|':'|DIGIT|PLX) ((PN_CHARS|DOT|':'|PLX)* (PN_CHARS|':'|PLX))?;
  
  fragment
  PLX : PERCENT | PN_LOCAL_ESC;
  
  fragment
  