@designliquido/delegua 0.5.4 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -1
- package/bin/package.json +9 -2
- package/fontes/ambiente.d.ts +4 -1
- package/fontes/ambiente.js.map +1 -1
- package/fontes/bibliotecas/biblioteca-global.js +37 -28
- package/fontes/bibliotecas/biblioteca-global.js.map +1 -1
- package/fontes/bibliotecas/importar-biblioteca.js +18 -1
- package/fontes/bibliotecas/importar-biblioteca.js.map +1 -1
- package/fontes/construtos/acesso-indice-variavel.d.ts +4 -3
- package/fontes/construtos/acesso-indice-variavel.js.map +1 -1
- package/fontes/construtos/acesso-metodo.d.ts +2 -2
- package/fontes/construtos/acesso-metodo.js.map +1 -1
- package/fontes/construtos/agrupamento.d.ts +2 -2
- package/fontes/construtos/agrupamento.js.map +1 -1
- package/fontes/construtos/atribuir.d.ts +2 -2
- package/fontes/construtos/atribuir.js.map +1 -1
- package/fontes/construtos/binario.d.ts +2 -2
- package/fontes/construtos/binario.js.map +1 -1
- package/fontes/construtos/chamada.d.ts +2 -2
- package/fontes/construtos/chamada.js.map +1 -1
- package/fontes/construtos/literal.d.ts +2 -2
- package/fontes/construtos/literal.js.map +1 -1
- package/fontes/construtos/variavel.d.ts +2 -2
- package/fontes/construtos/variavel.js.map +1 -1
- package/fontes/declaracoes/bloco.d.ts +2 -2
- package/fontes/declaracoes/bloco.js.map +1 -1
- package/fontes/declaracoes/escreva.d.ts +2 -2
- package/fontes/declaracoes/escreva.js.map +1 -1
- package/fontes/declaracoes/expressao.d.ts +2 -2
- package/fontes/declaracoes/expressao.js.map +1 -1
- package/fontes/declaracoes/funcao.d.ts +2 -2
- package/fontes/declaracoes/funcao.js.map +1 -1
- package/fontes/declaracoes/retorna.d.ts +2 -2
- package/fontes/declaracoes/retorna.js.map +1 -1
- package/fontes/declaracoes/se.d.ts +2 -2
- package/fontes/declaracoes/se.js.map +1 -1
- package/fontes/declaracoes/sustar.d.ts +2 -2
- package/fontes/declaracoes/sustar.js.map +1 -1
- package/fontes/declaracoes/tente.d.ts +2 -2
- package/fontes/declaracoes/tente.js.map +1 -1
- package/fontes/declaracoes/var.d.ts +2 -2
- package/fontes/declaracoes/var.js.map +1 -1
- package/fontes/delegua.d.ts +0 -2
- package/fontes/delegua.js +6 -10
- package/fontes/delegua.js.map +1 -1
- package/fontes/estruturas/delegua-classe.d.ts +4 -2
- package/fontes/estruturas/funcao.js +1 -1
- package/fontes/estruturas/funcao.js.map +1 -1
- package/fontes/interfaces/delegua-interface.d.ts +1 -2
- package/fontes/interfaces/index.d.ts +1 -0
- package/fontes/interfaces/index.js +1 -0
- package/fontes/interfaces/index.js.map +1 -1
- package/fontes/interfaces/interpretador-interface.d.ts +1 -2
- package/fontes/interfaces/pilha-escopos-execucao-interface.d.ts +6 -4
- package/fontes/interfaces/variavel-interface.d.ts +4 -0
- package/fontes/interfaces/variavel-interface.js +3 -0
- package/fontes/interfaces/variavel-interface.js.map +1 -0
- package/fontes/interpretador/dialetos/egua-classico.d.ts +22 -13
- package/fontes/interpretador/dialetos/egua-classico.js +69 -43
- package/fontes/interpretador/dialetos/egua-classico.js.map +1 -1
- package/fontes/interpretador/inferenciador.d.ts +1 -0
- package/fontes/interpretador/inferenciador.js +26 -0
- package/fontes/interpretador/inferenciador.js.map +1 -0
- package/fontes/interpretador/interpretador-com-depuracao.d.ts +2 -2
- package/fontes/interpretador/interpretador-com-depuracao.js +2 -2
- package/fontes/interpretador/interpretador-com-depuracao.js.map +1 -1
- package/fontes/interpretador/interpretador.d.ts +42 -10
- package/fontes/interpretador/interpretador.js +96 -49
- package/fontes/interpretador/interpretador.js.map +1 -1
- package/fontes/interpretador/pilha-escopos-execucao.d.ts +5 -4
- package/fontes/interpretador/pilha-escopos-execucao.js +18 -5
- package/fontes/interpretador/pilha-escopos-execucao.js.map +1 -1
- package/fontes/lexador/dialetos/lexador-egua-classico.js +1 -0
- package/fontes/lexador/dialetos/lexador-egua-classico.js.map +1 -1
- package/fontes/resolvedor/index.d.ts +0 -1
- package/fontes/resolvedor/index.js +0 -1
- package/fontes/resolvedor/index.js.map +1 -1
- package/package.json +9 -2
- package/testes/__mocks__/estatistica.d.ts +2 -0
- package/testes/__mocks__/estatistica.js +4 -0
- package/testes/__mocks__/estatistica.js.map +1 -0
- package/testes/__mocks__/fisica.d.ts +2 -0
- package/testes/__mocks__/fisica.js +4 -0
- package/testes/__mocks__/fisica.js.map +1 -0
- package/testes/__mocks__/matematica.d.ts +2 -0
- package/testes/__mocks__/matematica.js +4 -0
- package/testes/__mocks__/matematica.js.map +1 -0
- package/testes/biblioteca-global.test.js +10 -0
- package/testes/biblioteca-global.test.js.map +1 -1
- package/testes/egua-classico/interpretador.test.js +1 -1
- package/testes/egua-classico/interpretador.test.js.map +1 -1
- package/testes/egua-classico/resolvedor.test.js +18 -19
- package/testes/egua-classico/resolvedor.test.js.map +1 -1
- package/testes/interpretador.test.js +64 -0
- package/testes/interpretador.test.js.map +1 -1
- package/fontes/resolvedor/resolvedor.d.ts +0 -64
- package/fontes/resolvedor/resolvedor.js +0 -345
- package/fontes/resolvedor/resolvedor.js.map +0 -1
- package/testes/eguap/resolvedor.test.d.ts +0 -1
- package/testes/eguap/resolvedor.test.js +0 -38
- package/testes/eguap/resolvedor.test.js.map +0 -1
- package/testes/resolvedor.test.d.ts +0 -1
- package/testes/resolvedor.test.js +0 -35
- package/testes/resolvedor.test.js.map +0 -1
package/fontes/delegua.js
CHANGED
|
@@ -33,18 +33,17 @@ var readline = __importStar(require("readline"));
|
|
|
33
33
|
var chalk_1 = __importDefault(require("chalk"));
|
|
34
34
|
var lexador_1 = require("./lexador/lexador");
|
|
35
35
|
var avaliador_sintatico_1 = require("./avaliador-sintatico/avaliador-sintatico");
|
|
36
|
-
var resolvedor_1 = require("./resolvedor");
|
|
37
36
|
var interpretador_1 = require("./interpretador/interpretador");
|
|
38
37
|
var tipos_de_simbolos_1 = __importDefault(require("./tipos-de-simbolos"));
|
|
39
38
|
var egua_classico_1 = require("./interpretador/dialetos/egua-classico");
|
|
40
39
|
var lexador_egua_classico_1 = require("./lexador/dialetos/lexador-egua-classico");
|
|
41
40
|
var lexador_eguap_1 = require("./lexador/dialetos/lexador-eguap");
|
|
42
41
|
var avaliador_sintatico_eguap_1 = require("./avaliador-sintatico/dialetos/avaliador-sintatico-eguap");
|
|
43
|
-
var egua_classico_2 = require("./resolvedor/dialetos/egua-classico");
|
|
44
42
|
var dialetos_1 = require("./avaliador-sintatico/dialetos");
|
|
45
43
|
var depuracao_1 = require("./depuracao");
|
|
46
44
|
var importador_1 = require("./importador");
|
|
47
45
|
var interpretador_com_depuracao_1 = require("./interpretador/interpretador-com-depuracao");
|
|
46
|
+
var dialetos_2 = require("./resolvedor/dialetos");
|
|
48
47
|
/**
|
|
49
48
|
* O núcleo da linguagem.
|
|
50
49
|
*
|
|
@@ -66,31 +65,28 @@ var Delegua = /** @class */ (function () {
|
|
|
66
65
|
if (depurador) {
|
|
67
66
|
throw new Error("Dialeto " + this.dialeto + " não suporta depuração.");
|
|
68
67
|
}
|
|
69
|
-
this.resolvedor = new egua_classico_2.ResolvedorEguaClassico();
|
|
70
68
|
this.lexador = new lexador_egua_classico_1.LexadorEguaClassico();
|
|
71
69
|
this.avaliadorSintatico = new dialetos_1.AvaliadorSintaticoEguaClassico();
|
|
72
70
|
this.importador = new importador_1.Importador(this.lexador, this.avaliadorSintatico, this.arquivosAbertos, this.conteudoArquivosAbertos, depurador);
|
|
73
|
-
this.interpretador = new egua_classico_1.InterpretadorEguaClassico(this, process.cwd());
|
|
71
|
+
this.interpretador = new egua_classico_1.InterpretadorEguaClassico(this, new dialetos_2.ResolvedorEguaClassico(), process.cwd());
|
|
74
72
|
console.log('Usando dialeto: Égua');
|
|
75
73
|
break;
|
|
76
74
|
case 'eguap':
|
|
77
|
-
this.resolvedor = new resolvedor_1.Resolvedor();
|
|
78
75
|
this.lexador = new lexador_eguap_1.LexadorEguaP();
|
|
79
76
|
this.avaliadorSintatico = new avaliador_sintatico_eguap_1.AvaliadorSintaticoEguaP();
|
|
80
77
|
this.importador = new importador_1.Importador(this.lexador, this.avaliadorSintatico, this.arquivosAbertos, this.conteudoArquivosAbertos, depurador);
|
|
81
78
|
this.interpretador = depurador ?
|
|
82
|
-
new interpretador_com_depuracao_1.InterpretadorComDepuracao(this.importador,
|
|
83
|
-
new interpretador_1.Interpretador(this.importador,
|
|
79
|
+
new interpretador_com_depuracao_1.InterpretadorComDepuracao(this.importador, process.cwd(), funcaoDeRetorno) :
|
|
80
|
+
new interpretador_1.Interpretador(this.importador, process.cwd(), performance, funcaoDeRetorno);
|
|
84
81
|
console.log('Usando dialeto: ÉguaP');
|
|
85
82
|
break;
|
|
86
83
|
default:
|
|
87
|
-
this.resolvedor = new resolvedor_1.Resolvedor();
|
|
88
84
|
this.lexador = new lexador_1.Lexador(performance);
|
|
89
85
|
this.avaliadorSintatico = new avaliador_sintatico_1.AvaliadorSintatico(performance);
|
|
90
86
|
this.importador = new importador_1.Importador(this.lexador, this.avaliadorSintatico, this.arquivosAbertos, this.conteudoArquivosAbertos, depurador);
|
|
91
87
|
this.interpretador = depurador ?
|
|
92
|
-
new interpretador_com_depuracao_1.InterpretadorComDepuracao(this.importador,
|
|
93
|
-
new interpretador_1.Interpretador(this.importador,
|
|
88
|
+
new interpretador_com_depuracao_1.InterpretadorComDepuracao(this.importador, process.cwd(), funcaoDeRetorno) :
|
|
89
|
+
new interpretador_1.Interpretador(this.importador, process.cwd(), performance, funcaoDeRetorno);
|
|
94
90
|
console.log('Usando dialeto: padrão');
|
|
95
91
|
break;
|
|
96
92
|
}
|
package/fontes/delegua.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delegua.js","sourceRoot":"","sources":["../../fontes/delegua.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAAyB;AACzB,4CAAgC;AAChC,iDAAqC;AACrC,gDAA0B;AAE1B,6CAA4C;AAC5C,iFAA+E;AAC/E
|
|
1
|
+
{"version":3,"file":"delegua.js","sourceRoot":"","sources":["../../fontes/delegua.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,8 +4,10 @@ import { DeleguaFuncao } from "./funcao";
|
|
|
4
4
|
import { ObjetoDeleguaClasse } from "./objeto-delegua-classe";
|
|
5
5
|
export declare class DeleguaClasse extends Chamavel {
|
|
6
6
|
nome: string;
|
|
7
|
-
superClasse:
|
|
8
|
-
metodos:
|
|
7
|
+
superClasse: DeleguaClasse;
|
|
8
|
+
metodos: {
|
|
9
|
+
[nome: string]: DeleguaFuncao;
|
|
10
|
+
};
|
|
9
11
|
constructor(nome?: string, superClasse?: any, metodos?: any);
|
|
10
12
|
encontrarMetodo(nome: string): DeleguaFuncao;
|
|
11
13
|
paraTexto(): string;
|
|
@@ -55,7 +55,7 @@ var DeleguaFuncao = /** @class */ (function (_super) {
|
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
if (this.instancia !== undefined) {
|
|
58
|
-
ambiente.valores['isto'] = this.instancia;
|
|
58
|
+
ambiente.valores['isto'] = { valor: this.instancia, tipo: "objeto" };
|
|
59
59
|
}
|
|
60
60
|
var retornoBloco = interpretador.executarBloco(this.declaracao.corpo, ambiente);
|
|
61
61
|
if (retornoBloco instanceof quebras_1.RetornoQuebra) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"funcao.js","sourceRoot":"","sources":["../../../fontes/estruturas/funcao.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,uCAAsC;AACtC,wCAAuC;AAGvC,sCAA2C;AAG3C;IAAmC,iCAAQ;IAMvC,uBAAY,IAAY,EAAE,UAAe,EAAE,SAA0C,EAAE,cAAsB;QAAlE,0BAAA,EAAA,qBAA0C;QAAE,+BAAA,EAAA,sBAAsB;QAA7G,YACI,iBAAO,SAKV;QAJG,KAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,KAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,KAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,KAAI,CAAC,cAAc,GAAG,cAAc,CAAC;;IACzC,CAAC;IAED,+BAAO,GAAP;;QACI,OAAO,CAAA,MAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,UAAU,0CAAE,MAAM,KAAI,CAAC,CAAC;IACpD,CAAC;IAED,iCAAS,GAAT;QACI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,UAAU,CAAC;QAC1C,OAAO,4BAAW,IAAI,CAAC,IAAI,MAAG,CAAC;IACnC,CAAC;IAED,8BAAM,GAAN,UAAO,aAAqC,EAAE,UAAe;QACzD,IAAI,QAAQ,GAAG,IAAI,mBAAQ,EAAE,CAAC;QAC9B,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAE5C,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,EAAE;YACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACxC,IAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAEhC,IAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;gBACtC,IAAI,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;oBACxB,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;iBAClE;gBAED,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;aAClC;SACJ;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;YAC9B,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"funcao.js","sourceRoot":"","sources":["../../../fontes/estruturas/funcao.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,uCAAsC;AACtC,wCAAuC;AAGvC,sCAA2C;AAG3C;IAAmC,iCAAQ;IAMvC,uBAAY,IAAY,EAAE,UAAe,EAAE,SAA0C,EAAE,cAAsB;QAAlE,0BAAA,EAAA,qBAA0C;QAAE,+BAAA,EAAA,sBAAsB;QAA7G,YACI,iBAAO,SAKV;QAJG,KAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,KAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,KAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,KAAI,CAAC,cAAc,GAAG,cAAc,CAAC;;IACzC,CAAC;IAED,+BAAO,GAAP;;QACI,OAAO,CAAA,MAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,UAAU,0CAAE,MAAM,KAAI,CAAC,CAAC;IACpD,CAAC;IAED,iCAAS,GAAT;QACI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,UAAU,CAAC;QAC1C,OAAO,4BAAW,IAAI,CAAC,IAAI,MAAG,CAAC;IACnC,CAAC;IAED,8BAAM,GAAN,UAAO,aAAqC,EAAE,UAAe;QACzD,IAAI,QAAQ,GAAG,IAAI,mBAAQ,EAAE,CAAC;QAC9B,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAE5C,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,EAAE;YACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACxC,IAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAEhC,IAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;gBACtC,IAAI,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;oBACxB,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;iBAClE;gBAED,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;aAClC;SACJ;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;YAC9B,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAC,CAAC;SACvE;QAED,IAAM,YAAY,GAAQ,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACvF,IAAI,YAAY,YAAY,uBAAa,EAAE;YACvC,OAAO,YAAY,CAAC,KAAK,CAAC;SAC7B;QAED,IAAI,IAAI,CAAC,cAAc,EAAG;YACtB,OAAO,IAAI,CAAC,SAAS,CAAC;SACzB;QAED,OAAO,YAAY,CAAC;IAExB,CAAC;IAED,wCAAgB,GAAhB,UAAiB,SAA8B;QAC3C,OAAO,IAAI,aAAa,CACpB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,UAAU,EACf,SAAS,EACT,IAAI,CAAC,cAAc,CACtB,CAAC;IACN,CAAC;IACL,oBAAC;AAAD,CAAC,AAlED,CAAmC,mBAAQ,GAkE1C;AAlEY,sCAAa"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RetornoImportador } from "../importador";
|
|
2
|
-
import { AvaliadorSintaticoInterface, ImportadorInterface, InterpretadorComDepuracaoInterface, InterpretadorInterface, LexadorInterface,
|
|
2
|
+
import { AvaliadorSintaticoInterface, ImportadorInterface, InterpretadorComDepuracaoInterface, InterpretadorInterface, LexadorInterface, RetornoExecucaoInterface, SimboloInterface } from "../interfaces";
|
|
3
3
|
export interface DeleguaInterface {
|
|
4
4
|
dialeto: string;
|
|
5
5
|
arquivosAbertos: {
|
|
@@ -12,7 +12,6 @@ export interface DeleguaInterface {
|
|
|
12
12
|
interpretador: InterpretadorInterface | InterpretadorComDepuracaoInterface;
|
|
13
13
|
lexador: LexadorInterface;
|
|
14
14
|
avaliadorSintatico: AvaliadorSintaticoInterface;
|
|
15
|
-
resolvedor: ResolvedorInterface;
|
|
16
15
|
importador: ImportadorInterface;
|
|
17
16
|
versao(): string;
|
|
18
17
|
carregarArquivo(caminhoRelativoArquivo: string): void;
|
|
@@ -24,4 +24,5 @@ __exportStar(require("./pilha-interface"), exports);
|
|
|
24
24
|
__exportStar(require("./resolvedor-interface"), exports);
|
|
25
25
|
__exportStar(require("./retornos/retorno-execucao-interface"), exports);
|
|
26
26
|
__exportStar(require("./simbolo-interface"), exports);
|
|
27
|
+
__exportStar(require("./variavel-interface"), exports);
|
|
27
28
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../fontes/interfaces/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kEAAgD;AAChD,sDAAoC;AACpC,yDAAuC;AACvC,0EAAwD;AACxD,4DAA0C;AAC1C,sDAAoC;AACpC,oDAAkC;AAClC,yDAAuC;AACvC,wEAAsD;AACtD,sDAAoC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../fontes/interfaces/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kEAAgD;AAChD,sDAAoC;AACpC,yDAAuC;AACvC,0EAAwD;AACxD,4DAA0C;AAC1C,sDAAoC;AACpC,oDAAkC;AAClC,yDAAuC;AACvC,wEAAsD;AACtD,sDAAoC;AACpC,uDAAqC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Ambiente } from "../ambiente";
|
|
2
|
-
import { Atribuir,
|
|
2
|
+
import { Atribuir, Literal, Super } from "../construtos";
|
|
3
3
|
import { Bloco, Classe, Continua, Declaracao, Enquanto, Escolha, Escreva, Expressao, Fazer, Funcao, Importar, Para, Retorna, Se, Sustar, Tente, Var } from "../declaracoes";
|
|
4
4
|
import { ContinuarQuebra, RetornoQuebra, SustarQuebra } from "../quebras";
|
|
5
5
|
import { PilhaEscoposExecucaoInterface } from "./pilha-escopos-execucao-interface";
|
|
@@ -8,7 +8,6 @@ import { SimboloInterface } from "./simbolo-interface";
|
|
|
8
8
|
export interface InterpretadorInterface {
|
|
9
9
|
diretorioBase: any;
|
|
10
10
|
funcaoDeRetorno: Function;
|
|
11
|
-
locais: Map<Construto, number>;
|
|
12
11
|
pilhaEscoposExecucao: PilhaEscoposExecucaoInterface;
|
|
13
12
|
visitarExpressaoLiteral(expressao: Literal): any;
|
|
14
13
|
avaliar(expressao: any): any;
|
|
@@ -2,15 +2,17 @@ import { DeleguaFuncao } from "../estruturas";
|
|
|
2
2
|
import { EscopoExecucao } from "./escopo-execucao";
|
|
3
3
|
import { PilhaInterface } from "./pilha-interface";
|
|
4
4
|
import { SimboloInterface } from "./simbolo-interface";
|
|
5
|
+
import { VariavelInterface } from "./variavel-interface";
|
|
5
6
|
export interface PilhaEscoposExecucaoInterface extends PilhaInterface<EscopoExecucao> {
|
|
6
7
|
atribuirVariavel(simbolo: SimboloInterface, valor: any): void;
|
|
7
|
-
atribuirVariavelEm(distancia: number, simbolo:
|
|
8
|
+
atribuirVariavelEm(distancia: number, simbolo: SimboloInterface, valor: any): void;
|
|
8
9
|
definirVariavel(nomeVariavel: string, valor: any): void;
|
|
9
10
|
elementos(): number;
|
|
10
11
|
naPosicao(posicao: number): EscopoExecucao;
|
|
11
|
-
obterTodasVariaveis(todasVariaveis: any[]):
|
|
12
|
-
obterVariavel(simbolo: SimboloInterface):
|
|
13
|
-
obterVariavelEm(distancia: number, nome: string):
|
|
12
|
+
obterTodasVariaveis(todasVariaveis: any[]): VariavelInterface[];
|
|
13
|
+
obterVariavel(simbolo: SimboloInterface): VariavelInterface;
|
|
14
|
+
obterVariavelEm(distancia: number, nome: string): VariavelInterface;
|
|
15
|
+
obterVariavelPorNome(nome: string): VariavelInterface;
|
|
14
16
|
obterTodasDeleguaFuncao(): {
|
|
15
17
|
[nome: string]: DeleguaFuncao;
|
|
16
18
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variavel-interface.js","sourceRoot":"","sources":["../../../fontes/interfaces/variavel-interface.ts"],"names":[],"mappings":""}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Ambiente } from '../../ambiente';
|
|
2
2
|
import { Delegua } from '../../delegua';
|
|
3
3
|
import { DeleguaFuncao } from '../../estruturas/funcao';
|
|
4
|
-
import { InterpretadorInterface, SimboloInterface } from '../../interfaces';
|
|
4
|
+
import { InterpretadorInterface, SimboloInterface, ResolvedorInterface, VariavelInterface } from '../../interfaces';
|
|
5
5
|
import { Classe, Declaracao, Enquanto, Escolha, Escreva, Expressao, Fazer, Funcao, Importar, Para, Se, Tente, Var } from '../../declaracoes';
|
|
6
|
-
import { Atribuir, Construto, Literal, Super, Variavel } from '../../construtos';
|
|
6
|
+
import { AcessoIndiceVariavel, Atribuir, Construto, Literal, Super, Variavel } from '../../construtos';
|
|
7
7
|
import { RetornoInterpretador } from '../../interfaces/retornos/retorno-interpretador';
|
|
8
8
|
import { ErroInterpretador } from '../erro-interpretador';
|
|
9
9
|
import { PilhaEscoposExecucao } from '../pilha-escopos-execucao';
|
|
@@ -14,25 +14,26 @@ import { ContinuarQuebra, RetornoQuebra, SustarQuebra } from '../../quebras';
|
|
|
14
14
|
*/
|
|
15
15
|
export declare class InterpretadorEguaClassico implements InterpretadorInterface {
|
|
16
16
|
Delegua: Delegua;
|
|
17
|
+
resolvedor: ResolvedorInterface;
|
|
17
18
|
diretorioBase: any;
|
|
18
19
|
funcaoDeRetorno: Function;
|
|
19
20
|
locais: Map<Construto, number>;
|
|
20
21
|
erros: ErroInterpretador[];
|
|
21
22
|
pilhaEscoposExecucao: PilhaEscoposExecucao;
|
|
22
|
-
constructor(Delegua: Delegua, diretorioBase: string);
|
|
23
|
+
constructor(Delegua: Delegua, resolvedor: ResolvedorInterface, diretorioBase: string);
|
|
23
24
|
visitarExpressaoLiteral(expressao: Literal): any;
|
|
24
|
-
avaliar(expressao: Construto): any;
|
|
25
|
+
avaliar(expressao: Construto): VariavelInterface | any;
|
|
25
26
|
visitarExpressaoAgrupamento(expressao: any): any;
|
|
26
27
|
eVerdadeiro(objeto: any): boolean;
|
|
27
28
|
verificarOperandoNumero(operador: any, operand: any): void;
|
|
28
29
|
visitarExpressaoUnaria(expr: any): number | boolean;
|
|
29
|
-
eIgual(esquerda: any, direita: any): boolean;
|
|
30
|
-
verificarOperandosNumeros(operador: any, direita: any, esquerda: any): void;
|
|
31
|
-
visitarExpressaoBinaria(expressao: any):
|
|
30
|
+
eIgual(esquerda: VariavelInterface | any, direita: VariavelInterface | any): boolean;
|
|
31
|
+
verificarOperandosNumeros(operador: any, direita: VariavelInterface | any, esquerda: VariavelInterface | any): void;
|
|
32
|
+
visitarExpressaoBinaria(expressao: any): any;
|
|
32
33
|
visitarExpressaoDeChamada(expressao: any): any;
|
|
33
34
|
visitarExpressaoDeAtribuicao(expressao: Atribuir): any;
|
|
34
|
-
procurarVariavel(simbolo: SimboloInterface, expressao: any):
|
|
35
|
-
visitarExpressaoDeVariavel(expressao: Variavel):
|
|
35
|
+
procurarVariavel(simbolo: SimboloInterface, expressao: any): VariavelInterface;
|
|
36
|
+
visitarExpressaoDeVariavel(expressao: Variavel): VariavelInterface;
|
|
36
37
|
visitarDeclaracaoDeExpressao(declaracao: Expressao): any;
|
|
37
38
|
visitarExpressaoLogica(expressao: any): any;
|
|
38
39
|
visitarExpressaoSe(declaracao: Se): any;
|
|
@@ -57,17 +58,25 @@ export declare class InterpretadorEguaClassico implements InterpretadorInterface
|
|
|
57
58
|
visitarExpressaoRetornar(declaracao: any): RetornoQuebra;
|
|
58
59
|
visitarExpressaoDeleguaFuncao(expressao: any): DeleguaFuncao;
|
|
59
60
|
visitarExpressaoAtribuicaoSobrescrita(expressao: any): void;
|
|
60
|
-
visitarExpressaoAcessoIndiceVariavel(expressao: any): any;
|
|
61
|
+
visitarExpressaoAcessoIndiceVariavel(expressao: AcessoIndiceVariavel | any): any;
|
|
61
62
|
visitarExpressaoDefinir(expressao: any): any;
|
|
62
63
|
visitarExpressaoFuncao(declaracao: Funcao): void;
|
|
63
64
|
visitarExpressaoClasse(declaracao: Classe): any;
|
|
64
65
|
visitarExpressaoAcessoMetodo(expressao: any): any;
|
|
65
|
-
visitarExpressaoIsto(expressao: any):
|
|
66
|
+
visitarExpressaoIsto(expressao: any): VariavelInterface;
|
|
66
67
|
visitarExpressaoDicionario(expressao: any): {};
|
|
67
68
|
visitarExpressaoVetor(expressao: any): any[];
|
|
68
69
|
visitarExpressaoSuper(expressao: Super): any;
|
|
69
70
|
paraTexto(objeto: any): any;
|
|
70
|
-
executar(declaracao: Declaracao, mostrarResultado?: boolean):
|
|
71
|
-
|
|
71
|
+
executar(declaracao: Declaracao, mostrarResultado?: boolean): any;
|
|
72
|
+
/**
|
|
73
|
+
* Executa o último escopo empilhado no topo na pilha de escopos do Interpretador.
|
|
74
|
+
* Originalmente, Égua não trabalha com uma pilha de escopos.
|
|
75
|
+
* Essa implementação é derivada do Interpretador de Delégua, mas simulando todos os
|
|
76
|
+
* comportamos do interpretador Égua original.
|
|
77
|
+
* Interpretador Égua: https://github.com/eguatech/egua/blob/master/src/interpreter.js
|
|
78
|
+
* @returns O resultado da execução do escopo, se houver.
|
|
79
|
+
*/
|
|
80
|
+
executarUltimoEscopo(): any;
|
|
72
81
|
interpretar(declaracoes: Declaracao[]): RetornoInterpretador;
|
|
73
82
|
}
|
|
@@ -43,13 +43,15 @@ var modulo_1 = require("../../estruturas/modulo");
|
|
|
43
43
|
var excecoes_1 = require("../../excecoes");
|
|
44
44
|
var pilha_escopos_execucao_1 = require("../pilha-escopos-execucao");
|
|
45
45
|
var quebras_1 = require("../../quebras");
|
|
46
|
+
var inferenciador_1 = require("../inferenciador");
|
|
46
47
|
/**
|
|
47
48
|
* O Interpretador visita todos os elementos complexos gerados pelo analisador sintático (Parser)
|
|
48
49
|
* e de fato executa a lógica de programação descrita no código.
|
|
49
50
|
*/
|
|
50
51
|
var InterpretadorEguaClassico = /** @class */ (function () {
|
|
51
|
-
function InterpretadorEguaClassico(Delegua, diretorioBase) {
|
|
52
|
+
function InterpretadorEguaClassico(Delegua, resolvedor, diretorioBase) {
|
|
52
53
|
this.Delegua = Delegua;
|
|
54
|
+
this.resolvedor = resolvedor;
|
|
53
55
|
this.diretorioBase = diretorioBase;
|
|
54
56
|
this.funcaoDeRetorno = console.log;
|
|
55
57
|
this.locais = new Map();
|
|
@@ -98,6 +100,13 @@ var InterpretadorEguaClassico = /** @class */ (function () {
|
|
|
98
100
|
return null;
|
|
99
101
|
};
|
|
100
102
|
InterpretadorEguaClassico.prototype.eIgual = function (esquerda, direita) {
|
|
103
|
+
if (esquerda.tipo) {
|
|
104
|
+
if (esquerda.tipo === "nulo" && direita.tipo && direita.tipo === "nulo")
|
|
105
|
+
return true;
|
|
106
|
+
if (esquerda.tipo === "nulo")
|
|
107
|
+
return false;
|
|
108
|
+
return esquerda.valor === direita.valor;
|
|
109
|
+
}
|
|
101
110
|
if (esquerda === null && direita === null)
|
|
102
111
|
return true;
|
|
103
112
|
if (esquerda === null)
|
|
@@ -105,75 +114,82 @@ var InterpretadorEguaClassico = /** @class */ (function () {
|
|
|
105
114
|
return esquerda === direita;
|
|
106
115
|
};
|
|
107
116
|
InterpretadorEguaClassico.prototype.verificarOperandosNumeros = function (operador, direita, esquerda) {
|
|
108
|
-
|
|
117
|
+
var tipoDireita = direita.tipo ? direita.tipo : (typeof direita === 'number' ? 'número' : String(NaN));
|
|
118
|
+
var tipoEsquerda = esquerda.tipo ? esquerda.tipo : (typeof esquerda === 'number' ? 'número' : String(NaN));
|
|
119
|
+
if (tipoDireita === "número" && tipoEsquerda === "número")
|
|
109
120
|
return;
|
|
110
121
|
throw new excecoes_1.ErroEmTempoDeExecucao(operador, 'Operadores precisam ser números.', operador.linha);
|
|
111
122
|
};
|
|
112
123
|
InterpretadorEguaClassico.prototype.visitarExpressaoBinaria = function (expressao) {
|
|
113
124
|
var esquerda = this.avaliar(expressao.esquerda);
|
|
114
125
|
var direita = this.avaliar(expressao.direita);
|
|
126
|
+
var valorEsquerdo = esquerda.hasOwnProperty('valor') ? esquerda.valor : esquerda;
|
|
127
|
+
var valorDireito = direita.hasOwnProperty('valor') ? direita.valor : direita;
|
|
128
|
+
var tipoEsquerdo = esquerda.hasOwnProperty('tipo') ? esquerda.tipo : (0, inferenciador_1.inferirTipoVariavel)(esquerda);
|
|
129
|
+
var tipoDireito = direita.hasOwnProperty('tipo') ? direita.tipo : (0, inferenciador_1.inferirTipoVariavel)(direita);
|
|
115
130
|
switch (expressao.operador.tipo) {
|
|
116
131
|
case tipos_de_simbolos_1.default.EXPONENCIACAO:
|
|
117
132
|
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
|
|
118
|
-
return Math.pow(
|
|
133
|
+
return Math.pow(valorEsquerdo, valorDireito);
|
|
119
134
|
case tipos_de_simbolos_1.default.MAIOR:
|
|
120
135
|
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
|
|
121
|
-
return Number(
|
|
136
|
+
return Number(valorEsquerdo) > Number(valorDireito);
|
|
122
137
|
case tipos_de_simbolos_1.default.MAIOR_IGUAL:
|
|
123
138
|
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
|
|
124
|
-
return Number(
|
|
139
|
+
return Number(valorEsquerdo) >= Number(valorDireito);
|
|
125
140
|
case tipos_de_simbolos_1.default.MENOR:
|
|
126
141
|
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
|
|
127
|
-
return Number(
|
|
142
|
+
return Number(valorEsquerdo) < Number(valorDireito);
|
|
128
143
|
case tipos_de_simbolos_1.default.MENOR_IGUAL:
|
|
129
144
|
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
|
|
130
|
-
return Number(
|
|
145
|
+
return Number(valorEsquerdo) <= Number(valorDireito);
|
|
131
146
|
case tipos_de_simbolos_1.default.SUBTRACAO:
|
|
132
147
|
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
|
|
133
|
-
return Number(
|
|
148
|
+
return Number(valorEsquerdo) - Number(valorDireito);
|
|
134
149
|
case tipos_de_simbolos_1.default.ADICAO:
|
|
135
|
-
if (
|
|
136
|
-
|
|
150
|
+
if (tipoEsquerdo === 'número' &&
|
|
151
|
+
tipoDireito === 'número') {
|
|
137
152
|
return Number(esquerda) + Number(direita);
|
|
138
153
|
}
|
|
139
|
-
else if (
|
|
140
|
-
|
|
154
|
+
else if (tipoEsquerdo === 'texto' &&
|
|
155
|
+
tipoDireito === 'texto') {
|
|
141
156
|
return String(esquerda) + String(direita);
|
|
142
157
|
}
|
|
143
158
|
throw new excecoes_1.ErroEmTempoDeExecucao(expressao.operador, 'Operadores precisam ser dois números ou duas strings.');
|
|
144
159
|
case tipos_de_simbolos_1.default.DIVISAO:
|
|
145
160
|
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
|
|
146
|
-
return Number(
|
|
161
|
+
return Number(valorEsquerdo) / Number(valorDireito);
|
|
147
162
|
case tipos_de_simbolos_1.default.MULTIPLICACAO:
|
|
148
163
|
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
|
|
149
|
-
return Number(
|
|
164
|
+
return Number(valorEsquerdo) * Number(valorDireito);
|
|
150
165
|
case tipos_de_simbolos_1.default.MODULO:
|
|
151
166
|
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
|
|
152
|
-
return Number(
|
|
167
|
+
return Number(valorEsquerdo) % Number(valorDireito);
|
|
153
168
|
case tipos_de_simbolos_1.default.BIT_AND:
|
|
154
169
|
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
|
|
155
|
-
return Number(
|
|
170
|
+
return Number(valorEsquerdo) & Number(valorDireito);
|
|
156
171
|
case tipos_de_simbolos_1.default.BIT_XOR:
|
|
157
172
|
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
|
|
158
|
-
return Number(
|
|
173
|
+
return Number(valorEsquerdo) ^ Number(valorDireito);
|
|
159
174
|
case tipos_de_simbolos_1.default.BIT_OR:
|
|
160
175
|
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
|
|
161
|
-
return Number(
|
|
176
|
+
return Number(valorEsquerdo) | Number(valorDireito);
|
|
162
177
|
case tipos_de_simbolos_1.default.MENOR_MENOR:
|
|
163
178
|
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
|
|
164
|
-
return Number(
|
|
179
|
+
return Number(valorEsquerdo) << Number(valorDireito);
|
|
165
180
|
case tipos_de_simbolos_1.default.MAIOR_MAIOR:
|
|
166
181
|
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
|
|
167
|
-
return Number(
|
|
182
|
+
return Number(valorEsquerdo) >> Number(valorDireito);
|
|
168
183
|
case tipos_de_simbolos_1.default.DIFERENTE:
|
|
169
|
-
return !this.eIgual(
|
|
184
|
+
return !this.eIgual(valorEsquerdo, valorDireito);
|
|
170
185
|
case tipos_de_simbolos_1.default.IGUAL_IGUAL:
|
|
171
|
-
return this.eIgual(
|
|
186
|
+
return this.eIgual(valorEsquerdo, valorDireito);
|
|
172
187
|
}
|
|
173
188
|
return null;
|
|
174
189
|
};
|
|
175
190
|
InterpretadorEguaClassico.prototype.visitarExpressaoDeChamada = function (expressao) {
|
|
176
|
-
var
|
|
191
|
+
var variavelEntidadeChamada = this.avaliar(expressao.entidadeChamada);
|
|
192
|
+
var entidadeChamada = variavelEntidadeChamada.valor ? variavelEntidadeChamada.valor : variavelEntidadeChamada;
|
|
177
193
|
var argumentos = [];
|
|
178
194
|
for (var i = 0; i < expressao.argumentos.length; i++) {
|
|
179
195
|
argumentos.push(this.avaliar(expressao.argumentos[i]));
|
|
@@ -186,8 +202,8 @@ var InterpretadorEguaClassico = /** @class */ (function () {
|
|
|
186
202
|
parametros = entidadeChamada.declaracao.parametros;
|
|
187
203
|
}
|
|
188
204
|
else if (entidadeChamada instanceof delegua_classe_1.DeleguaClasse) {
|
|
189
|
-
parametros = entidadeChamada.metodos.
|
|
190
|
-
? entidadeChamada.metodos.
|
|
205
|
+
parametros = entidadeChamada.metodos.inicializacao
|
|
206
|
+
? entidadeChamada.metodos.inicializacao.declaracao.parametros
|
|
191
207
|
: [];
|
|
192
208
|
}
|
|
193
209
|
else {
|
|
@@ -256,18 +272,16 @@ var InterpretadorEguaClassico = /** @class */ (function () {
|
|
|
256
272
|
};
|
|
257
273
|
InterpretadorEguaClassico.prototype.visitarExpressaoSe = function (declaracao) {
|
|
258
274
|
if (this.eVerdadeiro(this.avaliar(declaracao.condicao))) {
|
|
259
|
-
this.executar(declaracao.caminhoEntao);
|
|
260
|
-
return null;
|
|
275
|
+
return this.executar(declaracao.caminhoEntao);
|
|
261
276
|
}
|
|
262
277
|
for (var i = 0; i < declaracao.caminhosSeSenao.length; i++) {
|
|
263
278
|
var atual = declaracao.caminhosSeSenao[i];
|
|
264
279
|
if (this.eVerdadeiro(this.avaliar(atual.condicao))) {
|
|
265
|
-
this.executar(atual.caminho);
|
|
266
|
-
return null;
|
|
280
|
+
return this.executar(atual.caminho);
|
|
267
281
|
}
|
|
268
282
|
}
|
|
269
283
|
if (declaracao.caminhoSenao !== null) {
|
|
270
|
-
this.executar(declaracao.caminhoSenao);
|
|
284
|
+
return this.executar(declaracao.caminhoSenao);
|
|
271
285
|
}
|
|
272
286
|
return null;
|
|
273
287
|
};
|
|
@@ -426,8 +440,7 @@ var InterpretadorEguaClassico = /** @class */ (function () {
|
|
|
426
440
|
return this.executarUltimoEscopo();
|
|
427
441
|
};
|
|
428
442
|
InterpretadorEguaClassico.prototype.visitarExpressaoBloco = function (declaracao) {
|
|
429
|
-
this.executarBloco(declaracao.declaracoes);
|
|
430
|
-
return null;
|
|
443
|
+
return this.executarBloco(declaracao.declaracoes);
|
|
431
444
|
};
|
|
432
445
|
InterpretadorEguaClassico.prototype.visitarExpressaoVar = function (declaracao) {
|
|
433
446
|
var valor = null;
|
|
@@ -479,7 +492,8 @@ var InterpretadorEguaClassico = /** @class */ (function () {
|
|
|
479
492
|
}
|
|
480
493
|
};
|
|
481
494
|
InterpretadorEguaClassico.prototype.visitarExpressaoAcessoIndiceVariavel = function (expressao) {
|
|
482
|
-
var
|
|
495
|
+
var variavelObjeto = this.avaliar(expressao.entidadeChamada);
|
|
496
|
+
var objeto = variavelObjeto.valor ? variavelObjeto.valor : variavelObjeto;
|
|
483
497
|
var indice = this.avaliar(expressao.indice);
|
|
484
498
|
if (Array.isArray(objeto)) {
|
|
485
499
|
if (!Number.isInteger(indice)) {
|
|
@@ -542,7 +556,8 @@ var InterpretadorEguaClassico = /** @class */ (function () {
|
|
|
542
556
|
InterpretadorEguaClassico.prototype.visitarExpressaoClasse = function (declaracao) {
|
|
543
557
|
var superClasse = null;
|
|
544
558
|
if (declaracao.superClasse !== null) {
|
|
545
|
-
|
|
559
|
+
var variavelSuperClasse = this.avaliar(declaracao.superClasse);
|
|
560
|
+
superClasse = variavelSuperClasse.valor;
|
|
546
561
|
if (!(superClasse instanceof delegua_classe_1.DeleguaClasse)) {
|
|
547
562
|
throw new excecoes_1.ErroEmTempoDeExecucao(declaracao.superClasse.nome, 'SuperClasse precisa ser uma classe.', declaracao.linha);
|
|
548
563
|
}
|
|
@@ -559,16 +574,17 @@ var InterpretadorEguaClassico = /** @class */ (function () {
|
|
|
559
574
|
var funcao = new funcao_1.DeleguaFuncao(metodoAtual.simbolo.lexema, metodoAtual.funcao, undefined, eInicializador);
|
|
560
575
|
metodos[metodoAtual.simbolo.lexema] = funcao;
|
|
561
576
|
}
|
|
562
|
-
var
|
|
577
|
+
var deleguaClasse = new delegua_classe_1.DeleguaClasse(declaracao.simbolo.lexema, superClasse, metodos);
|
|
563
578
|
// TODO: Recolocar isso se for necessário.
|
|
564
579
|
/* if (superClasse !== null) {
|
|
565
580
|
this.ambiente = this.ambiente.enclosing;
|
|
566
581
|
} */
|
|
567
|
-
this.pilhaEscoposExecucao.atribuirVariavel(declaracao.simbolo,
|
|
582
|
+
this.pilhaEscoposExecucao.atribuirVariavel(declaracao.simbolo, deleguaClasse);
|
|
568
583
|
return null;
|
|
569
584
|
};
|
|
570
585
|
InterpretadorEguaClassico.prototype.visitarExpressaoAcessoMetodo = function (expressao) {
|
|
571
|
-
var
|
|
586
|
+
var variavelObjeto = this.avaliar(expressao.objeto);
|
|
587
|
+
var objeto = variavelObjeto === null || variavelObjeto === void 0 ? void 0 : variavelObjeto.valor;
|
|
572
588
|
if (objeto instanceof objeto_delegua_classe_1.ObjetoDeleguaClasse) {
|
|
573
589
|
return objeto.get(expressao.simbolo) || null;
|
|
574
590
|
}
|
|
@@ -601,11 +617,11 @@ var InterpretadorEguaClassico = /** @class */ (function () {
|
|
|
601
617
|
var distancia = this.locais.get(expressao);
|
|
602
618
|
var superClasse = this.pilhaEscoposExecucao.obterVariavelEm(distancia, 'super');
|
|
603
619
|
var objeto = this.pilhaEscoposExecucao.obterVariavelEm(distancia - 1, 'isto');
|
|
604
|
-
var metodo = superClasse.encontrarMetodo(expressao.metodo.lexema);
|
|
620
|
+
var metodo = superClasse.valor.encontrarMetodo(expressao.metodo.lexema);
|
|
605
621
|
if (metodo === undefined) {
|
|
606
622
|
throw new excecoes_1.ErroEmTempoDeExecucao(expressao.metodo, 'Método chamado indefinido.', expressao.linha);
|
|
607
623
|
}
|
|
608
|
-
return metodo.definirInstancia(objeto);
|
|
624
|
+
return metodo.definirInstancia(objeto.valor);
|
|
609
625
|
};
|
|
610
626
|
InterpretadorEguaClassico.prototype.paraTexto = function (objeto) {
|
|
611
627
|
if (objeto === null)
|
|
@@ -631,14 +647,24 @@ var InterpretadorEguaClassico = /** @class */ (function () {
|
|
|
631
647
|
};
|
|
632
648
|
InterpretadorEguaClassico.prototype.executar = function (declaracao, mostrarResultado) {
|
|
633
649
|
if (mostrarResultado === void 0) { mostrarResultado = false; }
|
|
634
|
-
declaracao.aceitar(this);
|
|
650
|
+
return declaracao.aceitar(this);
|
|
635
651
|
};
|
|
652
|
+
/**
|
|
653
|
+
* Executa o último escopo empilhado no topo na pilha de escopos do Interpretador.
|
|
654
|
+
* Originalmente, Égua não trabalha com uma pilha de escopos.
|
|
655
|
+
* Essa implementação é derivada do Interpretador de Delégua, mas simulando todos os
|
|
656
|
+
* comportamos do interpretador Égua original.
|
|
657
|
+
* Interpretador Égua: https://github.com/eguatech/egua/blob/master/src/interpreter.js
|
|
658
|
+
* @returns O resultado da execução do escopo, se houver.
|
|
659
|
+
*/
|
|
636
660
|
InterpretadorEguaClassico.prototype.executarUltimoEscopo = function () {
|
|
637
661
|
var ultimoEscopo = this.pilhaEscoposExecucao.topoDaPilha();
|
|
638
662
|
try {
|
|
639
|
-
|
|
640
|
-
|
|
663
|
+
var retornoExecucao = void 0;
|
|
664
|
+
for (; !(retornoExecucao instanceof quebras_1.Quebra) && ultimoEscopo.declaracaoAtual < ultimoEscopo.declaracoes.length; ultimoEscopo.declaracaoAtual++) {
|
|
665
|
+
retornoExecucao = this.executar(ultimoEscopo.declaracoes[ultimoEscopo.declaracaoAtual]);
|
|
641
666
|
}
|
|
667
|
+
return retornoExecucao;
|
|
642
668
|
}
|
|
643
669
|
finally {
|
|
644
670
|
this.pilhaEscoposExecucao.removerUltimo();
|
|
@@ -646,7 +672,7 @@ var InterpretadorEguaClassico = /** @class */ (function () {
|
|
|
646
672
|
};
|
|
647
673
|
InterpretadorEguaClassico.prototype.interpretar = function (declaracoes) {
|
|
648
674
|
this.erros = [];
|
|
649
|
-
var retornoResolvedor = this.
|
|
675
|
+
var retornoResolvedor = this.resolvedor.resolver(declaracoes);
|
|
650
676
|
this.locais = retornoResolvedor.locais;
|
|
651
677
|
var escopoExecucao = {
|
|
652
678
|
declaracoes: declaracoes,
|