private static String AnalizarGramatica() {
        ArrayList<String> pila = new ArrayList();
        pila.add("$");
        pila.add(tabla[tabla.length - 1][1]);
        MatrizCuadrada mat =  new MatrizCuadrada();
        ArrayList<Lexema> vectorFila = new ArrayList();
        int x, y;
        while (!ids.isEmpty()) {
            if (comapararTopes(ids, pila)) {
                Lexema lex = new Lexema();
                lex.setId(ids.get(ids.size() - 1));
                lex.setLexema(nombres.get(nombres.size() - 1));
                vectorFila.add(lex);
                cotarCabezas(ids, pila);
            } else if (checarλ(pila)) pila.remove(pila.size() - 1);
            else {
                x = BuscarX(ids.get(ids.size() - 1));
                y = BuscarY(pila.get(pila.size() - 1));
                if (x == tabla.length) 
                    return ids.get(ids.size() - 1) + " en la Ecuacion numero: " + lineas.get(lineas.size() - 1) + "\n";
                if (y == altoTabla)
                    return "Esperaba:" +
                            Modelo.tokenToLexema(pila.get(pila.size() - 1)) +
                            " en la Ecuacion numero: " +
                            lineas.get(lineas.size() - 1) +
                            ", encontro " + Modelo.tokenToLexema(ids.get(ids.size() - 1)) + "\n";
                if (tabla[x][y].compareTo("E") == 0) 
                    return "Esperaba: " + Esperando(y) +
                            " en la Ecuacion numero: " +
                            lineas.get(lineas.size() - 1) +
                            ", encontro " + Modelo.tokenToLexema(ids.get(ids.size() - 1)) + "\n";
                int numPro = Integer.parseInt(tabla[x][y]);
                if (numPro == 1 | numPro == 2 | numPro == 3 | numPro == 4) {
                    mat.insertVector(vectorFila);
                    vectorFila = new ArrayList();
                }
                pila.remove(pila.size() - 1);
                agregarGramtica(pila, producciones.get(numPro - 1).getListas());
            }
        }
        return mat.resolverEcuacion();
    }