anchor.diff:                    
   simplePattern     : '_'
                     | Varid
  -                  | literal
  -                  | stableId
  -                  | stableId '(' patterns? ')'
  +                  | literal 
  +                  | stableId ('(' patterns ')')?
                     | stableId '(' (patterns ',')? (Varid '@')? '_' '*' ')'
  -                  | '(' patterns? ')'
  -                //  | xmlPattern 
  -                  ;
  +                  | '(' patterns? ')' ;
   
   patterns          : pattern (',' patterns)*
                     | '_' * ;
  
positive.code: 
  compilationUnit   : ('package' qualId Semi)* topStatSeq ;
  
  //
  
  UnicodeEscape:	'\\' 'u' 'u'? HexDigit HexDigit HexDigit HexDigit ;
  
  WhiteSpace       :  '\u0020' | '\u0009' | '\u000D' | '\u000A';
  // Digit            :  '0' .. '9';
  Paren            :  '(' | ')' | '[' | ']' | '{' | '}';
  Delim            :  '`' | '\'' | '"' | '.' | ';' | ',' ;
  Opchar           : PrintableChar // printableChar not matched by (whiteSpace | upper | lower |
                       // letter | digit | paren | delim | opchar | Unicode_Sm | Unicode_So)
                       ;
                       
  Op               :  Opchar+; 
  Varid            :  Lower Idrest;
  Plainid          :  Upper Idrest
                   |  Varid
                   |  Op;
  Id               :  Plainid
                   |  '`' StringLiteral '`';
  Idrest           :  (Letter | Digit)* ('_' Op)?;
  
  IntegerLiteral   :  (DecimalNumeral | HexNumeral) ('L' | 'l');
  
  
  FloatingPointLiteral 
                   :  Digit+ '.' Digit+ ExponentPart? FloatType?
                   |  '.' Digit+ ExponentPart? FloatType?
                   |  Digit ExponentPart FloatType?
                   |  Digit+ ExponentPart? FloatType;
  
  BooleanLiteral   :  'true' | 'false';
  
  CharacterLiteral :  '\'' (PrintableChar | CharEscapeSeq) '\'';
  
  StringLiteral    :  '"' StringElement* '"'
                   |  '"""' MultiLineChars '"""';
  StringElement    :  '\u0020'| '\u0021'|'\u0023' .. '\u007F'  // (PrintableChar  Except '"')
                   |  CharEscapeSeq;
  MultiLineChars   :  {'"'? '"'? CharNoDoubleQuote} '"'*;
   
  SymbolLiteral    :  '\'' Plainid;
  
  Comment          :  '/*' .*  '*/'
                   |  '//' .*? Nl; //“any sequence of characters up to end of line”
  
  Nl               :  '\r'? '\n';  //“newlinecharacter”
  Semi             :  ';' |  Nl+;
  
  fragment
  HexDigit :  '0' .. '9'  |  'A' .. 'Z'  |  'a' .. 'z' ;
  FloatType        :  'F' | 'f' | 'D' | 'd';
  Upper            :  'A'  ..  'Z' | '$' | '_';  // and Unicode category Lu
  Lower            :  'a' .. 'z'; // and Unicode category Ll
  Letter           :  Upper | Lower; // and Unicode categories Lo, Lt, Nl
  ExponentPart     :  ('E' | 'e') ('+' | '-')? Digit+;
  PrintableChar    : '\u0020' .. '\u007F' ;
  CharEscapeSeq    : '\\' ('b' | 't' | 'n' | 'f' | 'r' | '"' | '\'' | '\\');
  DecimalNumeral   :  '0' | NonZeroDigit Digit*;
  HexNumeral       :  '0' 'x' HexDigit HexDigit+;
  Digit            :  '0' | NonZeroDigit;
  NonZeroDigit     :  '1' .. '9';
  
negative.code:                     ('new' (classTemplate | templateBody)| blockExpr | simpleExpr1 '_'?) ;
  
  simpleExpr1       : literal
                    | stableId 
                    | (Id '.')? 'this'
                    | '_'
                    | '(' exprs? ')'
                    | ('new' (classTemplate | templateBody) | blockExpr ) '.' Id 
                    | ('new' (classTemplate | templateBody) | blockExpr ) typeArgs
          //          | simpleExpr1 argumentExprs  
          ;
                    
  exprs             : expr (',' expr)* ;
  
  