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 range(each[0], each[2]);
      });
      final positive = multiple.or(single).plus().map((each) {
        return each.length == 1 ? each[0] : new _AlternativeCharacterParser(null, each);
      });
      _pattern = char('^').optional().seq(positive).map((each) {
        return each[0] == null ? each[1] : each[1].neg();
  
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)) {
  