anchor.diff:    static final NAMED = const FormalParameterType('named');
   }
   
  -/**
  - * An event generating parser of Dart programs. This parser expects
  - * all tokens in a linked list (aka a token stream).
  - *
  - * The class [Scanner] is used to generate a token stream. See the
  - * file scanner.dart.
  - *
  - * Subclasses of the class [Listener] are used to listen to events.
  - *
  - * Most methods of this class belong in one of two major categories:
  - * parse methods and peek methods. Parse methods all have the prefix
  - * parse, and peek methods all have the prefix peek.
  - *
  - * Parse methods generate events (by calling methods on [listener])
  - * and return the next token to parse. Peek methods do not generate
  - * events (except for errors) and may return null.
  - *
  - * Parse methods are generally named parseGrammarProductionSuffix. The
  - * suffix can be one of "opt", or "star". "opt" means zero or one
  - * matches, "star" means zero or more matches. For example,
  - * [parseMetadataStar] corresponds to this grammar snippet: [:
  - * metadata* :], and [parseTypeOpt] corresponds to: [: type? :].
  - */
  +/// An event generating parser of Dart programs. This parser expects all tokens
  +/// in a linked list (aka a token stream).
  +///
  +/// The class [Scanner] is used to generate a token stream. See the file
  +/// [scanner.dart](../scanner.dart).
  +///
  +/// Subclasses of the class [Listener] are used to listen to events.
  +///
  +/// Most methods of this class belong in one of three major categories: parse
  +/// methods, peek methods, and skip methods. Parse methods all have the prefix
  +/// `parse`, peek methods all have the prefix `peek`, and skip methods all have
  +/// the prefix `skip`.
  +///
  +/// Parse methods generate events (by calling methods on [listener]) and return
  +/// the next token to parse. Peek methods do not generate events (except for
  +/// errors) and may return null. Skip methods are like parse methods, but skip
  +/// over some parts of the file being parsed.
  +///
  +/// Parse methods are generally named `parseGrammarProductionSuffix`. The
  +/// suffix can be one of `opt`, or `star`. `opt` means zero or one matches,
  +/// `star` means zero or more matches. For example, [parseMetadataStar]
  +/// corresponds to this grammar snippet: `metadata*`, and [parseTypeOpt]
  +/// corresponds to: `type?`.
  +///
  +/// ## Implementation Notes
  +///
  +/// The parser assumes that keywords, built-in identifiers, and other special
  +/// words (pseudo-keywords) are all canonicalized. To extend the parser to
  +/// recognize a new identifier, one should modify
  +/// [keyword.dart](../scanner/keyword.dart) and ensure the identifier is added
  +/// to the keyword table.
  +///
  +/// As a consequence of this, one should not use `==` to compare strings in the
  +/// parser. One should favor the methods [optional] and [expected] to recognize
  +/// keywords or identifiers. In some cases, it's possible to compare a token's
  +/// `stringValue` using [identical], but normally [optional] will suffice.
  +///
  +/// Historically, we over-used identical, and when identical is used on other
  +/// objects than strings, it can often be replaced by `==`.
   class Parser {
     final Listener listener;
   
  
positive.code:         value3 == stringValue;
    }
  
    /**
     * Returns true if the stringValue of the [token] is either [value1],
     * [value2], [value3], or [value4].
     */
    bool isOneOf4(
        Token token, String value1, String value2, String value3, String value4) {
      String stringValue = token.stringValue;
  
negative.code:     }
    }
  
    /// Only called when `identical(token.kind, STRING_TOKEN)`.
    Token parseSingleLiteralString(Token token) {
      listener.beginLiteralString(token);
      // Parsing the prefix, for instance 'x of 'x${id}y${id}z'
  