Repository: DesignLiquido/delegua
Pull request #497 (2023-09-15 17:38:12)

Definindo acentuações para Faça, Então e Senão


Patch:
diff --git a/fontes/avaliador-sintatico/dialetos/visualg/avaliador-sintatico-visualg.ts b/fontes/avaliador-sintatico/dialetos/visualg/avaliador-sintatico-visualg.ts
index 1575f6d2..71dd55ac 100644
--- a/fontes/avaliador-sintatico/dialetos/visualg/avaliador-sintatico-visualg.ts
+++ b/fontes/avaliador-sintatico/dialetos/visualg/avaliador-sintatico-visualg.ts
@@ -447,10 +447,12 @@ export class AvaliadorSintaticoVisuAlg extends AvaliadorSintaticoBase {
 
         const condicao = this.expressao();
 
-        this.consumir(
-            tiposDeSimbolos.FACA,
-            "Esperado paravra reservada 'faca' após condição de continuidade em declaracão 'enquanto'."
-        );
+        if(!this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.FACA, tiposDeSimbolos.FAÇA)){
+            this.consumir(
+                tiposDeSimbolos.FACA,
+                "Esperado paravra reservada 'faca' ou 'faça' após condição de continuidade em declaracão 'enquanto'."
+            );
+        }
 
         this.consumir(
             tiposDeSimbolos.QUEBRA_LINHA,
@@ -922,7 +924,10 @@ export class AvaliadorSintaticoVisuAlg extends AvaliadorSintaticoBase {
 
         const condicao = this.expressao();
 
-        this.consumir(tiposDeSimbolos.ENTAO, "Esperado palavra reservada 'entao' após condição em declaração 'se'.");
+        if(!this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.ENTAO, tiposDeSimbolos.ENTÃO)){
+            this.consumir(this.simbolos[this.atual].tipo,
+            `Esperado palavra reservada 'entao' ou 'então' após condição em declaração 'se'.`);
+        }
         this.consumir(
             tiposDeSimbolos.QUEBRA_LINHA,
             "Esperado quebra de linha após palavra reservada 'entao' em declaração 'se'."
@@ -931,10 +936,10 @@ export class AvaliadorSintaticoVisuAlg extends AvaliadorSintaticoBase {
         const declaracoes = [];
         do {
             declaracoes.push(this.resolverDeclaracaoForaDeBloco());
-        } while (![tiposDeSimbolos.SENAO, tiposDeSimbolos.FIM_SE].includes(this.simbolos[this.atual].tipo));
+        } while (![tiposDeSimbolos.SENAO, tiposDeSimbolos.SENÃO, tiposDeSimbolos.FIM_SE].includes(this.simbolos[this.atual].tipo));
 
         let caminhoSenao = null;
-        if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.SENAO)) {
+        if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.SENAO, tiposDeSimbolos.SENÃO)) {
             const simboloSenao = this.simbolos[this.atual - 1];
             const declaracoesSenao = [];
 
diff --git a/fontes/lexador/dialetos/palavras-reservadas/visualg.ts b/fontes/lexador/dialetos/palavras-reservadas/visualg.ts
index aeb95e0b..b8397fe3 100644
--- a/fontes/lexador/dialetos/palavras-reservadas/visualg.ts
+++ b/fontes/lexador/dialetos/palavras-reservadas/visualg.ts
@@ -16,11 +16,13 @@ export const palavrasReservadas = {
     e: tiposDeSimbolos.E,
     enquanto: tiposDeSimbolos.ENQUANTO,
     entao: tiposDeSimbolos.ENTAO,
+    então: tiposDeSimbolos.ENTÃO,
     escolha: tiposDeSimbolos.ESCOLHA,
     escreva: tiposDeSimbolos.ESCREVA,
     escreval: tiposDeSimbolos.ESCREVA_LINHA,
     exp: tiposDeSimbolos.METODO_BIBLIOTECA_GLOBAL,
     faca: tiposDeSimbolos.FACA,
+    faça: tiposDeSimbolos.FAÇA,
     falso: tiposDeSimbolos.FALSO,
     fimalgoritmo: tiposDeSimbolos.FIM_ALGORITMO,
     fimenquanto: tiposDeSimbolos.FIM_ENQUANTO,
@@ -58,6 +60,7 @@ export const palavrasReservadas = {
     se: tiposDeSimbolos.SE,
     sen: tiposDeSimbolos.METODO_BIBLIOTECA_GLOBAL,
     senao: tiposDeSimbolos.SENAO,
+    senão: tiposDeSimbolos.SENÃO,
     tan: tiposDeSimbolos.METODO_BIBLIOTECA_GLOBAL,
     var: tiposDeSimbolos.VAR,
     verdadeiro: tiposDeSimbolos.VERDADEIRO,
diff --git a/fontes/tipos-de-simbolos/visualg.ts b/fontes/tipos-de-simbolos/visualg.ts
index cd5942a8..77ac8f3d 100644
--- a/fontes/tipos-de-simbolos/visualg.ts
+++ b/fontes/tipos-de-simbolos/visualg.ts
@@ -15,11 +15,13 @@ export default {
     E: 'E',
     ENQUANTO: 'ENQUANTO',
     ENTAO: 'ENTAO',
+    ENTÃO: 'ENTÃO',
     ESCOLHA: 'ESCOLHA',
     ESCREVA: 'ESCREVA',
     ESCREVA_LINHA: 'ESCREVA_LINHA',
     EXPONENCIACAO: 'EXPONENCIACAO',
     FACA: 'FACA',
+    FAÇA: 'FAÇA',
     FALSO: 'FALSO',
     FIM_ALGORITMO: 'FIM_ALGORITMO',
     FIM_ENQUANTO: 'FIM_ENQUANTO',
@@ -59,6 +61,7 @@ export default {
     RETORNE: 'RETORNE',
     SE: 'SE',
     SENAO: 'SENAO',
+    SENÃO: 'SENÃO',
     SETA_ATRIBUICAO: 'SETA_ATRIBUICAO',
     SUBTRACAO: 'SUBTRACAO',
     QUEBRA_LINHA: 'QUEBRA_LINHA',


Test patch:
diff --git a/testes/visualg/interpretador.test.ts b/testes/visualg/interpretador.test.ts
index 4813e1a0..84eddc26 100644
--- a/testes/visualg/interpretador.test.ts
+++ b/testes/visualg/interpretador.test.ts
@@ -139,9 +139,9 @@ describe('Interpretador', () => {
                     '   Leia(A)',
                     '   IMC <- M / (A ^ 2)',
                     '   Escreval("IMC: ", IMC:5:2)',
-                    '   Se (IMC >= 18.5) e (IMC < 25) entao',
+                    '   Se (IMC >= 18.5) e (IMC < 25) então',
                     '      Escreva("Parabens! Voce esta no seu peso ideal")',
-                    '   senao',
+                    '   senão',
                     '      Escreva("Voce nao esta na faixa de peso ideal")',
                     '   Fimse',
                     '',