Repository: DesignLiquido/delegua
Pull request #242 (2023-01-14 20:23:17)

Traduzindo operador lógico


Patch:
diff --git a/fontes/tradutores/tradutor-javascript.ts b/fontes/tradutores/tradutor-javascript.ts
index 432f8e76..f9175007 100644
--- a/fontes/tradutores/tradutor-javascript.ts
+++ b/fontes/tradutores/tradutor-javascript.ts
@@ -8,6 +8,7 @@ import {
     FuncaoConstruto,
     Isto,
     Literal,
+    Logico,
     Variavel,
 } from '../construtos';
 import {
@@ -49,6 +50,8 @@ export class TradutorJavaScript implements TradutorInterface {
                 return '!==';
             case tiposDeSimbolos.DIVISAO:
                 return '/';
+            case tiposDeSimbolos.E:
+                return '&&';
             case tiposDeSimbolos.EXPONENCIACAO:
                 return '**';
             case tiposDeSimbolos.IGUAL:
@@ -67,6 +70,8 @@ export class TradutorJavaScript implements TradutorInterface {
                 return '%';
             case tiposDeSimbolos.MULTIPLICACAO:
                 return '*';
+            case tiposDeSimbolos.OU:
+                return '||';
             case tiposDeSimbolos.SUBTRACAO:
                 return '-';
         }
@@ -447,6 +452,14 @@ export class TradutorJavaScript implements TradutorInterface {
         return resultado;
     }
 
+    traduzirConstrutoLogico(logico: Logico){
+        let direita = this.dicionarioConstrutos[logico.direita.constructor.name](logico.direita)
+        let operador = this.traduzirSimboloOperador(logico.operador)
+        let esquerda = this.dicionarioConstrutos[logico.esquerda.constructor.name](logico.esquerda)
+
+        return `${direita} ${operador} ${esquerda}`;
+    }
+
     dicionarioConstrutos = {
         AcessoMetodo: this.trazudirConstrutoAcessoMetodo.bind(this),
         Agrupamento: this.traduzirConstrutoAgrupamento.bind(this),
@@ -457,6 +470,7 @@ export class TradutorJavaScript implements TradutorInterface {
         FuncaoConstruto: this.traduzirFuncaoConstruto.bind(this),
         Isto: () => 'this',
         Literal: this.traduzirConstrutoLiteral.bind(this),
+        Logico: this.traduzirConstrutoLogico.bind(this),
         Variavel: this.traduzirConstrutoVariavel.bind(this),
     };
 


Test patch:
diff --git a/testes/tradutores/tradutor-javascript.test.ts b/testes/tradutores/tradutor-javascript.test.ts
index ab0c5d02..d66186a8 100644
--- a/testes/tradutores/tradutor-javascript.test.ts
+++ b/testes/tradutores/tradutor-javascript.test.ts
@@ -617,5 +617,16 @@ describe('Tradutor Delégua -> JavaScript', () => {
             expect(resultado).toMatch(/a === 1/i);
             expect(resultado).toMatch(/console\.log\(10\)/i);
         });
+
+        it('se -> if com operadores lógicos, código', () => {
+            const retornoLexador = delegua.lexador.mapear(['se (a == 1 ou a == 2) {', '    escreva(10)', '}'], -1);
+            const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador);
+
+            const resultado = tradutor.traduzir(retornoAvaliadorSintatico.declaracoes);
+            expect(resultado).toBeTruthy();
+            expect(resultado).toMatch(/if/i);
+            expect(resultado).toMatch(/a === 1 || a === 2/i);
+            expect(resultado).toMatch(/console\.log\(10\)/i);
+        });
     });
 });