public boolean parse(String text) {
        int n = 0;
        lex = new CompoLexical(text);
        LinkedList<LinkedList<Vector<Utils.Identifier>> > Table  
                = new LinkedList<LinkedList<Vector<Utils.Identifier>>>();
        
        LinkedList<Vector<Utils.Identifier>> row = 
                    new LinkedList<Vector<Utils.Identifier>>();
//        while(lex.nextToken() != null) {
            while(!lex.End()) {
                lex.nextToken();
            // GET Gramer for input and put it in hash
            Vector<Identifier> vect = rules.getMultiKey(new Identifier(lex.currentToken()));
            row.add(vect);
            n++;
        }
        // Add Linked list to Table
        Table.add((LinkedList<Vector<Identifier>>)row.clone());
        
        Vector<Utils.Identifier> V = new Vector<Utils.Identifier>();
        for (int j=1; j<n; j++) {
            row.clear();
            for (int i=0; i<n-j; i++) {
                V.clear();
                for (int k=0; k<j; k++) {
                    // GET String Gramer and put it in Set
                    LinkedList<Vector<Utils.Identifier>> FirstList = Table.get(k);
                    LinkedList<Vector<Utils.Identifier>> SecondList = Table.get(j-k-1);
                    Vector<Utils.Identifier> h1 = FirstList.get(i);
                    Vector<Utils.Identifier> h2 = SecondList.get(i+k+1);
                    for (Utils.Identifier Identifier :getIdentifiers(h1, h2)) {
                        if (Identifier != null)
                            if (!V.contains(Identifier))
                                V.add(Identifier);
                    }
                }
                row.add((Vector<Identifier>) V.clone());   
            }
            Table.add((LinkedList<Vector<Identifier>>)row.clone());
        }
        return (Table.getLast().getLast().contains(rules.getStart()));
    }