private bool declaracao_r(ref Declaracoes declr_r)
        {
            int          guarda = index;
            Declaracao_r decls  = new Declaracao_r();

            decls.d1 = new Declaracao();

            if (declaracao(ref decls.d1))
            {
                if (declaracao_r(ref decls.d2))
                {
                    declr_r = decls;
                    return(true);
                }
            }

            index = guarda;
            Declaracao decl = new Declaracao();

            if (declaracao(ref decl))
            {
                declr_r = decl;
                return(true);
            }
            return(false);
        }
        private bool declaracoes(Declaracoes decls)
        {
            // tenta executar => <declaracoes> := <declaracoes> <declaracao>
            int          guarda  = index; // armazena o index
            Declaracao_r decls_r = new Declaracao_r();

            decls_r.d1 = new Declaracao();

            if (declaracao(ref decls_r.d1))
            {
                if (declaracao_r(ref decls_r.d2))
                {
                    decls = decls_r;
                    return(true);
                }
            }

            //executa <declaracoes> := <declaracao>
            index = guarda;
            Declaracao decl = new Declaracao();

            if (declaracao(ref decl))
            {
                decls = decl;
                return(true);
            }

            return(false);
        }