anchor.diff:  WS
      : Ws+ -> channel (OFF_CHANNEL)
      ;
  -   // -------------------------
  -   // Illegal Characters
  -   //
  -   // This is an illegal character trap which is always the last rule in the
  -   // lexer specification. It matches a single character of any value and being
  -   // the last rule in the file will match when no other rule knows what to do
  -   // about the character. It is reported as an error but is not passed on to the
  -   // parser. This means that the parser to deal with the gramamr file anyway
  -   // but we will not try to analyse or code generate from a file with lexical
  -   // errors.
  -   //
  -   // Comment this rule out to allow the error to be propagated to the parser
  -
  -ERRCHAR
  -   : . -> channel (HIDDEN)
  -   ;
  -   // ======================================================
  -   // Lexer modes
  -   // -------------------------
  -   // Arguments
  -
  +
  +// -------------------------
  +// Illegal Characters
  +//
  +// This is an illegal character trap which is always the last rule in the
  +// lexer specification. It matches a single character of any value and being
  +// the last rule in the file will match when no other rule knows what to do
  +// about the character. It is reported as an error but is not passed on to the
  +// parser. This means that the parser to deal with the gramamr file anyway
  +// but we will not try to analyse or code generate from a file with lexical
  +// errors.
  +//
  +// Comment this rule out to allow the error to be propagated to the parser
  +// ERRCHAR
  +//    : . -> channel (HIDDEN)
  +//    ;
  +
  +// ======================================================
  +// Lexer modes
  +// -------------------------
  +// Arguments
   mode Argument;
   // E.g., [int x, List<String> a[]]
   NESTED_ARGUMENT
  
positive.code:  *	Modified 2015.06.16 gbr
   *	-- update for compatibility with Antlr v4.5
   */
  lexer grammar ANTLRv4Lexer;
  
  
  options { superClass = LexerAdaptor; }
  import LexBasic;
  // Standard set of fragments
  tokens { TOKEN_REF , RULE_REF , LEXER_CHAR_SET }
  channels { OFF_CHANNEL , COMMENT }
  // ======================================================
  // Lexer specification
  //
  // -------------------------
  // Comments
  DOC_COMMENT
     : DocComment
     ;
  
  BLOCK_COMMENT
  
negative.code: UNTERMINATED_STRING_LITERAL
     : USQuoteLiteral
     ;
  
  // -------------------------
  // Arguments
  //
  // Certain argument lists, such as those specifying call parameters
  // to a rule invocation, or input parameters to a rule specification
  // are contained within square brackets.
  BEGIN_ARGUMENT
     : LBrack
     { handleBeginArgument(); }
     ;
  
  // -------------------------
  // Target Language Actions
  BEGIN_ACTION
     : LBrace -> pushMode (TargetLanguageAction)
     ;
  
  // -------------------------
  // Keywords
  //
  // Keywords may not be used as labels for rules or in any other context where
  // they would be ambiguous with the keyword vs some other identifier.  OPTIONS,
  // TOKENS, & CHANNELS blocks are handled idiomatically in dedicated lexical modes.
  OPTIONS
     : 'options' -> pushMode (Options)
     ;
  