From 980169a1c2404ddc4afdb720d9177d3703f96ec8 Mon Sep 17 00:00:00 2001 From: Samuel Vaz Date: Wed, 21 Feb 2024 17:31:53 -0300 Subject: [PATCH 1/3] =?UTF-8?q?Pequenos=20ajustes=20de=20ordena=C3=A7?= =?UTF-8?q?=C3=A3o=20e=20refatora=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../avaliador-sintatico/avaliador-sintatico.ts | 2 +- fontes/interpretador/interpretador-base.ts | 5 +++-- testes/analisador-semantico.test.ts | 15 --------------- testes/avaliador-sintatico.test.ts | 17 +++++++++++++++++ 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/fontes/avaliador-sintatico/avaliador-sintatico.ts b/fontes/avaliador-sintatico/avaliador-sintatico.ts index 9c194d4e..a4838b98 100644 --- a/fontes/avaliador-sintatico/avaliador-sintatico.ts +++ b/fontes/avaliador-sintatico/avaliador-sintatico.ts @@ -808,6 +808,7 @@ export class AvaliadorSintatico implements AvaliadorSintaticoInterface Number(valorDireito); } @@ -541,7 +542,7 @@ export class InterpretadorBase implements InterpretadorInterface { return Number(valorEsquerdo) >= Number(valorDireito); case tiposDeSimbolos.MENOR: - if ((tipoEsquerdo === tipoDeDadosDelegua.NUMERO) || (tipoEsquerdo === tipoDeDadosDelegua.NÚMERO) && (tipoDireito === tipoDeDadosDelegua.NUMERO) || (tipoDireito === tipoDeDadosDelegua.NÚMERO)) { + if (this.tiposNumericos.includes(tipoEsquerdo) && this.tiposNumericos.includes(tipoDireito)) { return Number(valorEsquerdo) < Number(valorDireito); } diff --git a/testes/analisador-semantico.test.ts b/testes/analisador-semantico.test.ts index bd885109..ece496ed 100644 --- a/testes/analisador-semantico.test.ts +++ b/testes/analisador-semantico.test.ts @@ -175,21 +175,6 @@ describe('Analisador semântico', () => { expect(retornoAnalisadorSemantico.diagnosticos[0].mensagem).toBe('A função não pode ter nenhum tipo de retorno.'); }); - it('Função retorna Dicionario literal', async () => { - const retornoLexador = lexador.mapear( - [ - 'funcao executar() {', - ' retorna { "chave": 100 }', - '}', - 'escreva(executar())', - ], - -1 - ); - const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico.erros.length).toBeGreaterThanOrEqual(0); - }); - it('Não retornando o tipo que a função definiu - texto', () => { const retornoLexador = lexador.mapear([ "funcao executar(valor1, valor2): texto {", diff --git a/testes/avaliador-sintatico.test.ts b/testes/avaliador-sintatico.test.ts index 72a1a4a0..4af60123 100644 --- a/testes/avaliador-sintatico.test.ts +++ b/testes/avaliador-sintatico.test.ts @@ -239,6 +239,23 @@ describe('Avaliador sintático', () => { }) }); + describe('Funções', () => { + it('Função retorna Dicionario literal', async () => { + const retornoLexador = lexador.mapear( + [ + 'funcao executar() {', + ' retorna { "chave": 100 }', + '}', + 'escreva(executar())', + ], + -1 + ); + const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1); + + expect(retornoAvaliadorSintatico.erros.length).toBeGreaterThanOrEqual(0); + }); + }) + describe('Declarações de tuplas', () => { it('Dupla', () => { const retornoLexador = lexador.mapear(['var t = [(1, 2)]'], -1); From 6c98641350c35937afabaa616c52f4fcb584f24a Mon Sep 17 00:00:00 2001 From: Samuel Vaz Date: Wed, 21 Feb 2024 17:38:44 -0300 Subject: [PATCH 2/3] =?UTF-8?q?Testes=20fun=C3=A7=C3=B5es=20sucesso?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- testes/avaliador-sintatico.test.ts | 72 +++++++++++++++--------------- 1 file changed, 35 insertions(+), 37 deletions(-) diff --git a/testes/avaliador-sintatico.test.ts b/testes/avaliador-sintatico.test.ts index 4af60123..a914bad8 100644 --- a/testes/avaliador-sintatico.test.ts +++ b/testes/avaliador-sintatico.test.ts @@ -254,6 +254,41 @@ describe('Avaliador sintático', () => { expect(retornoAvaliadorSintatico.erros.length).toBeGreaterThanOrEqual(0); }); + + it('Função retorna vazio mas tem retorno de valores', async () => { + const retornoLexador = lexador.mapear( + [ + 'funcao executar(valor1, valor2): vazio {', + ' var resultado = valor1 + valor2', + ' retorna resultado', + '}', + ], + -1 + ); + const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1); + + expect(retornoAvaliadorSintatico.erros.length).toBeGreaterThanOrEqual(0); + }); + + it('Retorno texto sem retorno dentro da função', async () => { + const retornoLexador = lexador.mapear( + ['funcao executar(valor1, valor2): texto {', ' var resultado = valor1 + valor2', '}'], + -1 + ); + const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1); + + expect(retornoAvaliadorSintatico.erros.length).toBeGreaterThanOrEqual(0); + }); + + it('Função com retorno de vetor', () => { + const retornoLexador = lexador.mapear( + ['funcao executar(): texto[] {', ' retorna ["1", "2"]', '}'], + -1 + ); + const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1); + + expect(retornoAvaliadorSintatico).toBeTruthy(); + }); }) describe('Declarações de tuplas', () => { @@ -382,43 +417,6 @@ describe('Avaliador sintático', () => { ); }); - describe('Funções Anônimas', () => { - it('Função retorna vazio mas tem retorno de valores', async () => { - const retornoLexador = lexador.mapear( - [ - 'funcao executar(valor1, valor2): vazio {', - ' var resultado = valor1 + valor2', - ' retorna resultado', - '}', - ], - -1 - ); - const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico.erros.length).toBeGreaterThanOrEqual(0); - }); - - it('Retorno texto sem retorno dentro da função', async () => { - const retornoLexador = lexador.mapear( - ['funcao executar(valor1, valor2): texto {', ' var resultado = valor1 + valor2', '}'], - -1 - ); - const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico.erros.length).toBeGreaterThanOrEqual(0); - }); - - it('Função com retorno de vetor', () => { - const retornoLexador = lexador.mapear( - ['funcao executar(): texto[] {', ' retorna ["1", "2"]', '}'], - -1 - ); - const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico).toBeTruthy(); - }); - }); - it('Declaração `tente`', () => { const retornoLexador = lexador.mapear(['tente { i = i + 1 } pegue (erro) { escreva(erro) }'], -1); const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1); From 3dc5e5f89ebfc8edfda8bc55d081b97a15469699 Mon Sep 17 00:00:00 2001 From: Samuel Vaz Date: Wed, 21 Feb 2024 17:41:16 -0300 Subject: [PATCH 3/3] =?UTF-8?q?Verificando=20erros=20teste=20fun=C3=A7?= =?UTF-8?q?=C3=A3o=20com=20retorno=20de=20vetor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- testes/avaliador-sintatico.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/testes/avaliador-sintatico.test.ts b/testes/avaliador-sintatico.test.ts index a914bad8..a4642730 100644 --- a/testes/avaliador-sintatico.test.ts +++ b/testes/avaliador-sintatico.test.ts @@ -288,6 +288,7 @@ describe('Avaliador sintático', () => { const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1); expect(retornoAvaliadorSintatico).toBeTruthy(); + expect(retornoAvaliadorSintatico.erros.length).toBeGreaterThanOrEqual(0); }); })