Repository: DesignLiquido/delegua
Pull request #475 (2023-08-15 22:41:45)

Lexadores e Avaliadores Sintáticos agora com tipos genéricos.


Patch:
diff --git a/fontes/avaliador-sintatico/avaliador-sintatico-base.ts b/fontes/avaliador-sintatico/avaliador-sintatico-base.ts
index bd48bc66..005caa9a 100644
--- a/fontes/avaliador-sintatico/avaliador-sintatico-base.ts
+++ b/fontes/avaliador-sintatico/avaliador-sintatico-base.ts
@@ -30,7 +30,7 @@ import tiposDeSimbolos from '../tipos-de-simbolos/comum';
  * entre todos os outros Avaliadores Sintáticos. Depende de um dicionário
  * de tipos de símbolos comuns entre todos os dialetos.
  */
-export abstract class AvaliadorSintaticoBase implements AvaliadorSintaticoInterface {
+export abstract class AvaliadorSintaticoBase implements AvaliadorSintaticoInterface<SimboloInterface, Declaracao> {
     simbolos: SimboloInterface[];
     erros: ErroAvaliadorSintatico[];
 
@@ -346,5 +346,5 @@ export abstract class AvaliadorSintaticoBase implements AvaliadorSintaticoInterf
 
     abstract declaracao(): Declaracao;
 
-    abstract analisar(retornoLexador: RetornoLexador, hashArquivo: number): RetornoAvaliadorSintatico;
+    abstract analisar(retornoLexador: RetornoLexador<SimboloInterface>, hashArquivo: number): RetornoAvaliadorSintatico<Declaracao>;
 }
diff --git a/fontes/avaliador-sintatico/avaliador-sintatico.ts b/fontes/avaliador-sintatico/avaliador-sintatico.ts
index 5ed84595..89308232 100644
--- a/fontes/avaliador-sintatico/avaliador-sintatico.ts
+++ b/fontes/avaliador-sintatico/avaliador-sintatico.ts
@@ -59,7 +59,7 @@ import { TiposDadosInterface } from '../interfaces/tipos-dados-interface';
  * Essas estruturas de alto nível são as partes que executam lógica de programação de fato.
  * Há dois grupos de estruturas de alto nível: Construtos e Declarações.
  */
-export class AvaliadorSintatico implements AvaliadorSintaticoInterface {
+export class AvaliadorSintatico implements AvaliadorSintaticoInterface<SimboloInterface, Declaracao> {
     simbolos: SimboloInterface[];
     erros: ErroAvaliadorSintatico[];
 
@@ -1300,7 +1300,7 @@ export class AvaliadorSintatico implements AvaliadorSintaticoInterface {
         }
     }
 
-    analisar(retornoLexador: RetornoLexador, hashArquivo: number): RetornoAvaliadorSintatico {
+    analisar(retornoLexador: RetornoLexador<SimboloInterface>, hashArquivo: number): RetornoAvaliadorSintatico<Declaracao> {
         const inicioAnalise: [number, number] = hrtime();
         this.erros = [];
         this.atual = 0;
@@ -1327,6 +1327,6 @@ export class AvaliadorSintatico implements AvaliadorSintaticoInterface {
         return {
             declaracoes: declaracoes,
             erros: this.erros,
-        } as RetornoAvaliadorSintatico;
+        } as RetornoAvaliadorSintatico<Declaracao>;
     }
 }
diff --git a/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.ts b/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.ts
index 225db5aa..d5e2f04b 100644
--- a/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.ts
+++ b/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.ts
@@ -933,7 +933,7 @@ export class AvaliadorSintaticoBirl extends AvaliadorSintaticoBase {
         }
     }
 
-    analisar(retornoLexador: RetornoLexador, hashArquivo: number): RetornoAvaliadorSintatico {
+    analisar(retornoLexador: RetornoLexador<SimboloInterface>, hashArquivo: number): RetornoAvaliadorSintatico<Declaracao> {
         this.erros = [];
         this.blocos = 0;
         this.atual = 0;
@@ -944,6 +944,6 @@ export class AvaliadorSintaticoBirl extends AvaliadorSintaticoBase {
         return {
             declaracoes: declaracoes.filter((d) => d),
             erros: this.erros,
-        } as RetornoAvaliadorSintatico;
+        } as RetornoAvaliadorSintatico<Declaracao>;
     }
 }
diff --git a/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.ts b/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.ts
index 9a62b10e..f086d005 100644
--- a/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.ts
+++ b/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.ts
@@ -40,21 +40,22 @@ import {
     Var,
     Leia,
     Const,
+    Declaracao,
 } from '../../declaracoes';
 
 import { RetornoAvaliadorSintatico } from '../../interfaces/retornos/retorno-avaliador-sintatico';
 import { RetornoLexador } from '../../interfaces/retornos/retorno-lexador';
-import { RetornoDeclaracao, RetornoPrimario, RetornoResolverDeclaracao } from '../retornos';
+import { RetornoDeclaracao, RetornoPrimario } from '../retornos';
 
 import tiposDeSimbolos from '../../tipos-de-simbolos/egua-classico';
 
 /**
- * O avaliador sintático (Parser) é responsável por transformar os símbolos do Lexador em estruturas de alto nível.
+ * O avaliador sintático (_Parser_) é responsável por transformar os símbolos do Lexador em estruturas de alto nível.
  * Essas estruturas de alto nível são as partes que executam lógica de programação de fato.
  * 
  * Esta implementação tenta seguir à risca o que está atualmente em https://github.com/eguatech/egua/blob/master/src/parser.js.
  */
-export class AvaliadorSintaticoEguaClassico implements AvaliadorSintaticoInterface {
+export class AvaliadorSintaticoEguaClassico implements AvaliadorSintaticoInterface<SimboloInterface, Declaracao> {
     simbolos: SimboloInterface[];
     erros: ErroAvaliadorSintatico[];
 
@@ -838,7 +839,7 @@ export class AvaliadorSintaticoEguaClassico implements AvaliadorSintaticoInterfa
         }
     }
 
-    analisar(retornoLexador: RetornoLexador, hashArquivo: number): RetornoAvaliadorSintatico {
+    analisar(retornoLexador: RetornoLexador<SimboloInterface>, hashArquivo: number): RetornoAvaliadorSintatico<Declaracao> {
         this.erros = [];
         this.atual = 0;
         this.blocos = 0;
@@ -854,6 +855,6 @@ export class AvaliadorSintaticoEguaClassico implements AvaliadorSintaticoInterfa
         return {
             declaracoes: declaracoes,
             erros: this.erros,
-        } as RetornoAvaliadorSintatico;
+        } as RetornoAvaliadorSintatico<Declaracao>;
     }
 }
diff --git a/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.ts b/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.ts
index ca2cf72d..e916e053 100644
--- a/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.ts
+++ b/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.ts
@@ -158,7 +158,7 @@ export class AvaliadorSintaticoGuarani extends AvaliadorSintaticoBase {
         }
     }
 
