private void main_declaration(){
        main = true;
        type_specifier();                                   // pregunta por el especificador de tipo
        tokenActual = analizadorLexico.consumirToken();
        if(!tokenActual.obtenerLexema().equals("main")){
            error(16,tokenActual.obtenerLexema(),tokenActual.obtenerLinea());
        }
       
        tokenActual  = analizadorLexico.consumirToken();    // consume el siguiente token para identificar la regla de produccion que sera aplicada a continuciacion
        switch(tokenActual.obtenerLexema()){
            case "(":                                               // si el siguiente token es la apertura de un parentesis nos encontramos con la declaracion de una funcion
                tokenActual = analizadorLexico.consumirToken();     // el parametro siguiente podria ser void (vacio)
                if(!tokenActual.obtenerLexema().equals("void")){    // si no es void deberia seguir una lista de parametros o bien el cierre del parentesis
                    if(!tokenActual.obtenerLexema().equals(")")){
                        analizadorLexico.retroceso();
                        param("main");
                        param_list("main");
                    }else{
                        analizadorLexico.retroceso();
                    }
                }
                tokenActual = analizadorLexico.consumirToken();
                if(tokenActual.obtenerLexema().equals(")")){        // cierre de parentesis de la declaracion de la funcion
                    tokenActual = analizadorLexico.consumirToken();
                    if(tokenActual.obtenerLexema().equals("{")){    // se abren llaves
                        COUNTER_SCOPE++;
                        CURRENT_SCOPE = COUNTER_SCOPE;
                        compound_stmt();                            // se busca un conjunto de sentencias (cuerpo de funcion)
                        tokenActual = analizadorLexico.consumirToken();
                        if(tokenActual!=null){
                            if(tokenActual.obtenerLexema().equals("}")){  // fin de declaracion de funcion      
                                CURRENT_SCOPE = CURRENT_SCOPE - COUNTER_SCOPE;    
                            }else{
                                error(10,tokenActual.obtenerLexema(),tokenActual.obtenerLinea());
                            }
                        }else{
                            error(10,tokenActual.obtenerLexema(),tokenActual.obtenerLinea());
                        }
                    }else{
                        error(9,tokenActual.obtenerLexema(),tokenActual.obtenerLinea());
                    }
                }else{
                    error(8,tokenActual.obtenerLexema(),tokenActual.obtenerLinea());    // falta el parentesis de cierre de la declaracion de la funcion
                }
                break;
            default:
                error(11,tokenActual.obtenerLexema(),tokenActual.obtenerLinea());        // no se encontro ni ";", "(" o "[" lanzamos un error preguntando por el ";" 
        }
    }