@Override
    protected Void parse() throws IOException {
        getProcessor().beginAccessor();
        try {
            whitespace();
            
            while(peek() != -1) {
                if(attempt('.')) {
                    List<String> names=new ArrayList<String>();
                    names.add(id());
                    while(attempt(','))
                        names.add(id());
                    getProcessor().objectAccess(names);
                } else
                if(attempt('[')) {
                    AccessorProcessor.Indexes indexes;
                    
                    if(attempt('*'))
                        indexes = new AllIndexes();
                    else {
                        int index1=digits();
                        
                        Integer index2;
                        if(attempt('.')) {
                            consume('.');
                            index2 = digits();
                        }
                        else
                            index2 = null;

                        if(index2 != null)
                            indexes = new RangeIndexes(index1, index2);
                        else
                            indexes = new SingleIndexes(index1);
                    }
                    
                    consume(']');
                    
                    getProcessor().listAccess(indexes);
                }
                else
                    throw new JsonParseException("Unrecognized character: "+((char) peek()));
            }
        }
        finally {
            getProcessor().endAccessor();
        }
        return null;
    }