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(); } } }