Repository: DesignLiquido/delegua
Pull request #755 (2025-06-03 14:40:05)

Incluindo método imprima
Inclusão do método "imprima" para o dialeto Pituguês:
- Testes unitários do Analisador Sintático obtiveram sucesso
- Testes unitário do Interpretador não foram aprovados


Patch:
diff --git a/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.ts b/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.ts
index e8327610..071a94da 100644
--- a/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.ts
+++ b/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.ts
@@ -921,6 +921,7 @@ export class AvaliadorSintaticoPitugues implements AvaliadorSintaticoInterface<S
             case tiposDeSimbolos.ESCOLHA:
                 this.avancarEDevolverAnterior();
                 return this.declaracaoEscolha();
+            case tiposDeSimbolos.IMPRIMA:
             case tiposDeSimbolos.ESCREVA:
                 this.avancarEDevolverAnterior();
                 return this.declaracaoEscreva();
diff --git a/fontes/lexador/dialetos/lexador-pitugues.ts b/fontes/lexador/dialetos/lexador-pitugues.ts
index e3eb1ca9..62fe9188 100644
--- a/fontes/lexador/dialetos/lexador-pitugues.ts
+++ b/fontes/lexador/dialetos/lexador-pitugues.ts
@@ -1,13 +1,14 @@
 import hrtime from 'browser-process-hrtime';
 
 import { LexadorInterface, SimboloInterface } from '../../interfaces';
-import tiposDeSimbolos from '../../tipos-de-simbolos/pitugues';
 import { Simbolo } from '../simbolo';
-import { palavrasReservadas } from '../palavras-reservadas';
+import { palavrasReservadas } from './palavras-reservadas/pitugues';
 import { ErroLexador } from '../erro-lexador';
 import { RetornoLexador } from '../../interfaces/retornos/retorno-lexador';
 import { Pragma } from './pragma';
 
