anchor.diff:        }
       }
       return false;
  +  }
  +  Parser or(Parser other) {
  +    if (other is _CharacterParser) {
  +      var list = new List();
  +      list.addAll(_parsers);
  +      list.add(other);
  +      return new _AlternativeCharacterParser(list);
  +    } else {
  +      return super.or(other);
  +    }
     }
   }
   
  
positive.code:     return context.failure(_message);
    }
    abstract bool _match(int value);
    Parser neg([String message]) => new _NegatedCharacterParser(message != null ? message : 'no $_message', this);
  }
  
  
negative.code: /** Internal parser class for alternative character classes. */
  class _AlternativeCharacterParser extends _CharacterParser {
    final List<_CharacterParser> _parsers;
    _AlternativeCharacterParser(parsers)
        : super(parsers[0]._message),
          _parsers = parsers;
    bool _match(int value) {
      for (final parser in _parsers) {
        if (parser._match(value)) {
  