private List<NoDeclaracaoInicializavel> getVariaveisGlobaisDeclaradas(
     ASAPrograma asa, boolean excluiConstantes) {
   List<NoDeclaracao> declaracoesGlobais = asa.getListaDeclaracoesGlobais();
   List<NoDeclaracaoInicializavel> variaveisGlobais = new ArrayList<>();
   for (NoDeclaracao global : declaracoesGlobais) {
     if (global instanceof NoDeclaracaoInicializavel) {
       NoDeclaracaoInicializavel variavel = (NoDeclaracaoInicializavel) global;
       if (!(excluiConstantes && variavel.constante())) {
         variaveisGlobais.add(variavel);
       }
     }
   }
   return variaveisGlobais;
 }
    private void inicializaVariaveisGlobaisNaoPassadasPorReferencia(
        List<NoDeclaracaoInicializavel> variaveisGlobais) throws ExcecaoVisitaASA {
      for (NoDeclaracaoInicializavel variavel : variaveisGlobais) {
        if (variavel instanceof NoDeclaracaoVariavel) {
          if (((NoDeclaracaoVariavel) variavel).ehPassadaPorReferencia()) {
            continue; // variáveis globais que são passadas como referência não são declaradas como
            // atributo no código Java
          }
        }

        boolean ehVetor = variavel instanceof NoDeclaracaoVetor;
        boolean ehMatriz = variavel instanceof NoDeclaracaoMatriz;
        boolean variavelInicializada = variavel.temInicializacao();

        if (ehVetor || ehMatriz || variavelInicializada) {
          saida.append(Utils.geraIdentacao(nivelEscopo + 1));
          saida.format("%s = ", variavel.getNome());
          if (variavelInicializada) {
            variavel.getInicializacao().aceitar(this);
          } else // vetores e matrizes não inicializados precisam ser instanciados
          {
            if (ehVetor) {
              NoExpressao tamanho = ((NoDeclaracaoVetor) variavel).getTamanho();
              if (tamanho != null) {
                String nomeTipo = Utils.getNomeTipoJava(variavel.getTipoDado());
                saida.format("new %s[", nomeTipo);
                tamanho.aceitar(this);
                saida.append("]");
              }
            } else // é uma matriz
            {
              NoExpressao linhas = ((NoDeclaracaoMatriz) variavel).getNumeroLinhas();
              NoExpressao colunas = ((NoDeclaracaoMatriz) variavel).getNumeroColunas();
              if (linhas != null && colunas != null) {
                String nomeTipo = Utils.getNomeTipoJava(variavel.getTipoDado());
                saida.format("new %s[", nomeTipo);
                linhas.aceitar(this);
                saida.append("][");
                colunas.aceitar(this);
                saida.append("]");
              }
            }
          }
          saida.append(";").println();
        }
      }
    }