-    analisar(retornoLexador: RetornoLexador, hashArquivo: number): RetornoAvaliadorSintatico {
+    analisar(retornoLexador: RetornoLexador<SimboloInterface>, hashArquivo: number): RetornoAvaliadorSintatico<Declaracao> {
         this.erros = [];
         this.atual = 0;
         this.blocos = 0;
@@ -174,6 +174,6 @@ export class AvaliadorSintaticoGuarani extends AvaliadorSintaticoBase {
         return {
             declaracoes: declaracoes,
             erros: this.erros,
-        } as RetornoAvaliadorSintatico;
+        } as RetornoAvaliadorSintatico<Declaracao>;
     }
 }
diff --git a/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-mapler.ts b/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-mapler.ts
index f85dcf9c..54a3dedf 100644
--- a/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-mapler.ts
+++ b/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-mapler.ts
@@ -725,7 +725,7 @@ export class AvaliadorSintaticoMapler extends AvaliadorSintaticoBase {
      * @param retornoLexador Os símbolos entendidos pelo Lexador.
      * @param hashArquivo Obrigatório por interface mas não usado aqui.
      */
-    analisar(retornoLexador: RetornoLexador, hashArquivo: number): RetornoAvaliadorSintatico {
+    analisar(retornoLexador: RetornoLexador<SimboloInterface>, hashArquivo: number): RetornoAvaliadorSintatico<Declaracao> {
         this.erros = [];
         this.atual = 0;
         this.blocos = 0;
@@ -745,6 +745,6 @@ export class AvaliadorSintaticoMapler extends AvaliadorSintaticoBase {
         return {
             declaracoes: declaracoes.filter((d) => d),
             erros: this.erros,
-        } as RetornoAvaliadorSintatico;
+        } as RetornoAvaliadorSintatico<Declaracao>;
     }
 }
diff --git a/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.ts b/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.ts
index af57717a..8bb21e98 100644
--- a/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.ts
+++ b/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.ts
@@ -60,7 +60,7 @@ import { Simbolo } from '../../lexador';
  * A grande diferença entre este avaliador e os demais é a forma como são entendidos os blocos de escopo.
  * Este avaliador espera uma estrutura de pragmas, que explica quantos espaços há na frente de cada linha.
  */
-export class AvaliadorSintaticoPitugues implements AvaliadorSintaticoInterface {
+export class AvaliadorSintaticoPitugues implements AvaliadorSintaticoInterface<SimboloInterface, Declaracao> {
     simbolos: SimboloInterface[];
     erros: ErroAvaliadorSintatico[];
     pragmas: { [linha: number]: Pragma };
@@ -984,7 +984,7 @@ export class AvaliadorSintaticoPitugues implements AvaliadorSintaticoInterface {
         }
     }
 
-    analisar(retornoLexador: RetornoLexador, hashArquivo: number): RetornoAvaliadorSintatico {
+    analisar(retornoLexador: RetornoLexador<SimboloInterface>, hashArquivo: number): RetornoAvaliadorSintatico<Declaracao> {
         const inicioAnalise: [number, number] = hrtime();
         this.erros = [];
         this.atual = 0;
@@ -1013,6 +1013,6 @@ export class AvaliadorSintaticoPitugues implements AvaliadorSintaticoInterface {
         return {
             declaracoes: declaracoes,
             erros: this.erros,
-        } as RetornoAvaliadorSintatico;
+        } as RetornoAvaliadorSintatico<Declaracao>;
     }
 }
diff --git a/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.ts b/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.ts
index 079f0b38..ff98e867 100644
--- a/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.ts
+++ b/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.ts
@@ -8,8 +8,6 @@ import { SimboloInterface } from "../../interfaces";
 
 export class AvaliadorSintaticoPortugolIpt extends AvaliadorSintaticoBase {
     primario(): Construto {
-        const simboloAtual = this.simbolos[this.atual];
-
         switch (this.simbolos[this.atual].tipo) {
             case tiposDeSimbolos.IDENTIFICADOR:
                 const simboloIdentificador: SimboloInterface = this.avancarEDevolverAnterior();
@@ -186,7 +184,7 @@ export class AvaliadorSintaticoPortugolIpt extends AvaliadorSintaticoBase {
         );
     }
 
-    analisar(retornoLexador: RetornoLexador, hashArquivo: number): RetornoAvaliadorSintatico {
+    analisar(retornoLexador: RetornoLexador<SimboloInterface>, hashArquivo: number): RetornoAvaliadorSintatico<Declaracao> {
         this.erros = [];
         this.atual = 0;
         this.blocos = 0;
@@ -213,6 +211,6 @@ export class AvaliadorSintaticoPortugolIpt extends AvaliadorSintaticoBase {
         return {
             declaracoes: declaracoes.filter((d) => d),
             erros: this.erros,
-        } as RetornoAvaliadorSintatico;
+        } as RetornoAvaliadorSintatico<Declaracao>;
     }
 }
diff --git a/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-studio.ts b/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-studio.ts
index b299ed30..58b06502 100644
--- a/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-studio.ts
+++ b/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-studio.ts
@@ -639,7 +639,7 @@ export class AvaliadorSintaticoPortugolStudio extends AvaliadorSintaticoBase {
         }
     }
 
-    analisar(retornoLexador: RetornoLexador, hashArquivo: number): RetornoAvaliadorSintatico {
+    analisar(retornoLexador: RetornoLexador<SimboloInterface>, hashArquivo: number): RetornoAvaliadorSintatico<Declaracao> {
         this.erros = [];
         this.atual = 0;
         this.blocos = 0;
@@ -653,6 +653,6 @@ export class AvaliadorSintaticoPortugolStudio extends AvaliadorSintaticoBase {
         return {
             declaracoes: declaracoes.filter((d) => d),
             erros: this.erros,
-        } as RetornoAvaliadorSintatico;
+        } as RetornoAvaliadorSintatico<Declaracao>;
     }
 }
diff --git a/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-visualg.ts b/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-visualg.ts
index 7715a0bf..d3791e9b 100644
--- a/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-visualg.ts
+++ b/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-visualg.ts
@@ -1014,7 +1014,7 @@ export class AvaliadorSintaticoVisuAlg extends AvaliadorSintaticoBase {
      * @param retornoLexador Os símbolos entendidos pelo Lexador.
      * @param hashArquivo Obrigatório por interface mas não usado aqui.
      */
-    analisar(retornoLexador: RetornoLexador, hashArquivo: number): RetornoAvaliadorSintatico {
+    analisar(retornoLexador: RetornoLexador<SimboloInterface>, hashArquivo: number): RetornoAvaliadorSintatico<Declaracao> {
         this.erros = [];
         this.atual = 0;
         this.blocos = 0;
@@ -1042,6 +1042,6 @@ export class AvaliadorSintaticoVisuAlg extends AvaliadorSintaticoBase {
         return {
             declaracoes: declaracoes.filter((d) => d),
             erros: this.erros,
-        } as RetornoAvaliadorSintatico;
+        } as RetornoAvaliadorSintatico<Declaracao>;
     }
 }
diff --git a/fontes/avaliador-sintatico/dialetos/potigol/avaliador-sintatico-potigol.ts b/fontes/avaliador-sintatico/dialetos/potigol/avaliador-sintatico-potigol.ts
index dd29881f..b4a3c20b 100644
--- a/fontes/avaliador-sintatico/dialetos/potigol/avaliador-sintatico-potigol.ts
+++ b/fontes/avaliador-sintatico/dialetos/potigol/avaliador-sintatico-potigol.ts
@@ -946,7 +946,7 @@ export class AvaliadorSintaticoPotigol extends AvaliadorSintaticoBase {
         }
     }
 
-    analisar(retornoLexador: RetornoLexador, hashArquivo: number): RetornoAvaliadorSintatico {
+    analisar(retornoLexador: RetornoLexador<SimboloInterface>, hashArquivo: number): RetornoAvaliadorSintatico<Declaracao> {
         this.microAvaliadorSintatico = new MicroAvaliadorSintaticoPotigol(hashArquivo);
         this.erros = [];
         this.atual = 0;
@@ -969,6 +969,6 @@ export class AvaliadorSintaticoPotigol extends AvaliadorSintaticoBase {
         return {
             declaracoes: declaracoes,
             erros: this.erros,
-        } as RetornoAvaliadorSintatico;
+        } as RetornoAvaliadorSintatico<Declaracao>;
     }
 }
diff --git a/fontes/avaliador-sintatico/dialetos/potigol/micro-avaliador-sintatico-potigol.ts b/fontes/avaliador-sintatico/dialetos/potigol/micro-avaliador-sintatico-potigol.ts
index 0107d12f..4e3155e4 100644
--- a/fontes/avaliador-sintatico/dialetos/potigol/micro-avaliador-sintatico-potigol.ts
+++ b/fontes/avaliador-sintatico/dialetos/potigol/micro-avaliador-sintatico-potigol.ts
@@ -67,7 +67,7 @@ export class MicroAvaliadorSintaticoPotigol
         return this.primario();
     }
 
-    analisar(retornoLexador: RetornoLexador, linha: number): RetornoAvaliadorSintatico {
+    analisar(retornoLexador: RetornoLexador<SimboloInterface>, linha: number): RetornoAvaliadorSintatico<Declaracao> {
         this.erros = [];
         this.atual = 0;
         this.linha = linha;
@@ -82,6 +82,6 @@ export class MicroAvaliadorSintaticoPotigol
         return {
             declaracoes: declaracoes,
             erros: this.erros,
-        } as RetornoAvaliadorSintatico;
+        } as RetornoAvaliadorSintatico<Declaracao>;
     }
 }
\ No newline at end of file
diff --git a/fontes/avaliador-sintatico/micro-avaliador-sintatico-base.ts b/fontes/avaliador-sintatico/micro-avaliador-sintatico-base.ts
index 2fd66ac0..0b197342 100644
--- a/fontes/avaliador-sintatico/micro-avaliador-sintatico-base.ts
+++ b/fontes/avaliador-sintatico/micro-avaliador-sintatico-base.ts
@@ -169,5 +169,5 @@ export abstract class MicroAvaliadorSintaticoBase {
         return this.ou();
     }
 
-    abstract analisar(retornoLexador: RetornoLexador, linha: number): RetornoAvaliadorSintatico;
+    abstract analisar(retornoLexador: RetornoLexador<SimboloInterface>, linha: number): RetornoAvaliadorSintatico<Declaracao>;
 }
