anchor.diff:      tokens = _convertJsonStringToTokens();
     }
   
  +  String _consumeCharacter() {
  +    String character = _json[_index];
  +    _index++;
  +    return character;
  +  }
  +
  +  String _consumeCharacters(int count) {
  +    String fragment = _json.substring(_index, _index + count);
  +    _index += count;
  +    return fragment;
  +  }
  +
  +  String _peekCharacter() {
  +    if (_index == _json.length) {
  +      return null;
  +    }
  +    return _json[_index];
  +  }
  +
  +  void _consumeWhitespace() {
  +    while (_WHITESPACE.hasMatch(_peekCharacter())) {
  +      _consumeCharacter();
  +    }
  +  }
  +
     Queue<Token> _convertJsonStringToTokens() {
       Queue<Token> tokens = new Queue();
       while(_index != _json.length) {
  -      String character = _json[_index];
  -      while (_WHITESPACE.hasMatch(character)) {
  -        _index++;
  -        character = _json[_index];
  -      }
  +      _consumeWhitespace();
  +      String character = _peekCharacter();
   
         String value;
         ValueType valueType = _valueTypeMap[character];
  
positive.code:   String _parseNumber() {
      String number = "";
  
      String character = _json[_index];
      while(_numberCharacters.contains(character)) {
        number += character;
        _index++;
        if (_index == _json.length) {
          break;
        }
        character = _json[_index];
      }
      return number;
    }
  
    String _parseString() {
      _index++;
      String string = "";
      String character = _json[_index];
      while (character != '"') {
        if (character == r"\") {
          string += _parseEscapedStringFragment();
        } else {
          string += character;
          _index++;
        }
        if (_index == _json.length) {
          throw new LexerException("Invalid json fragment encountered: $string");
        }
        character = _json[_index];
      }
      _index++;
      return string;
    }
  
    String _parseEscapedStringFragment() {
      _index++;
      String character = _json[_index];
      _index++;
      switch (character) {
        case '"':
        case r'\':
  
negative.code:         case ValueType.END_ARRAY:
          case ValueType.NAME_SEPARATOR:
          case ValueType.VALUE_SEPARATOR:
            value = _consumeCharacter();
            break;
          default:
            throw new LexerException("Syntax Error: Unexpected token $character");
  