Skip to content

Commit

Permalink
Importador genérico.
Browse files Browse the repository at this point in the history
  • Loading branch information
leonelsanchesdasilva committed Aug 17, 2023
1 parent e5f7ac7 commit 8435765
Show file tree
Hide file tree
Showing 13 changed files with 44 additions and 38 deletions.
2 changes: 1 addition & 1 deletion fontes/delegua.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import { NucleoTraducao } from './nucleo-traducao';
export class Delegua implements DeleguaInterface {
lexador: LexadorInterface<any>;
avaliadorSintatico: AvaliadorSintaticoInterface<any, any>;
importador: ImportadorInterface;
importador: ImportadorInterface<any, any>;

funcaoDeRetorno: Function;
funcaoDeRetornoMesmaLinha: Function;
Expand Down
7 changes: 4 additions & 3 deletions fontes/importador/importador-javascript.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,15 @@ import { AvaliadorSintaticoJavaScript } from "@designliquido/delegua/fontes/aval

import { ImportadorInterface } from "../interfaces";
import { RetornoImportador } from "./retorno-importador";
import { Statement, Directive, ModuleDeclaration } from 'estree';

export class ImportadorJavaScript implements ImportadorInterface {
export class ImportadorJavaScript implements ImportadorInterface<(Statement | Directive | ModuleDeclaration), (Statement | Directive | ModuleDeclaration)> {
diretorioBase: string;
conteudoArquivosAbertos: { [identificador: string]: string[]; };
lexador: LexadorJavaScript;
avaliadorSintatico: AvaliadorSintaticoJavaScript;

importar(caminhoRelativoArquivo: string, importacaoInicial: boolean): RetornoImportador {
importar(caminhoRelativoArquivo: string, importacaoInicial: boolean): RetornoImportador<(Statement | Directive | ModuleDeclaration), (Statement | Directive | ModuleDeclaration)> {
const nomeArquivo = caminho.basename(caminhoRelativoArquivo);
let caminhoAbsolutoArquivo = caminho.resolve(this.diretorioBase, caminhoRelativoArquivo);
if (importacaoInicial) {
Expand All @@ -41,7 +42,7 @@ export class ImportadorJavaScript implements ImportadorInterface {
hashArquivo,
retornoLexador,
retornoAvaliadorSintatico,
} as RetornoImportador;
} as RetornoImportador<(Statement | Directive | ModuleDeclaration), (Statement | Directive | ModuleDeclaration)>;
}

}
6 changes: 3 additions & 3 deletions fontes/importador/importador.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import { Declaracao } from '@designliquido/delegua/fontes/declaracoes';
* `conteudoArquivosAbertos`) e aponta erros caso ocorram.
*
*/
export class Importador implements ImportadorInterface {
export class Importador implements ImportadorInterface<SimboloInterface, Declaracao> {
diretorioBase: string = process.cwd();
lexador: LexadorInterface<SimboloInterface>;
avaliadorSintatico: AvaliadorSintaticoInterface<SimboloInterface, Declaracao>;
Expand All @@ -41,7 +41,7 @@ export class Importador implements ImportadorInterface {
importar(
caminhoRelativoArquivo: string,
importacaoInicial: boolean = false
): RetornoImportador {
): RetornoImportador<SimboloInterface, Declaracao> {
const nomeArquivo = caminho.basename(caminhoRelativoArquivo);
let caminhoAbsolutoArquivo = caminho.resolve(this.diretorioBase, caminhoRelativoArquivo);
if (importacaoInicial) {
Expand Down Expand Up @@ -79,6 +79,6 @@ export class Importador implements ImportadorInterface {
hashArquivo,
retornoLexador,
retornoAvaliadorSintatico,
} as RetornoImportador;
} as RetornoImportador<SimboloInterface, Declaracao>;
}
}
6 changes: 3 additions & 3 deletions fontes/importador/retorno-importador.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { RetornoAvaliadorSintatico } from '@designliquido/delegua/fontes/interfaces/retornos/retorno-avaliador-sintatico';
import { RetornoLexador } from '@designliquido/delegua/fontes/interfaces/retornos/retorno-lexador';

export interface RetornoImportador {
export interface RetornoImportador<TSimbolo, TDeclaracao> {
conteudoArquivo: string[];
nomeArquivo: string;
hashArquivo: number;
retornoLexador: RetornoLexador;
retornoAvaliadorSintatico: RetornoAvaliadorSintatico;
retornoLexador: RetornoLexador<TSimbolo>;
retornoAvaliadorSintatico: RetornoAvaliadorSintatico<TDeclaracao>;
}
4 changes: 2 additions & 2 deletions fontes/interfaces/importador-interface.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { RetornoImportador } from '../importador';

export interface ImportadorInterface {
export interface ImportadorInterface<TSimbolo, TDeclaracao> {
diretorioBase: string;
conteudoArquivosAbertos: { [identificador: string]: string[] };

importar(
caminhoRelativoArquivo: string,
importacaoInicial: boolean
): RetornoImportador;
): RetornoImportador<TSimbolo, TDeclaracao>;
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,17 @@ import * as caminho from 'path';

import { InterpretadorBirl } from "@designliquido/delegua/fontes/interpretador/dialetos";
import { ImportadorInterface } from "../../interfaces";
import { Importar } from "@designliquido/delegua/fontes/declaracoes";
import { Declaracao, Importar } from "@designliquido/delegua/fontes/declaracoes";
import { DeleguaModulo } from "@designliquido/delegua/fontes/estruturas";

import carregarBibliotecaNode from '../mecanismo-importacao-bibliotecas';
import { SimboloInterface } from '@designliquido/delegua/fontes/interfaces';

export class InterpretadorBirlImportacao extends InterpretadorBirl {
importador: ImportadorInterface
importador: ImportadorInterface<SimboloInterface, Declaracao>

constructor(
importador: ImportadorInterface,
importador: ImportadorInterface<SimboloInterface, Declaracao>,
diretorioBase: string,
funcaoDeRetorno: Function,
funcaoDeRetornoMesmaLinha: Function
Expand All @@ -35,7 +36,7 @@ export class InterpretadorBirlImportacao extends InterpretadorBirl {
}
}

const conteudoImportacao = this.importador.importar(caminhoRelativo, false, false);
const conteudoImportacao = this.importador.importar(caminhoRelativo, false);
const retornoInterpretador = await this.interpretar(
conteudoImportacao.retornoAvaliadorSintatico.declaracoes,
true
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import { Importar } from "@designliquido/delegua/fontes/declaracoes";
import { Declaracao, Importar } from "@designliquido/delegua/fontes/declaracoes";
import { DeleguaModulo } from "@designliquido/delegua/fontes/estruturas";
import { InterpretadorMaplerComDepuracao } from "@designliquido/delegua/fontes/interpretador/dialetos/mapler/interpretador-mapler-com-depuracao";
import { ImportadorInterface } from "../../interfaces";
import { SimboloInterface } from "@designliquido/delegua/fontes/interfaces";

export class InterpretadorMaplerComDepuracaoImportacao extends InterpretadorMaplerComDepuracao {
importador: ImportadorInterface;
importador: ImportadorInterface<SimboloInterface, Declaracao>;

constructor(
importador: ImportadorInterface,
importador: ImportadorInterface<SimboloInterface, Declaracao>,
diretorioBase: string,
funcaoDeRetorno: Function,
funcaoDeRetornoMesmaLinha: Function)
Expand All @@ -24,7 +25,7 @@ export class InterpretadorMaplerComDepuracaoImportacao extends InterpretadorMapl
async visitarDeclaracaoImportar(declaracao: Importar): Promise<DeleguaModulo> {
const caminhoRelativo = await this.avaliar(declaracao.caminho);

const conteudoImportacao = this.importador.importar(caminhoRelativo, false, false);
const conteudoImportacao = this.importador.importar(caminhoRelativo, false);
const retornoInterpretador = await this.interpretar(
conteudoImportacao.retornoAvaliadorSintatico.declaracoes,
true
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
import * as caminho from 'path';

import { Importar } from "@designliquido/delegua/fontes/declaracoes";
import { Declaracao, Importar } from "@designliquido/delegua/fontes/declaracoes";
import { DeleguaModulo } from "@designliquido/delegua/fontes/estruturas";
import { InterpretadorVisuAlgComDepuracao } from "@designliquido/delegua/fontes/interpretador/dialetos";
import { ImportadorInterface } from "../../interfaces";

import carregarBibliotecaNode from '../mecanismo-importacao-bibliotecas';
import { SimboloInterface } from '@designliquido/delegua/fontes/interfaces';

export class InterpretadorVisuAlgComDepuracaoImportacao extends InterpretadorVisuAlgComDepuracao {
importador: ImportadorInterface;
importador: ImportadorInterface<SimboloInterface, Declaracao>;

constructor(
importador: ImportadorInterface,
importador: ImportadorInterface<SimboloInterface, Declaracao>,
diretorioBase: string,
funcaoDeRetorno: Function,
funcaoDeRetornoMesmaLinha: Function)
Expand Down Expand Up @@ -40,7 +41,7 @@ export class InterpretadorVisuAlgComDepuracaoImportacao extends InterpretadorVis
}
}

const conteudoImportacao = this.importador.importar(caminhoRelativo, false, false);
const conteudoImportacao = this.importador.importar(caminhoRelativo, false);
const retornoInterpretador = await this.interpretar(
conteudoImportacao.retornoAvaliadorSintatico.declaracoes,
true
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
import * as caminho from 'path';

import { Importar } from "@designliquido/delegua/fontes/declaracoes";
import { Declaracao, Importar } from "@designliquido/delegua/fontes/declaracoes";
import { DeleguaModulo } from "@designliquido/delegua/fontes/estruturas";
import { InterpretadorComDepuracao } from "@designliquido/delegua/fontes/interpretador";
import { ImportadorInterface } from "../interfaces";

import carregarBibliotecaNode from './mecanismo-importacao-bibliotecas';
import { SimboloInterface } from '@designliquido/delegua/fontes/interfaces';

export class InterpretadorComDepuracaoImportacao extends InterpretadorComDepuracao {
importador: ImportadorInterface;
importador: ImportadorInterface<SimboloInterface, Declaracao>;

constructor(
importador: ImportadorInterface,
importador: ImportadorInterface<SimboloInterface, Declaracao>,
diretorioBase: string,
funcaoDeRetorno: Function,
funcaoDeRetornoMesmaLinha: Function)
Expand Down Expand Up @@ -39,7 +40,7 @@ export class InterpretadorComDepuracaoImportacao extends InterpretadorComDepurac
}
}

const conteudoImportacao = this.importador.importar(caminhoRelativo, false, false);
const conteudoImportacao = this.importador.importar(caminhoRelativo, false);
const retornoInterpretador = await this.interpretar(
conteudoImportacao.retornoAvaliadorSintatico.declaracoes,
true
Expand Down
9 changes: 5 additions & 4 deletions fontes/interpretador/interpretador.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
import * as caminho from 'path';

import { Importar } from '@designliquido/delegua/fontes/declaracoes';
import { Declaracao, Importar } from '@designliquido/delegua/fontes/declaracoes';
import { DeleguaModulo } from '@designliquido/delegua/fontes/estruturas';

import { ImportadorInterface } from '../interfaces/importador-interface';
import { InterpretadorBase } from '@designliquido/delegua/fontes/interpretador/interpretador-base';

import carregarBibliotecaNode from './mecanismo-importacao-bibliotecas';
import { SimboloInterface } from '@designliquido/delegua/fontes/interfaces';


/**
* O Interpretador visita todos os elementos complexos gerados pelo avaliador sintático (_parser_),
* e de fato executa a lógica de programação descrita no código.
*/
export class Interpretador extends InterpretadorBase {
importador: ImportadorInterface;
importador: ImportadorInterface<SimboloInterface, Declaracao>;

constructor(
importador: ImportadorInterface,
importador: ImportadorInterface<SimboloInterface, Declaracao>,
diretorioBase: string,
performance = false,
funcaoDeRetorno: Function = null,
Expand Down Expand Up @@ -46,7 +47,7 @@ export class Interpretador extends InterpretadorBase {
}
}

const conteudoImportacao = this.importador.importar(caminhoRelativo, false, false);
const conteudoImportacao = this.importador.importar(caminhoRelativo, false);
const retornoInterpretador = await this.interpretar(
conteudoImportacao.retornoAvaliadorSintatico.declaracoes,
true
Expand Down
2 changes: 1 addition & 1 deletion fontes/nucleo-comum.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export abstract class NucleoComum {
* @param retornoImportador Um objeto que implementa a interface RetornoImportador.
* @returns Verdadeiro se há erros. Falso caso contrário.
*/
protected afericaoErros(retornoImportador: RetornoImportador): boolean {
protected afericaoErros(retornoImportador: RetornoImportador<any, any>): boolean {
if (retornoImportador.retornoLexador.erros.length > 0) {
for (const erroLexador of retornoImportador.retornoLexador.erros) {
this.reportar(erroLexador.linha, ` no '${erroLexador.caractere}'`, erroLexador.mensagem);
Expand Down
8 changes: 4 additions & 4 deletions fontes/nucleo-execucao.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export class NucleoExecucao
interpretador: InterpretadorInterface;
lexador: LexadorInterface<any>;
avaliadorSintatico: AvaliadorSintaticoInterface<any, any>;
importador: ImportadorInterface;
importador: ImportadorInterface<any, any>;
servidorDepuracao: ServidorDepuracao;

dialeto: string;
Expand Down Expand Up @@ -364,7 +364,7 @@ export class NucleoExecucao
* para LAIR, falso para execução por arquivo.
* @returns Um objeto com o resultado da execução.
*/
async executar(retornoImportador: RetornoImportador, manterAmbiente = false): Promise<RetornoExecucaoInterface> {
async executar(retornoImportador: RetornoImportador<any, any>, manterAmbiente = false): Promise<RetornoExecucaoInterface> {
const retornoInterpretador = await this.interpretador.interpretar(
retornoImportador.retornoAvaliadorSintatico.declaracoes,
manterAmbiente
Expand Down Expand Up @@ -409,7 +409,7 @@ export class NucleoExecucao
this.afericaoErros({
retornoLexador,
retornoAvaliadorSintatico,
} as RetornoImportador)
} as RetornoImportador<any, any>)
) {
return { resultado: [] } as RetornoExecucaoInterface;
}
Expand All @@ -418,7 +418,7 @@ export class NucleoExecucao
{
retornoLexador,
retornoAvaliadorSintatico,
} as RetornoImportador,
} as RetornoImportador<any, any>,
true
);
}
Expand Down
2 changes: 1 addition & 1 deletion fontes/nucleo-traducao.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { NucleoComum } from './nucleo-comum';
export class NucleoTraducao
extends NucleoComum
{
importador: ImportadorInterface;
importador: ImportadorInterface<any, any>;
tradutor: TradutorInterface;
funcaoDeRetorno: Function;
funcaoDeRetornoMesmaLinha: Function;
Expand Down

0 comments on commit 8435765

Please sign in to comment.