\ No newline at end of file
diff --git a/fontes/avaliador-sintatico/micro-avaliador-sintatico.ts b/fontes/avaliador-sintatico/micro-avaliador-sintatico.ts
index decd9504..f5949f54 100644
--- a/fontes/avaliador-sintatico/micro-avaliador-sintatico.ts
+++ b/fontes/avaliador-sintatico/micro-avaliador-sintatico.ts
@@ -360,7 +360,7 @@ export class MicroAvaliadorSintatico extends MicroAvaliadorSintaticoBase {
         return this.ou();
     }
 
-    analisar(retornoLexador: RetornoLexador, linha: number): RetornoAvaliadorSintatico {
+    analisar(retornoLexador: RetornoLexador<SimboloInterface>, linha: number): RetornoAvaliadorSintatico<Declaracao> {
         this.erros = [];
         this.atual = 0;
         this.linha = linha;
@@ -375,6 +375,6 @@ export class MicroAvaliadorSintatico extends MicroAvaliadorSintaticoBase {
         return {
             declaracoes: declaracoes,
             erros: this.erros,
-        } as RetornoAvaliadorSintatico;
+        } as RetornoAvaliadorSintatico<Declaracao>;
     }
 }
\ No newline at end of file
diff --git a/fontes/avaliador-sintatico/traducao/README.md b/fontes/avaliador-sintatico/traducao/README.md
new file mode 100644
index 00000000..2bcb5899
--- /dev/null
+++ b/fontes/avaliador-sintatico/traducao/README.md
@@ -0,0 +1,3 @@
+# Avaliadores Sintáticos para tradução
+
+Os Avaliadores Sintáticos implementados aqui servem apenas como abstração para outras bibliotecas que usamos para lidar com linguagens, como JavaScript, que utiliza o Esprima para gerar os símbolos do código.
\ No newline at end of file
diff --git a/fontes/avaliador-sintatico/traducao/avaliador-sintatico-javascript.ts b/fontes/avaliador-sintatico/traducao/avaliador-sintatico-javascript.ts
new file mode 100644
index 00000000..4dbb95ad
--- /dev/null
+++ b/fontes/avaliador-sintatico/traducao/avaliador-sintatico-javascript.ts
@@ -0,0 +1,232 @@
+import { Directive, ModuleDeclaration, Statement } from 'estree';
+import { Construto, FuncaoConstruto } from '../../construtos';
+import {
+    Enquanto,
+    Escreva,
+    Expressao,
+    Leia,
+    Para,
+    ParaCada,
+    Se,
+    Sustar,
+    Continua,
+    Retorna,
+    Escolha,
+    Importar,
+    Tente,
+    Fazer,
+    Const,
+    Var,
+    FuncaoDeclaracao,
+    Classe
+} from '../../declaracoes';
+import { AvaliadorSintaticoInterface } from '../../interfaces';
+import { RetornoLexador, RetornoAvaliadorSintatico } from '../../interfaces/retornos';
+import { ErroAvaliadorSintatico } from '../erro-avaliador-sintatico';
+
+export class AvaliadorSintaticoJavaScript
+    implements
+        AvaliadorSintaticoInterface<
+            Statement | Directive | ModuleDeclaration,
+            Statement | Directive | ModuleDeclaration
+        >
+{
+    simbolos: (Statement | Directive | ModuleDeclaration)[];
+    erros: ErroAvaliadorSintatico[];
+    atual: number;
+    blocos: number;
+
+    consumir(tipo: any, mensagemDeErro: string) {
+        throw new Error('Método não implementado.');
+    }
+
+    erro(simbolo: Statement | Directive | ModuleDeclaration, mensagemDeErro: string): ErroAvaliadorSintatico {
+        throw new Error('Método não implementado.');
+    }
+
+    verificarTipoSimboloAtual(tipo: string): boolean {
+        throw new Error('Método não implementado.');
+    }
+
+    verificarTipoProximoSimbolo(tipo: string): boolean {
+        throw new Error('Método não implementado.');
+    }
+
+    estaNoFinal(): boolean {
+        throw new Error('Método não implementado.');
+    }
+
+    avancarEDevolverAnterior() {
+        throw new Error('Método não implementado.');
+    }
+
+    verificarSeSimboloAtualEIgualA(...argumentos: any[]): boolean {
+        throw new Error('Método não implementado.');
+    }
+
+    primario() {
+        throw new Error('Método não implementado.');
+    }
+
+    finalizarChamada(entidadeChamada: Construto): Construto {
+        throw new Error('Método não implementado.');
+    }
+
+    chamar(): Construto {
+        throw new Error('Método não implementado.');
+    }
+
+    unario(): Construto {
+        throw new Error('Método não implementado.');
+    }
+
+    exponenciacao(): Construto {
+        throw new Error('Método não implementado.');
+    }
+
+    multiplicar(): Construto {
+        throw new Error('Método não implementado.');
+    }
+
+    adicaoOuSubtracao(): Construto {
+        throw new Error('Método não implementado.');
+    }
+
+    bitShift(): Construto {
+        throw new Error('Método não implementado.');
+    }
+
+    bitE(): Construto {
+        throw new Error('Método não implementado.');
+    }
+
+    bitOu(): Construto {
+        throw new Error('Método não implementado.');
+    }
+
+    comparar(): Construto {
+        throw new Error('Método não implementado.');
+    }
+
+    comparacaoIgualdade(): Construto {
+        throw new Error('Método não implementado.');
+    }
+
+    em(): Construto {
+        throw new Error('Método não implementado.');
+    }
+
+    e(): Construto {
+        throw new Error('Método não implementado.');
+    }
+
+    ou(): Construto {
+        throw new Error('Método não implementado.');
+    }
+
+    atribuir(): Construto {
+        throw new Error('Método não implementado.');
+    }
+
+    blocoEscopo(): any[] {
+        throw new Error('Método não implementado.');
+    }
+
+    expressao(): Construto {
+        throw new Error('Método não implementado.');
+    }
+
+    declaracaoEnquanto(): Enquanto {
+        throw new Error('Método não implementado.');
+    }
+
+    declaracaoEscreva(): Escreva {
+        throw new Error('Método não implementado.');
+    }
+
+    declaracaoExpressao(): Expressao {
+        throw new Error('Método não implementado.');
+    }
+
+    declaracaoLeia(): Leia {
+        throw new Error('Método não implementado.');
+    }
+
+    declaracaoPara(): Para | ParaCada {
+        throw new Error('Método não implementado.');
+    }
+
+    declaracaoSe(): Se {
+        throw new Error('Método não implementado.');
+    }
+
+    declaracaoSustar(): Sustar {
+        throw new Error('Método não implementado.');
+    }
+
+    declaracaoContinua(): Continua {
+        throw new Error('Método não implementado.');
+    }
+
+    declaracaoRetorna(): Retorna {
+        throw new Error('Método não implementado.');
+    }
+
+    declaracaoEscolha(): Escolha {
+        throw new Error('Método não implementado.');
+    }
+
+    declaracaoImportar(): Importar {
+        throw new Error('Método não implementado.');
+    }
+
+    declaracaoTente(): Tente {
+        throw new Error('Método não implementado.');
+    }
+
+    declaracaoFazer(): Fazer {
+        throw new Error('Método não implementado.');
+    }
+
+    resolverDeclaracao() {
+        throw new Error('Método não implementado.');
+    }
+
+    declaracaoDeConstantes(): Const[] {
+        throw new Error('Método não implementado.');
+    }
+
+    declaracaoDeVariaveis(): Var[] {
+        throw new Error('Método não implementado.');
+    }
+
+    declaracaoDeVariavel(): Var {
+        throw new Error('Método não implementado.');
+    }
+
+    funcao(tipo: string): FuncaoDeclaracao {
+        throw new Error('Método não implementado.');
+    }
+
+    corpoDaFuncao(tipo: string): FuncaoConstruto {
+        throw new Error('Método não implementado.');
+    }
+
+    declaracaoDeClasse(): Classe {
+        throw new Error('Método não implementado.');
+    }
+
+    declaracao() {
+        throw new Error('Método não implementado.');
+    }
+
+    analisar(
+        retornoLexador: RetornoLexador<Statement | Directive | ModuleDeclaration>,
+        hashArquivo: number
+    ): RetornoAvaliadorSintatico<Statement | Directive | ModuleDeclaration> {
+        return { 
+            declaracoes: retornoLexador.simbolos,
+            erros: []
+        };
+    }
+}
diff --git a/fontes/construtos/tuplas/tupla.ts b/fontes/construtos/tuplas/tupla.ts
index 4811bb63..ee3f5413 100644
--- a/fontes/construtos/tuplas/tupla.ts
+++ b/fontes/construtos/tuplas/tupla.ts
@@ -7,7 +7,7 @@ export abstract class Tupla implements Construto {
     valor?: any;
 
     async aceitar(visitante: VisitanteComumInterface): Promise<any> {
-        throw new Error("Method not implemented.");
+        throw new Error("Método não implementado.");
     }
     
 }
