ESPECIFICAÇÕES DE AÇÕES SEMÂNTICAS ALTERADAS E VALIDAÇÕES DE TIPOS EM TEMPO DE EXECUÇÃO.
Por: adr_js • 28/2/2016 • Trabalho acadêmico • 1.201 Palavras (5 Páginas) • 312 Visualizações
Trabalho final Compiladores
Especificações de ações semânticas alteradas e validações de tipos em tempo de execução.
Reconhecimento de operação aritmética divisão inteira
static void Acao43(){
gerarInstrucao(ponteiro, "ADI", 0);
ponteiro++;
}
case "ADI":
if(Integer.parseInt(pilha[topo].toString()) == 0){
System.out.println("ERRO: Divisão por 0");
ponteiro = -1;
break;
}
pilha[topo - 1] = (Integer)pilha[topo - 1] / (Integer)pilha[topo];
topo--;
ponteiro++;
break;
Reconhecimento de operação aritmética resto da divisão inteira
static void Acao44(){
gerarInstrucao(ponteiro, "RDI", 0);
ponteiro++;
}
case "RDI":
if(Double.parseDouble(pilha[topo].toString()) == 0){
System.out.println("ERRO: Divisão por 0");
ponteiro = -1;
break;
}
if(pilha[topo - 1] instanceof Double && pilha[topo] instanceof Double )
pilha[topo - 1] = (Double)pilha[topo - 1] % (Double)pilha[topo];
if(pilha[topo - 1] instanceof Integer && pilha[topo] instanceof Integer )
pilha[topo - 1] = (Integer)pilha[topo - 1] % (Integer)pilha[topo];
topo--;
ponteiro++;
break;
Reconhecimento de operação aritmética potenciação
static void Acao46(){
gerarInstrucao(ponteiro, "RAP", 0);
ponteiro++;
}
case "RAP":
pilha[topo - 1] = Math.pow(Double.parseDouble(pilha[topo-1].toString()), Double.parseDouble(pilha[topo].toString()));
topo--;
ponteiro++;
break;
Validação tipos estáticos em tempo de execuçãa:
Métodos alterados:
ADD:
Se o topo e subtopo forem Double então
Subtopo recebe soma de subtopo e topo.
Senão Se o topo e subtopo forem Integer então
Subtopo recebe soma de subtopo e topo.
Senao
Erro de imcompatibilidade.
Diminui o topo
Aumenta o ponteiro
SUB:
Se o topo e subtopo forem Double então
Subtopo recebe a subtração de subtopo e topo.
Senão Se o topo e subtopo forem Integer então
Subtopo recebe a subtração de subtopo e topo.
Senao
Erro de imcompatibilidade.
Diminui o topo
Aumenta o ponteiro
BGE:
Se o topo e subtopo forem Double então
Subtopo recebe condição se subtopo é maior ou igual que topo.
Senão Se o topo e subtopo forem Integer então
Subtopo recebe condição se subtopo é maior ou igual que topo.
...