anchor.diff:  ARGUMENT_CONTENT
      : .
      ;
  -   // -------------------------
  -   // Target Language Actions
  -   //
  -   // Many language targets use {} as block delimiters and so we
  -   // must recursively match {} delimited blocks to balance the
  -   // braces. Additionally, we must make some assumptions about
  -   // literal string representation in the target language. We assume
  -   // that they are delimited by ' or " and so consume these
  -   // in their own alts so as not to inadvertantly match {}.
  -
  +
  +// -------------------------
  +// Target Language Actions
  +//
  +// Many language targets use {} as block delimiters and so we
  +// must recursively match {} delimited blocks to balance the
  +// braces. Additionally, we must make some assumptions about
  +// literal string representation in the target language. We assume
  +// that they are delimited by ' or " and so consume these
  +// in their own alts so as not to inadvertantly match {}.
   mode TargetLanguageAction;
   NESTED_ACTION
      : LBrace -> type (ACTION_CONTENT) , pushMode (TargetLanguageAction)
  
positive.code: LINE_COMMENT
     : LineComment -> channel (COMMENT)
     ;
     // -------------------------
     // Integer
     //
  
  INT
     : DecimalNumeral
     ;
     // -------------------------
     // Literal string
     //
     // ANTLR makes no distinction between a single character literal and a
     // multi-character string. All literals are single quote delimited and
     // may contain unicode escape sequences of the form \uxxxx, where x
     // is a valid hexadecimal number (per Unicode standard).
  
  STRING_LITERAL
     : SQuoteLiteral
     ;
  
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)
     ;
  