\ No newline at end of file
diff --git a/fontes/interfaces/avaliador-sintatico-interface.ts b/fontes/interfaces/avaliador-sintatico-interface.ts
index c5a8e92e..0b9d1817 100644
--- a/fontes/interfaces/avaliador-sintatico-interface.ts
+++ b/fontes/interfaces/avaliador-sintatico-interface.ts
@@ -23,17 +23,15 @@ import {
 } from '../declaracoes';
 import { RetornoLexador } from './retornos/retorno-lexador';
 
-import { SimboloInterface } from './simbolo-interface';
-
-export interface AvaliadorSintaticoInterface {
-    simbolos: SimboloInterface[];
+export interface AvaliadorSintaticoInterface<TSimbolo, TDeclaracao> {
+    simbolos: TSimbolo[];
     erros: ErroAvaliadorSintatico[];
 
     atual: number;
     blocos: number;
 
     consumir(tipo: any, mensagemDeErro: string): any;
-    erro(simbolo: SimboloInterface, mensagemDeErro: string): ErroAvaliadorSintatico;
+    erro(simbolo: TSimbolo, mensagemDeErro: string): ErroAvaliadorSintatico;
     verificarTipoSimboloAtual(tipo: string): boolean;
     verificarTipoProximoSimbolo(tipo: string): boolean;
     estaNoFinal(): boolean;
@@ -78,5 +76,5 @@ export interface AvaliadorSintaticoInterface {
     corpoDaFuncao(tipo: string): FuncaoConstruto;
     declaracaoDeClasse(): Classe;
     declaracao(): any;
-    analisar(retornoLexador: RetornoLexador, hashArquivo: number): RetornoAvaliadorSintatico;
+    analisar(retornoLexador: RetornoLexador<TSimbolo>, hashArquivo: number): RetornoAvaliadorSintatico<TDeclaracao>;
 }
diff --git a/fontes/interfaces/lexador-interface.ts b/fontes/interfaces/lexador-interface.ts
index 9427b28d..563fed4f 100644
--- a/fontes/interfaces/lexador-interface.ts
+++ b/fontes/interfaces/lexador-interface.ts
@@ -1,7 +1,7 @@
 import { RetornoLexador } from './retornos/retorno-lexador';
 import { SimboloInterface } from './simbolo-interface';
 
-export interface LexadorInterface {
+export interface LexadorInterface<T> {
     simbolos: SimboloInterface[];
     codigo: string | string[];
     inicioSimbolo: number;
@@ -21,5 +21,5 @@ export interface LexadorInterface {
     analisarNumero(): void;
     identificarPalavraChave(): void;
     analisarToken(): void;
-    mapear(codigo: string[], hashArquivo: number): RetornoLexador;
+    mapear(codigo: string[], hashArquivo: number): RetornoLexador<T>;
 }
diff --git a/fontes/interfaces/retornos/retorno-avaliador-sintatico.ts b/fontes/interfaces/retornos/retorno-avaliador-sintatico.ts
index c415e6bd..32d782b4 100644
--- a/fontes/interfaces/retornos/retorno-avaliador-sintatico.ts
+++ b/fontes/interfaces/retornos/retorno-avaliador-sintatico.ts
@@ -1,7 +1,6 @@
-import { Declaracao } from '../../declaracoes';
 import { ErroAvaliadorSintatico } from '../../avaliador-sintatico/erro-avaliador-sintatico';
 
-export interface RetornoAvaliadorSintatico {
-    declaracoes: Declaracao[];
+export interface RetornoAvaliadorSintatico<T> {
+    declaracoes: T[];
     erros: ErroAvaliadorSintatico[];
 }
diff --git a/fontes/interfaces/retornos/retorno-lexador.ts b/fontes/interfaces/retornos/retorno-lexador.ts
index 86c678ab..56739d15 100644
--- a/fontes/interfaces/retornos/retorno-lexador.ts
+++ b/fontes/interfaces/retornos/retorno-lexador.ts
@@ -1,9 +1,8 @@
-import { SimboloInterface } from '..';
 import { Pragma } from '../../lexador/dialetos/pragma';
 import { ErroLexador } from '../../lexador/erro-lexador';
 
-export interface RetornoLexador {
-    simbolos: SimboloInterface[];
+export interface RetornoLexador<T> {
+    simbolos: T[];
     erros: ErroLexador[];
     pragmas?: { [linha: number]: Pragma };
 }
diff --git a/fontes/lexador/dialetos/lexador-birl.ts b/fontes/lexador/dialetos/lexador-birl.ts
index 20666c65..89de33e7 100644
--- a/fontes/lexador/dialetos/lexador-birl.ts
+++ b/fontes/lexador/dialetos/lexador-birl.ts
@@ -5,6 +5,7 @@ import { Simbolo } from '../simbolo';
 
 import tiposDeSimbolos from '../../tipos-de-simbolos/birl';
 import { palavrasReservadas } from './palavras-reservadas/birl';
+import { SimboloInterface } from '../../interfaces';
 
 export class LexadorBirl extends LexadorBaseLinhaUnica {
     adicionarSimbolo(tipo: string, lexema: string = '', literal: any = null): void {
@@ -229,7 +230,7 @@ export class LexadorBirl extends LexadorBaseLinhaUnica {
         return [...codigoComeco, ...codigoPosPosição];
     }
 
-    mapear(codigo: string[], hashArquivo: number = -1): RetornoLexador {
+    mapear(codigo: string[], hashArquivo: number = -1): RetornoLexador<SimboloInterface> {
         this.erros = [];
         this.simbolos = [];
         this.inicioSimbolo = 0;
@@ -248,6 +249,6 @@ export class LexadorBirl extends LexadorBaseLinhaUnica {
         return {
             simbolos: this.simbolos,
             erros: this.erros,
-        } as RetornoLexador;
+        } as RetornoLexador<SimboloInterface>;
     }
 }
diff --git a/fontes/lexador/dialetos/lexador-egua-classico.ts b/fontes/lexador/dialetos/lexador-egua-classico.ts
index a52c180f..21b537d8 100644
--- a/fontes/lexador/dialetos/lexador-egua-classico.ts
+++ b/fontes/lexador/dialetos/lexador-egua-classico.ts
@@ -16,7 +16,7 @@ import tiposDeSimbolos from '../../tipos-de-simbolos/egua-classico';
  * Este Lexador implementa o mesmo mecanismo de lexação da linguagem Égua.
  * https://github.com/eguatech/egua/blob/master/src/lexer.js
  */
-export class LexadorEguaClassico implements LexadorInterface {
+export class LexadorEguaClassico implements LexadorInterface<SimboloInterface> {
     codigo: any;
     simbolos: SimboloInterface[];
     erros: ErroLexador[];
@@ -302,7 +302,7 @@ export class LexadorEguaClassico implements LexadorInterface {
         }
     }
 
-    mapear(codigo?: string[]): RetornoLexador {
+    mapear(codigo?: string[]): RetornoLexador<SimboloInterface> {
         this.erros = [];
         this.simbolos = [];
         this.inicioSimbolo = 0;
@@ -322,6 +322,6 @@ export class LexadorEguaClassico implements LexadorInterface {
         return {
             simbolos: this.simbolos,
             erros: this.erros,
-        } as RetornoLexador;
+        } as RetornoLexador<SimboloInterface>;
     }
 }
diff --git a/fontes/lexador/dialetos/lexador-guarani.ts b/fontes/lexador/dialetos/lexador-guarani.ts
index 58bbbe42..3ba41e31 100644
--- a/fontes/lexador/dialetos/lexador-guarani.ts
+++ b/fontes/lexador/dialetos/lexador-guarani.ts
@@ -5,6 +5,7 @@ import { ErroLexador } from "../erro-lexador";
 
 import tiposDeSimbolos from '../../tipos-de-simbolos/guarani';
 import { palavrasReservadas } from './palavras-reservadas/guarani';
+import { SimboloInterface } from "../../interfaces";
 
 export class LexadorGuarani extends LexadorBase {
     analisarTexto(delimitador: string): void {
@@ -104,7 +105,7 @@ export class LexadorGuarani extends LexadorBase {
         }
     }
 
-    mapear(codigo: string[], hashArquivo: number): RetornoLexador {
+    mapear(codigo: string[], hashArquivo: number): RetornoLexador<SimboloInterface> {
         this.erros = [];
         this.simbolos = [];
         this.inicioSimbolo = 0;
@@ -126,7 +127,6 @@ export class LexadorGuarani extends LexadorBase {
         return {
             simbolos: this.simbolos,
             erros: this.erros,
-        } as RetornoLexador;
+        } as RetornoLexador<SimboloInterface>;
     }
-    
 }
\ No newline at end of file
diff --git a/fontes/lexador/dialetos/lexador-mapler.ts b/fontes/lexador/dialetos/lexador-mapler.ts
index 6fa2b9b2..f4ef599b 100644
--- a/fontes/lexador/dialetos/lexador-mapler.ts
+++ b/fontes/lexador/dialetos/lexador-mapler.ts
@@ -4,6 +4,7 @@ import { ErroLexador } from '../erro-lexador';
 
 import tiposDeSimbolos from '../../tipos-de-simbolos/mapler';
 import { palavrasReservadas } from './palavras-reservadas/mapler';
+import { SimboloInterface } from '../../interfaces';
 
 export class LexadorMapler extends LexadorBaseLinhaUnica {
     analisarNumero(): void {
@@ -194,7 +195,7 @@ export class LexadorMapler extends LexadorBaseLinhaUnica {
         }
     }
 
-    mapear(codigo: string[], hashArquivo: number): RetornoLexador {
+    mapear(codigo: string[], hashArquivo: number): RetornoLexador<SimboloInterface> {
         this.erros = [];
         this.simbolos = [];
         this.inicioSimbolo = 0;
@@ -212,6 +213,6 @@ export class LexadorMapler extends LexadorBaseLinhaUnica {
         return {
             simbolos: this.simbolos,
             erros: this.erros,
-        } as RetornoLexador;
+        } as RetornoLexador<SimboloInterface>;
     }
 }
diff --git a/fontes/lexador/dialetos/lexador-pitugues.ts b/fontes/lexador/dialetos/lexador-pitugues.ts
index c407491a..e3eb1ca9 100644
--- a/fontes/lexador/dialetos/lexador-pitugues.ts
+++ b/fontes/lexador/dialetos/lexador-pitugues.ts
@@ -18,7 +18,7 @@ import { Pragma } from './pragma';
  * por exemplo quantos espaços há na frente de cada linha. Assim como a linguagem Python, os blocos de
  * escopo são definidos pelo número de espaços à frente do código.
  */
-export class LexadorPitugues implements LexadorInterface {
+export class LexadorPitugues implements LexadorInterface<SimboloInterface> {
     codigo: string[];
     hashArquivo: number;
     simbolos: SimboloInterface[];
@@ -435,7 +435,7 @@ export class LexadorPitugues implements LexadorInterface {
         }
     }
 
-    mapear(codigo: string[], hashArquivo: number): RetornoLexador {
+    mapear(codigo: string[], hashArquivo: number): RetornoLexador<SimboloInterface> {
         const inicioMapeamento: [number, number] = hrtime();
         this.simbolos = [];
         this.erros = [];
@@ -464,6 +464,6 @@ export class LexadorPitugues implements LexadorInterface {
             simbolos: this.simbolos,
             erros: this.erros,
             pragmas: this.pragmas,
-        } as RetornoLexador;
+        } as RetornoLexador<SimboloInterface>;
     }
 }
diff --git a/fontes/lexador/dialetos/lexador-portugol-ipt.ts b/fontes/lexador/dialetos/lexador-portugol-ipt.ts
index a075e2da..2d8138b0 100644
--- a/fontes/lexador/dialetos/lexador-portugol-ipt.ts
+++ b/fontes/lexador/dialetos/lexador-portugol-ipt.ts
@@ -6,7 +6,7 @@ import { Simbolo } from "../simbolo";
 import { palavrasReservadas } from "./palavras-reservadas/portugol-ipt";
 import tiposDeSimbolos from "../../tipos-de-simbolos/portugol-ipt";
 
-export class LexadorPortugolIpt implements LexadorInterface {
+export class LexadorPortugolIpt implements LexadorInterface<SimboloInterface> {
     simbolos: SimboloInterface[];
     erros: ErroLexador[];
     hashArquivo: number;
@@ -268,7 +268,7 @@ export class LexadorPortugolIpt implements LexadorInterface {
         }
     }
 
-    mapear(codigo: string[], hashArquivo: number): RetornoLexador {
+    mapear(codigo: string[], hashArquivo: number): RetornoLexador<SimboloInterface> {
         this.simbolos = [];
         this.erros = [];
 
@@ -287,6 +287,6 @@ export class LexadorPortugolIpt implements LexadorInterface {
         return {
             simbolos: this.simbolos,
             erros: this.erros
-        } as RetornoLexador;
+        } as RetornoLexador<SimboloInterface>;
     }
 }
\ No newline at end of file
diff --git a/fontes/lexador/dialetos/lexador-portugol-studio.ts b/fontes/lexador/dialetos/lexador-portugol-studio.ts
index f621f709..9e8e6c33 100644
--- a/fontes/lexador/dialetos/lexador-portugol-studio.ts
+++ b/fontes/lexador/dialetos/lexador-portugol-studio.ts
@@ -4,6 +4,7 @@ import { LexadorBase } from '../lexador-base';
 
 import { palavrasReservadas } from './palavras-reservadas/portugol-studio';
 import tiposDeSimbolos from '../../tipos-de-simbolos/portugol-studio';
+import { SimboloInterface } from '../../interfaces';
 
 /**
  * O Lexador é responsável por transformar o código em uma coleção de tokens de linguagem.
@@ -277,7 +278,7 @@ export class LexadorPortugolStudio extends LexadorBase {
         }
     }
 
-    mapear(codigo: string[], hashArquivo: number): RetornoLexador {
+    mapear(codigo: string[], hashArquivo: number): RetornoLexador<SimboloInterface> {
         this.erros = [];
         this.simbolos = [];
         this.inicioSimbolo = 0;
@@ -299,6 +300,6 @@ export class LexadorPortugolStudio extends LexadorBase {
         return {
             simbolos: this.simbolos,
             erros: this.erros,
-        } as RetornoLexador;
+        } as RetornoLexador<SimboloInterface>;
     }
 }
diff --git a/fontes/lexador/dialetos/lexador-potigol.ts b/fontes/lexador/dialetos/lexador-potigol.ts
index c5aacf24..dbd6c145 100644
--- a/fontes/lexador/dialetos/lexador-potigol.ts
+++ b/fontes/lexador/dialetos/lexador-potigol.ts
@@ -5,6 +5,7 @@ import { LexadorBaseLinhaUnica } from "../lexador-base-linha-unica";
 import { palavrasReservadas } from "./palavras-reservadas/potigol";
 
 import tiposDeSimbolos from '../../tipos-de-simbolos/potigol';
+import { SimboloInterface } from "../../interfaces";
 
 /**
  * Lexador para o dialeto Potigol.
@@ -302,7 +303,7 @@ export class LexadorPotigol extends LexadorBaseLinhaUnica {
         }
     }
 
-    mapear(codigo: string[], hashArquivo: number): RetornoLexador {
+    mapear(codigo: string[], hashArquivo: number): RetornoLexador<SimboloInterface> {
         this.erros = [];
         this.simbolos = [];
         this.inicioSimbolo = 0;
@@ -320,6 +321,6 @@ export class LexadorPotigol extends LexadorBaseLinhaUnica {
         return {
             simbolos: this.simbolos,
             erros: this.erros,
-        } as RetornoLexador;
+        } as RetornoLexador<SimboloInterface>;
     }
 }
\ No newline at end of file
diff --git a/fontes/lexador/dialetos/lexador-visualg.ts b/fontes/lexador/dialetos/lexador-visualg.ts
index c35e0741..e51d7af8 100644
--- a/fontes/lexador/dialetos/lexador-visualg.ts
+++ b/fontes/lexador/dialetos/lexador-visualg.ts
@@ -4,6 +4,7 @@ import { ErroLexador } from '../erro-lexador';
 
 import tiposDeSimbolos from '../../tipos-de-simbolos/visualg';
 import { palavrasReservadas } from './palavras-reservadas/visualg';
+import { SimboloInterface } from '../../interfaces';
 
 const dicionarioBibliotecaGlobal = {
     int: 'inteiro',
@@ -207,7 +208,7 @@ export class LexadorVisuAlg extends LexadorBaseLinhaUnica {
         }
     }
 
-    mapear(codigo: string[], hashArquivo: number): RetornoLexador {
+    mapear(codigo: string[], hashArquivo: number): RetornoLexador<SimboloInterface> {
         this.erros = [];
         this.simbolos = [];
         this.inicioSimbolo = 0;
@@ -227,6 +228,6 @@ export class LexadorVisuAlg extends LexadorBaseLinhaUnica {
         return {
             simbolos: this.simbolos,
             erros: this.erros,
-        } as RetornoLexador;
+        } as RetornoLexador<SimboloInterface>;
     }
 }
diff --git a/fontes/lexador/lexador-base-linha-unica.ts b/fontes/lexador/lexador-base-linha-unica.ts
index 782fda5e..d39e4829 100644
--- a/fontes/lexador/lexador-base-linha-unica.ts
+++ b/fontes/lexador/lexador-base-linha-unica.ts
@@ -3,7 +3,7 @@ import { RetornoLexador } from '../interfaces/retornos';
 import { ErroLexador } from './erro-lexador';
 import { Simbolo } from './simbolo';
 
-export abstract class LexadorBaseLinhaUnica implements LexadorInterface {
+export abstract class LexadorBaseLinhaUnica implements LexadorInterface<SimboloInterface> {
     simbolos: SimboloInterface[];
     codigo: string;
     inicioSimbolo: number;
@@ -108,5 +108,5 @@ export abstract class LexadorBaseLinhaUnica implements LexadorInterface {
 
     abstract analisarToken(): void;
 
-    abstract mapear(codigo: string[], hashArquivo: number): RetornoLexador;
+    abstract mapear(codigo: string[], hashArquivo: number): RetornoLexador<SimboloInterface>;
 }
diff --git a/fontes/lexador/lexador-base.ts b/fontes/lexador/lexador-base.ts
index 60556595..b71e4b14 100644
--- a/fontes/lexador/lexador-base.ts
+++ b/fontes/lexador/lexador-base.ts
@@ -8,7 +8,7 @@ import { Simbolo } from './simbolo';
  * Em outras palavras, se o dialeto da linguagem terá comentários multilinha,
  * este Lexador Base deverá ser usado.
  */
-export abstract class LexadorBase implements LexadorInterface {
+export abstract class LexadorBase implements LexadorInterface<SimboloInterface> {
     erros: ErroLexador[];
     hashArquivo: number;
 
@@ -143,5 +143,5 @@ export abstract class LexadorBase implements LexadorInterface {
 
     abstract analisarToken(): void;
 
-    abstract mapear(codigo: string[], hashArquivo: number): RetornoLexador;
+    abstract mapear(codigo: string[], hashArquivo: number): RetornoLexador<SimboloInterface>;
 }
diff --git a/fontes/lexador/lexador.ts b/fontes/lexador/lexador.ts
index 10062e30..c6d9ced3 100644
--- a/fontes/lexador/lexador.ts
+++ b/fontes/lexador/lexador.ts
@@ -14,7 +14,7 @@ import tiposDeSimbolos from '../tipos-de-simbolos/delegua';
  * Também é responsável por mapear as palavras reservadas da linguagem, que não podem ser usadas por outras
  * estruturas, tais como nomes de variáveis, funções, literais, classes e assim por diante.
  */
-export class Lexador implements LexadorInterface {
+export class Lexador implements LexadorInterface<SimboloInterface> {
     codigo: string[];
     hashArquivo: number;
     simbolos: SimboloInterface[];
@@ -434,7 +434,7 @@ export class Lexador implements LexadorInterface {
         }
     }
 
-    mapear(codigo: string[], hashArquivo: number): RetornoLexador {
+    mapear(codigo: string[], hashArquivo: number): RetornoLexador<SimboloInterface> {
         const inicioMapeamento: [number, number] = hrtime();
         this.erros = [];
         this.simbolos = [];
@@ -462,6 +462,6 @@ export class Lexador implements LexadorInterface {
         return {
             simbolos: this.simbolos,
             erros: this.erros,
-        } as RetornoLexador;
+        } as RetornoLexador<SimboloInterface>;
     }
 }
diff --git a/fontes/lexador/micro-lexador.ts b/fontes/lexador/micro-lexador.ts
index b86a81f8..36effe9c 100644
--- a/fontes/lexador/micro-lexador.ts
+++ b/fontes/lexador/micro-lexador.ts
@@ -216,7 +216,7 @@ export class MicroLexador {
      * Lê apenas uma linha de código e a transforma em símbolos.
      * @param codigo O código
      */
-    mapear(codigo: string): RetornoLexador {
+    mapear(codigo: string): RetornoLexador<SimboloInterface> {
         this.codigo = codigo;
         this.erros = [];
         this.simbolos = [];
@@ -231,6 +231,6 @@ export class MicroLexador {
         return {
             simbolos: this.simbolos,
             erros: this.erros,
-        } as RetornoLexador;
+        } as RetornoLexador<SimboloInterface>;
     }
 }
\ No newline at end of file
diff --git a/fontes/lexador/traducao/README.md b/fontes/lexador/traducao/README.md
new file mode 100644
index 00000000..43388a3d
--- /dev/null
+++ b/fontes/lexador/traducao/README.md
@@ -0,0 +1,3 @@
+# Lexadores para tradução
+
+Os Lexadores implementados aqui servem apenas como abstração para outras bibliotecas que usamos para lidar com linguagens, como JavaScript, que utiliza o Esprima para gerar os símbolos do código.
\ No newline at end of file
diff --git a/fontes/lexador/traducao/lexador-javascript.ts b/fontes/lexador/traducao/lexador-javascript.ts
new file mode 100644
index 00000000..6f506d83
--- /dev/null
+++ b/fontes/lexador/traducao/lexador-javascript.ts
@@ -0,0 +1,76 @@
+import { parseScript } from "esprima";
+import { LexadorInterface, SimboloInterface } from "../../interfaces";
+import { RetornoLexador } from "../../interfaces/retornos";
+import { Directive, ModuleDeclaration, Statement } from "estree";
+
+/**
+ * Este lexador existe apenas para abstrair o Esprima em 
+ * outras dependências, como `delegua-node`.
+ */
+export class LexadorJavaScript implements LexadorInterface<(Statement | Directive | ModuleDeclaration)> {
+    simbolos: SimboloInterface[];
+    codigo: string | string[];
+    inicioSimbolo: number;
+    atual: number;
+    linha: number;
+
+    eDigito(caractere: string): boolean {
+        throw new Error("Método não implementado.");
+    }
+
+    eAlfabeto(caractere: string): boolean {
+        throw new Error("Método não implementado.");
+    }
+
+    eAlfabetoOuDigito(caractere: string): boolean {
+        throw new Error("Método não implementado.");
+    }
+
+    eFinalDoCodigo(): boolean {
+        throw new Error("Método não implementado.");
+    }
+
+    avancar(): string | void {
+        throw new Error("Método não implementado.");
+    }
+
+    adicionarSimbolo(tipo: any, literal: any): void {
+        throw new Error("Método não implementado.");
+    }
+
+    simboloAtual(): string {
+        throw new Error("Método não implementado.");
+    }
+
+    proximoSimbolo(): string {
+        throw new Error("Método não implementado.");
+    }
+
+    simboloAnterior(): string {
+        throw new Error("Método não implementado.");
+    }
+
+    analisarTexto(delimitador: string): void {
+        throw new Error("Método não implementado.");
+    }
+
+    analisarNumero(): void {
+        throw new Error("Método não implementado.");
+    }
+
+    identificarPalavraChave(): void {
+        throw new Error("Método não implementado.");
+    }
+
+    analisarToken(): void {
+        throw new Error("Método não implementado.");
+    }
+
+    mapear(codigo: string[], hashArquivo: number): RetornoLexador<(Statement | Directive | ModuleDeclaration)> {
+        const programaEsprima = parseScript(codigo.join('\n'));
+        return {
+            simbolos: programaEsprima.body,
+            erros: []
+        } as RetornoLexador<(Statement | Directive | ModuleDeclaration)>;
+    }
+}
diff --git a/fontes/tradutores/tradutor-reverso-javascript.ts b/fontes/tradutores/tradutor-reverso-javascript.ts
index eb554f89..ebdd0775 100644
--- a/fontes/tradutores/tradutor-reverso-javascript.ts
+++ b/fontes/tradutores/tradutor-reverso-javascript.ts
@@ -37,7 +37,7 @@ export class TradutorReversoJavaScript {
             case '===':
                 return '==';
             case '&&':
-                return 'e'
+                return 'e';
             case '||':
                 return 'ou';
             default:
@@ -49,7 +49,7 @@ export class TradutorReversoJavaScript {
     traduzirFuncoesNativas(metodo: string): string {
         switch (metodo.toLowerCase()) {
             case 'concat':
-                return 'concatenar'
+                return 'concatenar';
             case 'includes':
                 return 'inclui';
             case 'join':
@@ -143,7 +143,7 @@ export class TradutorReversoJavaScript {
     }
 
     traduzirConstrutoLogico(logico: any): string {
-        return this.dicionarioConstrutos[logico.constructor.name](logico)
+        return this.dicionarioConstrutos[logico.constructor.name](logico);
     }
 
     dicionarioConstrutos = {
@@ -191,8 +191,8 @@ export class TradutorReversoJavaScript {
     }
 
     traduzirConstrutoLiteral(literal: Literal): string {
-        if(literal.raw === 'true') return 'verdadeiro';
-        else if (literal.raw === 'false') return 'falso';
+        if (literal.raw === 'true') return 'verdadeiro';
+        if (literal.raw === 'false') return 'falso';
         return `${literal.raw}`;
     }
 
@@ -323,7 +323,7 @@ export class TradutorReversoJavaScript {
                     resultado += ')';
                     resultado += this.logicaComumBlocoEscopo(_corpo.value);
                 }
-            } // else if (corpo.constructor.name === 'PropertyDefinition') {} 
+            } // else if (corpo.constructor.name === 'PropertyDefinition') {}
             // else if (corpo.constructor.name === 'StaticBlock') {}
         }
 
@@ -359,8 +359,8 @@ export class TradutorReversoJavaScript {
         resultado += ')';
         resultado += this.logicaComumBlocoEscopo(declaracao.consequent);
 
-        if(declaracao?.alternate){
-            resultado += 'senao '
+        if (declaracao?.alternate) {
+            resultado += 'senao ';
             if (declaracao.alternate.constructor.name === 'BlockStatement') {
                 const bloco = declaracao.alternate as BlockStatement;
                 resultado += this.logicaComumBlocoEscopo(bloco);
@@ -400,21 +400,21 @@ export class TradutorReversoJavaScript {
 
         resultado += `escolha(${this.dicionarioConstrutos[declaracao.discriminant.type](declaracao.discriminant)}) {`;
         resultado += ' '.repeat(this.indentacao);
-        for(let caso of declaracao.cases){
-            if(!caso.test){
+        for (let caso of declaracao.cases) {
+            if (!caso.test) {
                 resultado += 'padrao:';
                 resultado += ' '.repeat(this.indentacao + 4);
-                for(let bloco of caso.consequent) {
-                    if(bloco.type === 'BreakStatement') continue;
-                    resultado += this.traduzirDeclaracao(bloco) + '\n'
+                for (let bloco of caso.consequent) {
+                    if (bloco.type === 'BreakStatement') continue;
+                    resultado += this.traduzirDeclaracao(bloco) + '\n';
                 }
                 break;
             }
-            resultado += `caso ${this.dicionarioConstrutos[caso.test.type](caso.test)}:`
+            resultado += `caso ${this.dicionarioConstrutos[caso.test.type](caso.test)}:`;
             resultado += ' '.repeat(this.indentacao + 4);
-            for(let bloco of caso.consequent) {
-                if(bloco.type === 'BreakStatement') continue;
-                resultado += this.traduzirDeclaracao(bloco) + '\n'
+            for (let bloco of caso.consequent) {
+                if (bloco.type === 'BreakStatement') continue;
+                resultado += this.traduzirDeclaracao(bloco) + '\n';
             }
         }
 
diff --git a/index.ts b/index.ts
index f6565c40..88201e92 100644
--- a/index.ts
+++ b/index.ts
@@ -1,5 +1,6 @@
-export * from './fontes/avaliador-sintatico';
+export * as avaliadores from './fontes/avaliador-sintatico';
 export { PontoParada, cyrb53 } from './fontes/depuracao';
-export * from './fontes/formatadores';
-export * from './fontes/interpretador';
-export * from './fontes/lexador';
+export * as formatadores from './fontes/formatadores';
+export * as interpretadores from './fontes/interpretador';
+export * as lexadores from './fontes/lexador';
+export * as tradutores from './fontes/tradutores';
\ No newline at end of file


Test patch:
diff --git a/testes/egua-classico/avaliador-sintatico.test.ts b/testes/egua-classico/avaliador-sintatico.test.ts
index 4ed5c183..c7002b9f 100644
--- a/testes/egua-classico/avaliador-sintatico.test.ts
+++ b/testes/egua-classico/avaliador-sintatico.test.ts
@@ -1,4 +1,5 @@
 import { AvaliadorSintaticoEguaClassico } from "../../fontes/avaliador-sintatico/dialetos";
+import { SimboloInterface } from "../../fontes/interfaces";
 import { RetornoLexador } from "../../fontes/interfaces/retornos/retorno-lexador";
 import { LexadorEguaClassico } from "../../fontes/lexador/dialetos";
 
@@ -21,7 +22,7 @@ describe('Avaliador sintático (Égua Clássico)', () => {
         });
 
         it('Falha - Vetor vazio', () => {
-            expect(() => avaliadorSintatico.analisar({ simbolos: [] } as unknown as RetornoLexador, -1)).toThrow(TypeError);
+            expect(() => avaliadorSintatico.analisar({ simbolos: [] } as any as RetornoLexador<SimboloInterface>, -1)).toThrow(TypeError);
         });
 
         it('Falha - Undefined', () => {