private ClassDef classdef() {
        //ClassDef aClassDef = new ClassDef();
        Object aux_local = symbolTable.getLocal();
        this.symbolTable.cleanLocal();
        ArrayList<Atom> atomList = new ArrayList<Atom>();
        lexer.nextToken();
        if (lexer.token != Symbol.ID) {
            error.show("Nome da classe não declarado!");
            return null;
        }
        String name = lexer.getStringValue();
        lexer.nextToken();
        if (lexer.token == Symbol.LEFTPAR) {
            lexer.nextToken();
            if (lexer.token != Symbol.RIGHTPAR) {
                atomList.add(atom());
                while (lexer.token == Symbol.COMMA) {
                    lexer.nextToken();
                    atomList.add(atom());
                }
                if (lexer.token != Symbol.RIGHTPAR) {
                    error.show("Parênteses esperado");
                }
            }
            lexer.nextToken();
        }
        if (lexer.token != Symbol.COLON) {
            error.show("':' esperado!");
        }

        lexer.nextToken();
        Suite s = suite();

        ClassDef classd = new ClassDef(name, atomList, s);
        classes.add(classd);
        Hashtable glob = (Hashtable) symbolTable.getLocal();
        Set entrySet = glob.entrySet();
        // Obtain an Iterator for the entries Set
        Iterator iterate = entrySet.iterator();
        // Iterate through Hashtable entries
        while (iterate.hasNext()) {
            Map.Entry entry = (Map.Entry) iterate.next();
            String type = symbolTable.getInGlobal(entry.getKey().toString()).toString();
            if (type != null) {
                symbolTable.removeInGlobal(entry.getKey().toString());
            }
        }
        this.symbolTable.cleanLocal();
        symbolTable.setLocalObject(aux_local);

        if (symbolTable.getInGlobal(name) != null) {
            error.show("Nome da classe já utilizado!");
        } else {
            symbolTable.putInGlobal(name, "class");
//            symbolTable.putInGlobal(name, classd);
        }
        //Gambi para não imprimir o classdef dentro do main.
        //Talvez a linguagem devia ser reescrita na forma Program : funcdef (';' funcdef)* NEWLINE classdef (';' classdef)* NEWLINE [stmt]
        return new ClassDef();
    }