+import tiposDeSimbolos from '../../tipos-de-simbolos/pitugues';
+
 /**
  * O Lexador é responsável por transformar o código em uma coleção de tokens de linguagem.
  * Cada token de linguagem é representado por um tipo, um lexema e informações da linha de código em que foi expresso.
diff --git a/fontes/lexador/dialetos/palavras-reservadas/pitugues.ts b/fontes/lexador/dialetos/palavras-reservadas/pitugues.ts
new file mode 100644
index 00000000..fc06d42e
--- /dev/null
+++ b/fontes/lexador/dialetos/palavras-reservadas/pitugues.ts
@@ -0,0 +1,58 @@
+import tiposDeSimbolos from '../../../tipos-de-simbolos/pitugues';
+
+export const palavrasReservadas = {
+    cada: tiposDeSimbolos.CADA,
+    caso: tiposDeSimbolos.CASO,
+    classe: tiposDeSimbolos.CLASSE,
+    como: tiposDeSimbolos.COMO,
+    construtor: tiposDeSimbolos.CONSTRUTOR,
+    continua: tiposDeSimbolos.CONTINUA,
+    constante: tiposDeSimbolos.CONSTANTE,
+    const: tiposDeSimbolos.CONSTANTE,
+    de: tiposDeSimbolos.DE,
+    e: tiposDeSimbolos.E,
+    em: tiposDeSimbolos.EM,
+    enquanto: tiposDeSimbolos.ENQUANTO,
+    escolha: tiposDeSimbolos.ESCOLHA,
+    escreva: tiposDeSimbolos.ESCREVA,
+    falhar: tiposDeSimbolos.FALHAR,
+    falso: tiposDeSimbolos.FALSO,
+    fazer: tiposDeSimbolos.FAZER,
+    finalmente: tiposDeSimbolos.FINALMENTE,
+    fixo: tiposDeSimbolos.CONSTANTE,
+    funcao: tiposDeSimbolos.FUNCAO,
+    função: tiposDeSimbolos.FUNÇÃO,
+    herda: tiposDeSimbolos.HERDA,
+    importar: tiposDeSimbolos.IMPORTAR,
+    imprima: tiposDeSimbolos.IMPRIMA,
+    isto: tiposDeSimbolos.ISTO,
+    leia: tiposDeSimbolos.LEIA,
+    nulo: tiposDeSimbolos.NULO,
+    ou: tiposDeSimbolos.OU,
+    padrao: tiposDeSimbolos.PADRAO,
+    para: tiposDeSimbolos.PARA,
+    pausa: tiposDeSimbolos.PAUSA,
+    pegue: tiposDeSimbolos.PEGUE,
+    retorna: tiposDeSimbolos.RETORNA,
+    se: tiposDeSimbolos.SE,
+    senao: tiposDeSimbolos.SENAO,
+    senão: tiposDeSimbolos.SENÃO,
+    super: tiposDeSimbolos.SUPER,
+    sustar: tiposDeSimbolos.SUSTAR,
+    tendo: tiposDeSimbolos.TENDO,
+    tente: tiposDeSimbolos.TENTE,
+    tipo: tiposDeSimbolos.TIPO,
+    var: tiposDeSimbolos.VARIAVEL,
+    variavel: tiposDeSimbolos.VARIAVEL,
+    variável: tiposDeSimbolos.VARIAVEL,
+    verdadeiro: tiposDeSimbolos.VERDADEIRO,
+};
+
+export const palavrasReservadasMicroGramatica = {
+    e: tiposDeSimbolos.E,
+    em: tiposDeSimbolos.EM,
+    falso: tiposDeSimbolos.FALSO,
+    nulo: tiposDeSimbolos.NULO,
+    ou: tiposDeSimbolos.OU,
+    verdadeiro: tiposDeSimbolos.VERDADEIRO,
+};
diff --git a/fontes/tipos-de-simbolos/pitugues.ts b/fontes/tipos-de-simbolos/pitugues.ts
index 54b9aedb..c28ad12c 100644
--- a/fontes/tipos-de-simbolos/pitugues.ts
+++ b/fontes/tipos-de-simbolos/pitugues.ts
@@ -4,15 +4,18 @@ export default {
     BIT_OR: 'BIT_OR',
     BIT_XOR: 'BIT_XOR',
     BIT_NOT: 'BIT_NOT',
+    CADA: 'CADA',
     CASO: 'CASO',
     CHAVE_DIREITA: 'CHAVE_DIREITA',
     CHAVE_ESQUERDA: 'CHAVE_ESQUERDA',
     CLASSE: 'CLASSE',
     COLCHETE_DIREITO: 'COLCHETE_DIREITO',
     COLCHETE_ESQUERDO: 'COLCHETE_ESQUERDO',
+    COMO: 'COMO',
     CONSTANTE: 'CONSTANTE',
     CONSTRUTOR: 'CONSTRUTOR',
     CONTINUA: 'CONTINUA',
+    DE: 'DE',
     DIFERENTE: 'DIFERENTE',
     DIVISAO: 'DIVISAO',
     DIVISAO_INTEIRA: 'DIVISAO_INTEIRA',
@@ -27,6 +30,7 @@ export default {
     FALHAR: 'FALHAR',
     IGUAL: 'IGUAL',
     IGUAL_IGUAL: 'IGUAL_IGUAL',
+    IMPRIMA: 'IMPRIMA',
     FALSO: 'FALSO',
     FAZER: 'FAZER',
     FINALMENTE: 'FINALMENTE',
@@ -66,8 +70,10 @@ export default {
     SENÃO: 'SENÃO',
     SUPER: 'SUPER',
     SUSTAR: 'SUSTAR',
+    TENDO: 'TENDO',
     TENTE: 'TENTE',
     TEXTO: 'TEXTO',
+    TIPO: 'TIPO',
     VARIAVEL: 'VARIAVEL',
     VERDADEIRO: 'VERDADEIRO',
     VIRGULA: 'VIRGULA',


Test patch:
diff --git a/testes/pitugues/avaliador-sintatico.test.ts b/testes/pitugues/avaliador-sintatico.test.ts
index 0e529d56..7100237c 100644
--- a/testes/pitugues/avaliador-sintatico.test.ts
+++ b/testes/pitugues/avaliador-sintatico.test.ts
@@ -31,5 +31,17 @@ describe('Avaliador sintático (Pituguês)', () => {
 
             expect(retornoAvaliadorSintatico.erros.length).toBeGreaterThan(0);
         });
+
+        it('Sucesso - Olá Mundo (Imprima)', () => {
+            const retornoLexador = lexador.mapear(
+                ["imprima('Olá mundo')"],
+                -1
+            );
+            const retornoAvaliadorSintatico =
+                avaliadorSintatico.analisar(retornoLexador, -1);
+
+            expect(retornoAvaliadorSintatico).toBeTruthy();
+            expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(1);
+        });
     });
 });
diff --git a/testes/pitugues/interpretador.test.ts b/testes/pitugues/interpretador.test.ts
index e222583e..0eb83195 100644
--- a/testes/pitugues/interpretador.test.ts
+++ b/testes/pitugues/interpretador.test.ts
@@ -104,6 +104,26 @@ describe('Interpretador (Pituguês)', () => {
                 });
             });
 
+            describe('imprima()', () => {
+                it('Olá Mundo (imprima() e literal)', async () => {
+                    const retornoLexador = lexador.mapear(["imprima('Olá mundo')"], -1);
+                    const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1);
+
+                    const retornoInterpretador = await interpretador.interpretar(retornoAvaliadorSintatico.declaracoes);
+
+                    expect(retornoInterpretador.erros).toHaveLength(0);
+                });
+
+                it('nulo', async () => {
+                    const retornoLexador = lexador.mapear(["imprima(nulo)"], -1);
+                    const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1);
+
+                    const retornoInterpretador = await interpretador.interpretar(retornoAvaliadorSintatico.declaracoes);
+
+                    expect(retornoInterpretador.erros).toHaveLength(0);
+                });
+            });
+
             describe('Operações matemáticas', () => {
                 it('Operações matemáticas - Trivial', async () => {
                     const retornoLexador = lexador.mapear(["escreva(5 + 4 * 3 - 2 ** 1 / 6 % 10)"], -1);