private LISP_object read_from(LinkedList<String> tokens)throws Exception{            
        if (tokens.size() == 0){
            throw new Exception("unexpected EOF while reading");
        }
        String token = tokens.poll();
        if (token.equals("")){
           do{
               token = tokens.poll();
           }while (token.equals(""));
        }
        if ("(".equals(token)){
            LISP_object L = new LISP_object();
            L.list = new LinkedList();
            
           
            
            while (!tokens.getFirst().equals(")")){
                //System.out.println("lol " + tokens.getFirst());
                if (tokens.getFirst().equals("\n"))
                {
                    //System.out.println("lol");
                    tokens.poll();
                }
                LISP_object l = read_from(tokens);               
                L.list.add(l);
            }                
            tokens.poll();
            return L;
        }        
        else 
        if (")".equals(token))
            throw new Exception("unexpected EOF while reading");
        else{
            LISP_object l = new LISP_object();
            l.var = atom(token);
            return l;
        }
    }