anchor.diff:      | '\'' 
       ;
   
  -PctEncoded: '%' HEX_DIGIT HEX_DIGIT;
  +PctEncoded: '%' [A-F0-9] [A-F0-9];
              
   ParamUnreserved: '[' 
                  | ']' 
                  ;
   
  -fragment PhoneDigitHex: HEX_DIGIT 
  -                      | STAR
  -                      | POUND
  -                      | VisualSeparator
  -                      | DASH
  -                      ;
  -
  -
  -
  -VisualSeparator: '.' 
  -                        | '(' 
  -                        | ')'
  -                        ;
  +VisualSeparator: '(' 
  +               | ')'
  +               ;
   
   Reserved: ';' 
           | '?' 
  
positive.code:        | '/'
         | ':';
  DASH: '-';
  ALPHA: [a-zA-Z];
  DIGIT: [0-9];
  fragment HEX_DIGIT: [A-F0-9];
negative.code: 
  globalNumber: globalDigits=GlobalNumberDigits (extension | isdnSubaddress)? parameter*;
              
  localNumber: localDigits=localNumberDigits (extension | isdnSubaddress)? phoneContext parameter*;
  
  isdnSubaddress: ';isub=' isub=(Reserved | SPECIAL | HEX_ALPHA | ALPHA | DIGIT | Mark | STAR | VisualSeparator | DOT | DASH | PctEncoded)+;
  
  extension: ';ext=' ext=(DIGIT | VisualSeparator | DOT | DASH)+;
  
  phoneContext: ';phone-context=' (dn=domainName | dig=GlobalNumberDigits);
  
  GlobalNumberDigits: '+' (DIGIT | VisualSeparator | DOT | DASH)* DIGIT (DIGIT | VisualSeparator | DOT | DASH)*;
                      
  localNumberDigits: (DIGIT | HEX_ALPHA | STAR | POUND | VisualSeparator | DOT | DASH)* (DIGIT | HEX_ALPHA | STAR | POUND) (DIGIT | HEX_ALPHA | STAR | POUND | VisualSeparator | DOT | DASH)*;         
            
  domainName: ( ((HEX_ALPHA | ALPHA | DIGIT ) ((HEX_ALPHA | ALPHA | DIGIT | DASH )* (HEX_ALPHA | ALPHA | DIGIT ))?) DOT )* ((HEX_ALPHA | ALPHA) ((HEX_ALPHA | ALPHA | DIGIT | DASH )* (HEX_ALPHA | ALPHA | DIGIT ))?) ( DOT )?;
  
  parameter: ';' pName=( HEX_ALPHA | ALPHA | DIGIT | DASH )+ ('=' pValue=(ParamUnreserved | SPECIAL | HEX_ALPHA | ALPHA | DIGIT | Mark | STAR | VisualSeparator | DOT | DASH | PctEncoded)+ )?;
  
  Mark: '_' 
      | '!' 
  