Skip to content
This repository has been archived by the owner on Mar 12, 2018. It is now read-only.

Commit

Permalink
Resolvendo Problema #102 e #105 com Gerador de Código JAVA (#107)
Browse files Browse the repository at this point in the history
* resolvendo problema com \\ dos escapes

* Definindo tipo de dados para matriz quando valor é variável

* resolvendo problema de tipos no vetor
  • Loading branch information
AlissonSteffens committed Jun 6, 2017
1 parent 6955907 commit d2e1e1d
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 1 deletion.
8 changes: 7 additions & 1 deletion src/br/univali/portugol/nucleo/Compilador.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
import java.net.URL;
import java.net.URLClassLoader;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
Expand Down Expand Up @@ -138,7 +140,11 @@ private Programa geraPrograma(ASAPrograma asa, ResultadoAnalise resultadoAnalise
GeradorCodigoJava.Opcoes opcoes = new GeradorCodigoJava.Opcoes(true, true, true);
gerador.gera(asa, writerArquivoJava, nomeClasse, opcoes);
writerArquivoJava.flush();


byte[] encoded = Files.readAllBytes(Paths.get(arquivoJava.getAbsolutePath()));

System.out.println(new String(encoded, "UTF-8"));

return compilarJava(nomeClasse, arquivoJava, DIRETORIO_COMPILACAO, resultadoAnalise, classPath, caminhoJavac);
}
catch (final IOException | ExcecaoVisitaASA ex)
Expand Down
5 changes: 5 additions & 0 deletions src/br/univali/portugol/nucleo/asa/NoMatriz.java
Original file line number Diff line number Diff line change
Expand Up @@ -86,15 +86,20 @@ public Object aceitar(VisitanteASA visitante) throws ExcecaoVisitaASA
@Override
public TipoDado getTipoResultante()
{

if (!valores.isEmpty() && !valores.get(0).isEmpty())
{
Object valor = valores.get(0).get(0);
if (valor instanceof NoExpressaoLiteral)
{
return ((NoExpressaoLiteral)valor).getTipoResultante();
}
else if(valor instanceof NoReferencia){
return ((NoReferencia)valor).getOrigemDaReferencia().getTipoDado();
}

}

return TipoDado.VAZIO;
}
}
3 changes: 3 additions & 0 deletions src/br/univali/portugol/nucleo/asa/NoVetor.java
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,9 @@ public TipoDado getTipoResultante()
{
return ((NoExpressao)valor).getTipoResultante();
}
else if(valor instanceof NoReferencia){
return ((NoReferencia)valor).getOrigemDaReferencia().getTipoDado();
}
}
return TipoDado.VAZIO;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,10 +160,12 @@ private void inicializaVariaveisGlobaisNaoPassadasPorReferencia(List<NoDeclaraca

if (ehVetor || ehMatriz || variavelInicializada)
{

saida.append(Utils.geraIdentacao(nivelEscopo + 1));
saida.format("%s = ", variavel.getNome());
if (variavelInicializada)
{
//System.out.println("var - "+variavel.getNome()+" é inicializada com "+variavel.getTipoDado()+" inicialização: "+variavel.getInicializacao().toString());
variavel.getInicializacao().aceitar(this);
}
else //vetores e matrizes não inicializados precisam ser instanciados
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -402,6 +402,7 @@ public static String geraIdentacao(int nivelEscopo)
public static String preservaCaracteresEspeciais(String string)
{
return string
.replaceAll("\\\\", "\\\\\\\\") // preserva \n nas string do código Portugol
.replaceAll("\n", "\\\\n") // preserva \n nas string do código Portugol
.replaceAll("\"", "\\\\\""); // preserva aspas duplas com scape (\") nas string do código Portugol
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,15 @@ public void testStringComQuebraDeLinha()
assertEquals(expResult, result);
}

@Test
public void testStringComEscapedeBarra()
{
String string = "string com escape de barra \\";
String expResult = "string com escape de barra \\\\";
String result = Utils.preservaCaracteresEspeciais(string);
assertEquals(expResult, result);
}

@Test
public void testStringLimpa()
{
Expand Down

0 comments on commit d2e1e1d

Please sign in to comment.