public void analizadorSintactico() {
//        System.out.println("!! Entro a analizadorSintactico");
        generaLista();
        tok = this.lista.iterator();
        errores = new <String>ArrayList();
        aux=(Tokens2)tok.next();
        if(!aux.getTipo().equals(Nodo.tipoToken.EOF)){
            if (aux.getToken().equals("program")) {
                raiz = new Nodo(aux.getToken(), aux.getTipo());
                aux=(Tokens2)tok.next();
                
                if (aux.getTipo()==Nodo.tipoToken.LlaveIzq) {
                    aux=(Tokens2)tok.next();
                } else {error(" Se esperaba { (program)");}
                this.listaDeclaraciones();
                Iterator nex = tip.iterator();
                while(nex.hasNext()){
                    raiz.addNodo((Nodo)nex.next());
                }
                ArrayList<Nodo> lis = this.listaSentencias(0);
                nex = lis.iterator();
                while (nex.hasNext()) {
                    raiz.addNodo((Nodo) nex.next());
                }
                if (aux.getTipo()==Nodo.tipoToken.LlaveDer) {
                    aux=(Tokens2)tok.next();
                }else 
                    error(" Se esperaba } (program)");
                while(aux.getTipo()!=Nodo.tipoToken.EOF){
                    error("Token fuera de bloque program -> "+aux.getToken());
                    aux=(Tokens2)tok.next();
                }
            }
            else {
                error(" Se esperaba program");
            raiz = new Nodo();
            }
            
        }
    }