From 3e7b175738657178f3cdfc5235abafcf0aaf7b60 Mon Sep 17 00:00:00 2001 From: Leonel Sanches da Silva <53848829+leonelsanchesdasilva@users.noreply.github.com> Date: Sat, 14 Jun 2025 11:35:47 -0700 Subject: [PATCH] =?UTF-8?q?Corre=C3=A7=C3=B5es=20no=20formatador=20para=20?= =?UTF-8?q?`var`,=20conforme=20reportado=20por=20Discord.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fontes/formatador/formatador.ts | 12 +++- package.json | 2 +- testes/formatador-visualg.test.ts | 91 ++++++++++++++++++------------- yarn.lock | 8 +-- 4 files changed, 70 insertions(+), 43 deletions(-) diff --git a/fontes/formatador/formatador.ts b/fontes/formatador/formatador.ts index a1f6ca8..3e02146 100644 --- a/fontes/formatador/formatador.ts +++ b/fontes/formatador/formatador.ts @@ -73,6 +73,7 @@ export class FormatadorVisuAlg implements VisitanteVisuAlgInterface { tamanhoIndentacao: number; codigoFormatado: string; deveEscreverRetorno: boolean; + deveEscreverVar: boolean; devePularLinha: boolean; deveIndentar: boolean; retornoFuncaoAtual: string; @@ -85,6 +86,7 @@ export class FormatadorVisuAlg implements VisitanteVisuAlgInterface { this.indentacaoAtual = 0; this.codigoFormatado = ''; this.deveEscreverRetorno = false; + this.deveEscreverVar = true; this.devePularLinha = false; this.deveIndentar = true; this.retornoFuncaoAtual = undefined; @@ -200,6 +202,7 @@ export class FormatadorVisuAlg implements VisitanteVisuAlgInterface { this.codigoFormatado += `${declaracao.simbolo.lexema}`; } + this.deveEscreverVar = true; this.deveEscreverRetorno = true; this.visitarExpressaoFuncaoConstruto(declaracao.funcao); this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}fimfuncao${this.quebraLinha}`; @@ -330,6 +333,7 @@ export class FormatadorVisuAlg implements VisitanteVisuAlgInterface { this.codigoFormatado += `${declaracao.simbolo.lexema}`; } + this.deveEscreverVar = true; this.visitarExpressaoFuncaoConstruto(declaracao.funcao); this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}fimprocedimento${this.quebraLinha}`; } @@ -358,7 +362,12 @@ export class FormatadorVisuAlg implements VisitanteVisuAlgInterface { } visitarDeclaracaoVar(declaracao: Var): any { - this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}${declaracao.simbolo.lexema}`; + if (this.deveEscreverVar) { + this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}var${this.quebraLinha}`; + this.deveEscreverVar = false; + } + + this.codigoFormatado += `${' '.repeat(this.indentacaoAtual + 4)}${declaracao.simbolo.lexema}`; this.codigoFormatado += `: ${declaracao.tipo.toLowerCase()}`; if (this.devePularLinha) { @@ -833,6 +842,7 @@ export class FormatadorVisuAlg implements VisitanteVisuAlgInterface { this.codigoFormatado = ''; this.devePularLinha = true; this.deveIndentar = true; + this.deveEscreverVar = true; for (let declaracao of declaracoes) { this.formatarDeclaracaoOuConstruto(declaracao); diff --git a/package.json b/package.json index e589eae..5394707 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "deixar-codigo-bonito": "yarn prettier --config .prettierrc --write fontes/**/*.ts" }, "dependencies": { - "@designliquido/delegua": "^0.41.8", + "@designliquido/delegua": "^0.42.0", "lodash": "^4.17.21" }, "devDependencies": { diff --git a/testes/formatador-visualg.test.ts b/testes/formatador-visualg.test.ts index 5827c58..7d92144 100644 --- a/testes/formatador-visualg.test.ts +++ b/testes/formatador-visualg.test.ts @@ -22,8 +22,50 @@ describe('Formatador', () => { const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes); const linhasResultado = resultado.split(sistemaOperacional.EOL) - expect(linhasResultado).toHaveLength(5) - }) + expect(linhasResultado).toHaveLength(5); + }); + + it('Variáveis', () => { + const retornoLexador = lexador.mapear([ + 'algoritmo "teste"', + 'var', + 'numero: inteiro', + 'inicio', + ' escreval("Aline")', + 'fimalgoritmo' + ], -1); + + const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1); + + const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes); + const linhasResultado = resultado.split(sistemaOperacional.EOL); + + expect(linhasResultado).toHaveLength(7); + }); + + it('Aleatorio - Números', () => { + const retornoLexador = lexador.mapear( + [ + 'algoritmo "Exemplo Xou"', + 'var', + 'numero: inteiro', + 'inicio', + 'aleatorio 1, 6', + 'leia(numero)', + 'fimalgoritmo', + ], + -1 + ); + + const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1); + + const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes) + const linhasResultado = resultado.split(sistemaOperacional.EOL) + + expect(linhasResultado).toHaveLength(8); + expect(retornoAvaliadorSintatico).toBeTruthy(); + expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(4); + }); it('Lendo variaveis', () => { const retornoLexador = lexador.mapear([ @@ -45,7 +87,7 @@ describe('Formatador', () => { const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes); const linhasResultado = resultado.split(sistemaOperacional.EOL) - expect(linhasResultado).toHaveLength(11) + expect(linhasResultado).toHaveLength(12); }) it('Atribuição', () => { @@ -68,7 +110,7 @@ describe('Formatador', () => { const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes); const linhasResultado = resultado.split(sistemaOperacional.EOL) - expect(linhasResultado).toHaveLength(10) + expect(linhasResultado).toHaveLength(11); }) it('Enquanto', () => { @@ -91,7 +133,7 @@ describe('Formatador', () => { const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes); const linhasResultado = resultado.split(sistemaOperacional.EOL) - expect(linhasResultado).toHaveLength(10) + expect(linhasResultado).toHaveLength(11); }) it('Escolha', () => { @@ -118,7 +160,7 @@ describe('Formatador', () => { const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes); const linhasResultado = resultado.split(sistemaOperacional.EOL) - expect(linhasResultado).toHaveLength(15) + expect(linhasResultado).toHaveLength(16); }); it('Função', () => { @@ -149,7 +191,7 @@ describe('Formatador', () => { const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes); const linhasResultado = resultado.split(sistemaOperacional.EOL); - expect(linhasResultado).toHaveLength(19); + expect(linhasResultado).toHaveLength(21); expect(retornoAvaliadorSintatico.erros).toHaveLength(0); }); @@ -175,7 +217,7 @@ describe('Formatador', () => { const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes) const linhasResultado = resultado.split(sistemaOperacional.EOL) - expect(linhasResultado).toHaveLength(12) + expect(linhasResultado).toHaveLength(13); expect(retornoAvaliadorSintatico).toBeTruthy(); expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(5); }); @@ -198,7 +240,7 @@ describe('Formatador', () => { const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes) const linhasResultado = resultado.split(sistemaOperacional.EOL) - expect(linhasResultado).toHaveLength(11) + expect(linhasResultado).toHaveLength(12); expect(retornoAvaliadorSintatico).toBeTruthy(); expect(retornoAvaliadorSintatico.declaracoes.length).toBeGreaterThan(0); @@ -221,7 +263,7 @@ describe('Formatador', () => { const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes) const linhasResultado = resultado.split(sistemaOperacional.EOL) - expect(linhasResultado).toHaveLength(8) + expect(linhasResultado).toHaveLength(9); expect(retornoAvaliadorSintatico).toBeTruthy(); expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(4); }); @@ -253,7 +295,7 @@ describe('Formatador', () => { const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes); const linhasResultado = resultado.split(sistemaOperacional.EOL); - expect(linhasResultado).toHaveLength(16); + expect(linhasResultado).toHaveLength(17); expect(retornoAvaliadorSintatico).toBeTruthy(); expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(8); expect(retornoAvaliadorSintatico.erros).toHaveLength(0); @@ -280,7 +322,7 @@ describe('Formatador', () => { expect(retornoAvaliadorSintatico).toBeTruthy(); expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(5); - expect(linhasResultado).toHaveLength(9); + expect(linhasResultado).toHaveLength(10); }); it('XOU', () => { @@ -317,29 +359,4 @@ describe('Formatador', () => { expect(retornoAvaliadorSintatico).toBeTruthy(); expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(24); }); - - it('Sucesso - Aleatorio - Números', () => { - const retornoLexador = lexador.mapear( - [ - 'algoritmo "Exemplo Xou"', - 'var', - 'numero: inteiro', - 'inicio', - 'aleatorio 1, 6', - 'leia(numero)', - 'fimalgoritmo', - ], - -1 - ); - - const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1); - - - const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes) - const linhasResultado = resultado.split(sistemaOperacional.EOL) - - expect(linhasResultado).toHaveLength(7); - expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(4); - }); }); \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 173ec5f..94ea376 100644 --- a/yarn.lock +++ b/yarn.lock @@ -277,10 +277,10 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@designliquido/delegua@^0.41.8": - version "0.41.8" - resolved "https://registry.yarnpkg.com/@designliquido/delegua/-/delegua-0.41.8.tgz#d05473b2efcfab3fc03b0c92ad191e073258f0cc" - integrity sha512-MU/K/M99w99JjbUHMkvum4F14Nss7gEs1hUSVN3/bJDZizwPWQ+ROqQrjutsLl4/Q1L0jJDGN4T8sEEV4Y5yKQ== +"@designliquido/delegua@^0.42.0": + version "0.42.0" + resolved "https://registry.yarnpkg.com/@designliquido/delegua/-/delegua-0.42.0.tgz#54e8f651d87ef42a9faf97751c9e15142d896a20" + integrity sha512-ubPiw/AzZ+1hP8q9AkxGmRGEXATyFUDrU4n9LKfoImYT33BU2N838ZMiKsqAbrxqZUeQ/9V/l1sS+KpzuTH66Q== dependencies: antlr4ts "^0.5.0-alpha.4" browser-process-hrtime "^1.0.0"