@designliquido/delegua-node 0.0.0
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 +65 -0
- package/bin/delegua +3 -0
- package/bin/delegua.cmd +1 -0
- package/bin/package.json +33 -0
- package/execucao.d.ts +1 -0
- package/execucao.js +43 -0
- package/execucao.js.map +1 -0
- package/fontes/delegua.d.ts +86 -0
- package/fontes/delegua.js +372 -0
- package/fontes/delegua.js.map +1 -0
- package/fontes/interpretador/index.d.ts +0 -0
- package/fontes/interpretador/index.js +1 -0
- package/fontes/interpretador/index.js.map +1 -0
- package/fontes/interpretador/interpretador.d.ts +17 -0
- package/fontes/interpretador/interpretador.js +80 -0
- package/fontes/interpretador/interpretador.js.map +1 -0
- package/fontes/interpretador/mecanismo-importacao-bibliotecas.d.ts +2 -0
- package/fontes/interpretador/mecanismo-importacao-bibliotecas.js +132 -0
- package/fontes/interpretador/mecanismo-importacao-bibliotecas.js.map +1 -0
- package/package.json +33 -0
package/README.md
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# delegua-node
|
|
2
|
+
|
|
3
|
+
Versão de Delégua com suporte a importação de pacotes pelo ecossistema do Node.js.
|
|
4
|
+
|
|
5
|
+
## Motivação
|
|
6
|
+
|
|
7
|
+
Em versões anteriores, o suporte ao ecossistema Node vinha embutido no pacote do núcleo da linguagem. Isso virou um problema quando tentamos importar o pacote numa aplicação com [Webpack](https://webpack.js.org/).
|
|
8
|
+
|
|
9
|
+
Como o Webpack tenta ler todas as referências de todos os módulos recursivamente, independente se estamos importando um módulo ou vários, há problemas quando tentamos importar `node:child_process` na parte de navegador de internet e as aplicações falham.
|
|
10
|
+
|
|
11
|
+
## Instalação
|
|
12
|
+
|
|
13
|
+
Se quiser instalar no seu computador,
|
|
14
|
+
[você deve ter antes o Node.js instalado em seu ambiente](https://dicasdejavascript.com.br/instalacao-do-nodejs-e-npm-no-windows-passo-a-passo).
|
|
15
|
+
|
|
16
|
+
Com o Node.js instalado, execute o seguinte comando em um _prompt_ de comando (Terminal, PowerShell ou `cmd` no Windows, Terminal ou `sh` em Mac e Linux):
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
npm install -g delegua
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Usando como LAIR (Leia-Avalie-Imprima-Repita) em console
|
|
23
|
+
|
|
24
|
+
Feita a instalação no seu ambiente, execute o seguinte comando:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
delegua
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Você terá um interpretador Delégua que avalia expressões linha a linha.
|
|
31
|
+
|
|
32
|
+
Um exemplo de uso é como uma calculadora:
|
|
33
|
+
|
|
34
|
+
```js
|
|
35
|
+
delegua> 2 + 2
|
|
36
|
+
4
|
|
37
|
+
|
|
38
|
+
delegua> 2 * 3
|
|
39
|
+
6
|
|
40
|
+
|
|
41
|
+
delegua> 2 ** 10
|
|
42
|
+
1024
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Para finalizar a execução do interpretador LAIR Delégua, use o atalho <key>Ctrl</key> + <key>C</key> (todos os sistemas operacionais).
|
|
46
|
+
|
|
47
|
+
### Executando arquivos
|
|
48
|
+
|
|
49
|
+
É possível usar o interpretador com outros dialetos, como Égua.
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
delegua --dialeto egua
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
[Veja aqui todos os dialetos suportados](https://github.com/DesignLiquido/delegua/wiki/Dialetos).
|
|
56
|
+
|
|
57
|
+
Se não quiser instalar as bibliotecas que acompanham Delégua, apenas [o núcleo da linguagem](https://github.com/DesignLiquido/delegua) pode ser instalado:
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
npm install -g @designliquido/delegua
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Tradução para outras linguagens
|
|
64
|
+
|
|
65
|
+
Delégua traduz para JavaScript e vice-versa. [Mais informações aqui](https://github.com/DesignLiquido/delegua/wiki/Tradu%C3%A7%C3%A3o-para-outras-linguagens).
|
package/bin/delegua
ADDED
package/bin/delegua.cmd
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
node ..\execucao.js %*
|
package/bin/package.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@designliquido/delegua-node",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"description": "Linguagem Delégua com capacidades para ecossistema Node.js.",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"empacotar": "rimraf ./dist && tsc && copyfiles -V ./bin/delegua ./bin/delegua.cmd ./dist && copyfiles -V ./package.json ./dist/bin && copyfiles -V ./README.md ./dist",
|
|
7
|
+
"testes-unitarios": "jest --coverage",
|
|
8
|
+
"testes:egua": "./bin/delegua-ts exemplos/dialetos/egua-classico/testes.egua",
|
|
9
|
+
"testes:delegua:bhaskara": "./bin/delegua-ts exemplos/dialetos/egua-classico/bhaskara.egua",
|
|
10
|
+
"testes:delegua:fibonacci": "./bin/delegua-ts exemplos/dialetos/egua-classico/fibonacci.egua",
|
|
11
|
+
"testes:egua-classico": "./bin/delegua-ts --dialeto egua exemplos/dialetos/egua-classico/testes.egua"
|
|
12
|
+
},
|
|
13
|
+
"dependencies": {
|
|
14
|
+
"@designliquido/delegua": "^0.13.2",
|
|
15
|
+
"chalk": "4.1.2",
|
|
16
|
+
"commander": "^9.4.1"
|
|
17
|
+
},
|
|
18
|
+
"devDependencies": {
|
|
19
|
+
"@designliquido/delegua-estatistica": "^0.0.5",
|
|
20
|
+
"@designliquido/delegua-fisica": "^0.0.2",
|
|
21
|
+
"@designliquido/delegua-json": "^0.0.0",
|
|
22
|
+
"@designliquido/delegua-matematica": "^0.2.0",
|
|
23
|
+
"@designliquido/delegua-tempo": "^0.0.1",
|
|
24
|
+
"@types/jest": "^29.4.0",
|
|
25
|
+
"@types/node": "^18.11.19",
|
|
26
|
+
"copyfiles": "^2.4.1",
|
|
27
|
+
"jest": "^29.4.1",
|
|
28
|
+
"rimraf": "^4.1.2",
|
|
29
|
+
"ts-jest": "^29.0.5",
|
|
30
|
+
"ts-node": "^10.9.1",
|
|
31
|
+
"typescript": "^4.9.5"
|
|
32
|
+
}
|
|
33
|
+
}
|
package/execucao.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/execucao.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const delegua_1 = require("./fontes/delegua");
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const principal = () => {
|
|
6
|
+
const analisadorArgumentos = new commander_1.Command();
|
|
7
|
+
let codigoOuNomeArquivo;
|
|
8
|
+
analisadorArgumentos
|
|
9
|
+
.option('-c, --codigo <codigo>', 'Código a ser avaliado.', '')
|
|
10
|
+
.option('-d, --dialeto <dialeto>', 'Dialeto a ser usado. Padrão: delegua.', 'delegua')
|
|
11
|
+
.option('-D, --depurador', 'Habilita o depurador, permitindo depuração em um ambiente como o VSCode. Sempre desabilitada em modo LAIR.', false)
|
|
12
|
+
.option('-p, --performance', 'Visualizar indicadores de performance. Desabilitado por padrão.', false)
|
|
13
|
+
.option('-s, --saida', 'Gera arquivo de saida ao traduzir arquivo.', false)
|
|
14
|
+
.option('-t, --traduzir <linguagem>', 'Traduz o código do arquivo passado como parâmetro.')
|
|
15
|
+
.argument('[arquivos...]', 'Nomes dos arquivos (opcional)')
|
|
16
|
+
.action((argumentos) => {
|
|
17
|
+
if (argumentos.length > 0) {
|
|
18
|
+
codigoOuNomeArquivo = argumentos[0];
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
analisadorArgumentos.parse();
|
|
22
|
+
const opcoes = analisadorArgumentos.opts();
|
|
23
|
+
const delegua = new delegua_1.Delegua(opcoes.dialeto, opcoes.performance, codigoOuNomeArquivo ? opcoes.depurador : false, opcoes.traduzir);
|
|
24
|
+
if (opcoes.codigo) {
|
|
25
|
+
delegua.executarCodigoComoArgumento(opcoes.codigo || codigoOuNomeArquivo);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
if (codigoOuNomeArquivo) {
|
|
29
|
+
if (opcoes.traduzir) {
|
|
30
|
+
const extensaoSaida = opcoes.traduzir;
|
|
31
|
+
delegua.traduzirArquivo(codigoOuNomeArquivo, opcoes.saida, extensaoSaida);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
delegua.carregarArquivo(codigoOuNomeArquivo);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
delegua.iniciarLairDelegua();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
principal();
|
|
43
|
+
//# sourceMappingURL=execucao.js.map
|
package/execucao.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execucao.js","sourceRoot":"","sources":["../execucao.ts"],"names":[],"mappings":";;AAAA,8CAA2C;AAC3C,yCAAoC;AAEpC,MAAM,SAAS,GAAG,GAAG,EAAE;IACnB,MAAM,oBAAoB,GAAG,IAAI,mBAAO,EAAE,CAAC;IAC3C,IAAI,mBAA2B,CAAC;IAEhC,oBAAoB;SACf,MAAM,CACH,uBAAuB,EACvB,wBAAwB,EACxB,EAAE,CACL;SACA,MAAM,CACH,yBAAyB,EACzB,uCAAuC,EACvC,SAAS,CACZ;SACA,MAAM,CACH,iBAAiB,EACjB,4GAA4G,EAC5G,KAAK,CACR;SACA,MAAM,CACH,mBAAmB,EACnB,iEAAiE,EACjE,KAAK,CACR;SACA,MAAM,CACH,aAAa,EACb,4CAA4C,EAC5C,KAAK,CACR;SACA,MAAM,CACH,4BAA4B,EAC5B,oDAAoD,CACvD;SACA,QAAQ,CAAC,eAAe,EAAE,+BAA+B,CAAC;SAC1D,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE;QACnB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACvB,mBAAmB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;SACvC;IACL,CAAC,CAAC,CAAC;IAEP,oBAAoB,CAAC,KAAK,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,EAAE,CAAC;IAE3C,MAAM,OAAO,GAAG,IAAI,iBAAO,CACvB,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,WAAW,EAClB,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAC9C,MAAM,CAAC,QAAQ,CAClB,CAAC;IAEF,IAAI,MAAM,CAAC,MAAM,EAAE;QACf,OAAO,CAAC,2BAA2B,CAAC,MAAM,CAAC,MAAM,IAAI,mBAAmB,CAAC,CAAC;KAC7E;SAAM;QACH,IAAI,mBAAmB,EAAE;YACrB,IAAI,MAAM,CAAC,QAAQ,EAAE;gBACjB,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC;gBACtC,OAAO,CAAC,eAAe,CAAC,mBAAmB,EAAE,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;aAC7E;iBAAM;gBACH,OAAO,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;aAChD;SACJ;aAAM;YACH,OAAO,CAAC,kBAAkB,EAAE,CAAC;SAChC;KACJ;AACL,CAAC,CAAC;AAEF,SAAS,EAAE,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { AvaliadorSintaticoInterface, DeleguaInterface, InterpretadorInterface, LexadorInterface, RetornoExecucaoInterface, SimboloInterface } from '@designliquido/delegua/fontes/interfaces';
|
|
2
|
+
import { ServidorDepuracao } from '@designliquido/delegua/fontes/depuracao';
|
|
3
|
+
import { ImportadorInterface } from '@designliquido/delegua/fontes/interfaces/importador-interface';
|
|
4
|
+
import { RetornoImportador } from '@designliquido/delegua/fontes/importador';
|
|
5
|
+
import { TradutorJavaScript, TradutorReversoJavaScript } from '@designliquido/delegua/fontes/tradutores';
|
|
6
|
+
/**
|
|
7
|
+
* O núcleo da linguagem.
|
|
8
|
+
*
|
|
9
|
+
* Responsável por avaliar a entrada fornecida, entender o código e executá-lo.
|
|
10
|
+
*/
|
|
11
|
+
export declare class Delegua implements DeleguaInterface {
|
|
12
|
+
dialeto: string;
|
|
13
|
+
dialetos: {
|
|
14
|
+
[identificador: string]: string;
|
|
15
|
+
};
|
|
16
|
+
arquivosAbertos: {
|
|
17
|
+
[identificador: string]: string;
|
|
18
|
+
};
|
|
19
|
+
conteudoArquivosAbertos: {
|
|
20
|
+
[identificador: string]: string[];
|
|
21
|
+
};
|
|
22
|
+
interpretador: InterpretadorInterface;
|
|
23
|
+
lexador: LexadorInterface;
|
|
24
|
+
avaliadorSintatico: AvaliadorSintaticoInterface;
|
|
25
|
+
importador: ImportadorInterface;
|
|
26
|
+
tradutorJavaScript: TradutorJavaScript;
|
|
27
|
+
tradutorReversoJavascript: TradutorReversoJavaScript;
|
|
28
|
+
funcaoDeRetorno: Function;
|
|
29
|
+
modoDepuracao: boolean;
|
|
30
|
+
servidorDepuracao: ServidorDepuracao;
|
|
31
|
+
constructor(dialeto?: string, performance?: boolean, depurador?: boolean, traduzir?: any, funcaoDeRetorno?: Function);
|
|
32
|
+
versao(): string;
|
|
33
|
+
/**
|
|
34
|
+
* LAIR (Leia-Avalie-Imprima-Repita) é o modo em que Delégua executa em modo console,
|
|
35
|
+
* ou seja, esperando como entrada linhas de código fornecidas pelo usuário.
|
|
36
|
+
*/
|
|
37
|
+
iniciarLairDelegua(): void;
|
|
38
|
+
/**
|
|
39
|
+
* Executa uma linha. Usado pelo modo LAIR e pelo servidor de depuração, quando recebe um comando 'avaliar'.
|
|
40
|
+
* @param linha A linha a ser avaliada.
|
|
41
|
+
* @returns O resultado da execução, com os retornos e respectivos erros, se houverem.
|
|
42
|
+
*/
|
|
43
|
+
executarUmaLinha(linha: string): Promise<RetornoExecucaoInterface>;
|
|
44
|
+
/**
|
|
45
|
+
* Instancia um servidor de depuração, normalmente recebendo requisições na porta 7777.
|
|
46
|
+
*/
|
|
47
|
+
iniciarDepuracao(): void;
|
|
48
|
+
/**
|
|
49
|
+
* Pede ao servidor de depuração que finalize a execução.
|
|
50
|
+
* Se não for feito, o servidor de depuração mantém um _stream_ aberto e nunca finaliza.
|
|
51
|
+
* Mais informações: https://stackoverflow.com/a/47456805/1314276
|
|
52
|
+
*/
|
|
53
|
+
finalizarDepuracao(): void;
|
|
54
|
+
/**
|
|
55
|
+
* Verifica erros nas etapas de lexação e avaliação sintática.
|
|
56
|
+
* @param retornoImportador Um objeto que implementa a interface RetornoImportador.
|
|
57
|
+
* @returns Verdadeiro se há erros. Falso caso contrário.
|
|
58
|
+
*/
|
|
59
|
+
afericaoErros(retornoImportador: RetornoImportador): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Realiza a tradução do arquivo passado como parâmetro no comando de execução.
|
|
62
|
+
* @param caminhoRelativoArquivo O caminho do arquivo.
|
|
63
|
+
* @param gerarArquivoSaida Se o resultado da tradução deve ser escrito em arquivo.
|
|
64
|
+
* Se verdadeiro, os arquivos de saída são escritos no mesmo diretório
|
|
65
|
+
* do arquivo passado no primeiro parâmetro.
|
|
66
|
+
*/
|
|
67
|
+
traduzirArquivo(caminhoRelativoArquivo: string, gerarArquivoSaida: boolean, extensaoArquivoSaida: string): any;
|
|
68
|
+
executarCodigoComoArgumento(codigo: string): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* Execução por arquivo.
|
|
71
|
+
* @param caminhoRelativoArquivo O caminho no sistema operacional do arquivo a ser aberto.
|
|
72
|
+
*/
|
|
73
|
+
carregarArquivo(caminhoRelativoArquivo: string): Promise<any>;
|
|
74
|
+
/**
|
|
75
|
+
* A execução do código de fato.
|
|
76
|
+
* @param retornoImportador Dados retornados do Importador, como o retorno do Lexador, do Avaliador
|
|
77
|
+
* Sintático e respectivos erros.
|
|
78
|
+
* @param manterAmbiente Indicação se ambiente deve ser mantido ou não. Normalmente verdadeiro
|
|
79
|
+
* para LAIR, falso para execução por arquivo.
|
|
80
|
+
* @returns Um objeto com o resultado da execução.
|
|
81
|
+
*/
|
|
82
|
+
executar(retornoImportador: RetornoImportador, manterAmbiente?: boolean): Promise<RetornoExecucaoInterface>;
|
|
83
|
+
reportar(linha: number, onde: any, mensagem: string): void;
|
|
84
|
+
erro(simbolo: SimboloInterface, mensagemDeErro: string): void;
|
|
85
|
+
erroEmTempoDeExecucao(erro: any): void;
|
|
86
|
+
}
|
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.Delegua = void 0;
|
|
30
|
+
const sistemaArquivos = __importStar(require("node:fs"));
|
|
31
|
+
const caminho = __importStar(require("node:path"));
|
|
32
|
+
const readline = __importStar(require("node:readline"));
|
|
33
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
34
|
+
const lexador_1 = require("@designliquido/delegua/fontes/lexador/lexador");
|
|
35
|
+
const avaliador_sintatico_1 = require("@designliquido/delegua/fontes/avaliador-sintatico/avaliador-sintatico");
|
|
36
|
+
const interpretador_1 = require("./interpretador/interpretador");
|
|
37
|
+
const delegua_1 = __importDefault(require("@designliquido/delegua/fontes/tipos-de-simbolos/delegua"));
|
|
38
|
+
const interpretador_egua_classico_1 = require("@designliquido/delegua/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico");
|
|
39
|
+
const lexador_egua_classico_1 = require("@designliquido/delegua/fontes/lexador/dialetos/lexador-egua-classico");
|
|
40
|
+
const lexador_eguap_1 = require("@designliquido/delegua/fontes/lexador/dialetos/lexador-eguap");
|
|
41
|
+
const avaliador_sintatico_eguap_1 = require("@designliquido/delegua/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-eguap");
|
|
42
|
+
const dialetos_1 = require("@designliquido/delegua/fontes/avaliador-sintatico/dialetos");
|
|
43
|
+
const depuracao_1 = require("@designliquido/delegua/fontes/depuracao");
|
|
44
|
+
const importador_1 = require("@designliquido/delegua/fontes/importador");
|
|
45
|
+
const interpretador_com_depuracao_1 = require("@designliquido/delegua/fontes/interpretador/interpretador-com-depuracao");
|
|
46
|
+
const lexador_visualg_1 = require("@designliquido/delegua/fontes/lexador/dialetos/lexador-visualg");
|
|
47
|
+
const avaliador_sintatico_visualg_1 = require("@designliquido/delegua/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-visualg");
|
|
48
|
+
const lexador_birl_1 = require("@designliquido/delegua/fontes/lexador/dialetos/lexador-birl");
|
|
49
|
+
const avaliador_sintatico_birl_1 = require("@designliquido/delegua/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl");
|
|
50
|
+
const tradutores_1 = require("@designliquido/delegua/fontes/tradutores");
|
|
51
|
+
const interpretador_visualg_1 = require("@designliquido/delegua/fontes/interpretador/dialetos/visualg/interpretador-visualg");
|
|
52
|
+
const dialetos_2 = require("@designliquido/delegua/fontes/interpretador/dialetos");
|
|
53
|
+
const lexador_portugol_studio_1 = require("@designliquido/delegua/fontes/lexador/dialetos/lexador-portugol-studio");
|
|
54
|
+
const avaliador_sintatico_portugol_studio_1 = require("@designliquido/delegua/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-studio");
|
|
55
|
+
/**
|
|
56
|
+
* O núcleo da linguagem.
|
|
57
|
+
*
|
|
58
|
+
* Responsável por avaliar a entrada fornecida, entender o código e executá-lo.
|
|
59
|
+
*/
|
|
60
|
+
class Delegua {
|
|
61
|
+
constructor(dialeto = 'delegua', performance = false, depurador = false, traduzir = null, funcaoDeRetorno = null) {
|
|
62
|
+
this.dialetos = {
|
|
63
|
+
birl: 'BIRL',
|
|
64
|
+
delegua: 'padrão',
|
|
65
|
+
egua: 'Égua',
|
|
66
|
+
eguap: 'ÉguaP',
|
|
67
|
+
'portugol-studio': 'Portugol Studio',
|
|
68
|
+
visualg: 'VisuAlg',
|
|
69
|
+
};
|
|
70
|
+
this.arquivosAbertos = {};
|
|
71
|
+
this.conteudoArquivosAbertos = {};
|
|
72
|
+
this.dialeto = dialeto;
|
|
73
|
+
this.funcaoDeRetorno = funcaoDeRetorno || console.log;
|
|
74
|
+
this.modoDepuracao = depurador;
|
|
75
|
+
switch (this.dialeto) {
|
|
76
|
+
case 'birl':
|
|
77
|
+
this.lexador = new lexador_birl_1.LexadorBirl();
|
|
78
|
+
this.avaliadorSintatico = new avaliador_sintatico_birl_1.AvaliadorSintaticoBirl();
|
|
79
|
+
this.importador = new importador_1.Importador(this.lexador, this.avaliadorSintatico, this.arquivosAbertos, this.conteudoArquivosAbertos, depurador);
|
|
80
|
+
this.interpretador = new interpretador_1.Interpretador(this.importador, process.cwd(), false, console.log);
|
|
81
|
+
break;
|
|
82
|
+
case 'egua':
|
|
83
|
+
if (depurador) {
|
|
84
|
+
throw new Error('Dialeto ' + this.dialeto + ' não suporta depuração.');
|
|
85
|
+
}
|
|
86
|
+
this.lexador = new lexador_egua_classico_1.LexadorEguaClassico();
|
|
87
|
+
this.avaliadorSintatico = new dialetos_1.AvaliadorSintaticoEguaClassico();
|
|
88
|
+
this.importador = new importador_1.Importador(this.lexador, this.avaliadorSintatico, this.arquivosAbertos, this.conteudoArquivosAbertos, depurador);
|
|
89
|
+
this.interpretador = new interpretador_egua_classico_1.InterpretadorEguaClassico(this, process.cwd());
|
|
90
|
+
break;
|
|
91
|
+
case 'eguap':
|
|
92
|
+
this.lexador = new lexador_eguap_1.LexadorEguaP();
|
|
93
|
+
this.avaliadorSintatico = new avaliador_sintatico_eguap_1.AvaliadorSintaticoEguaP();
|
|
94
|
+
this.importador = new importador_1.Importador(this.lexador, this.avaliadorSintatico, this.arquivosAbertos, this.conteudoArquivosAbertos, depurador);
|
|
95
|
+
this.interpretador = depurador
|
|
96
|
+
? new interpretador_com_depuracao_1.InterpretadorComDepuracao(this.importador, process.cwd(), funcaoDeRetorno)
|
|
97
|
+
: new interpretador_1.Interpretador(this.importador, process.cwd(), performance, funcaoDeRetorno);
|
|
98
|
+
break;
|
|
99
|
+
case 'portugol-studio':
|
|
100
|
+
this.lexador = new lexador_portugol_studio_1.LexadorPortugolStudio();
|
|
101
|
+
this.avaliadorSintatico = new avaliador_sintatico_portugol_studio_1.AvaliadorSintaticoPortugolStudio();
|
|
102
|
+
this.importador = new importador_1.Importador(this.lexador, this.avaliadorSintatico, this.arquivosAbertos, this.conteudoArquivosAbertos, depurador);
|
|
103
|
+
this.interpretador = depurador
|
|
104
|
+
? new interpretador_com_depuracao_1.InterpretadorComDepuracao(this.importador, process.cwd(), funcaoDeRetorno)
|
|
105
|
+
: new interpretador_1.Interpretador(this.importador, process.cwd(), performance, funcaoDeRetorno);
|
|
106
|
+
break;
|
|
107
|
+
case 'visualg':
|
|
108
|
+
this.lexador = new lexador_visualg_1.LexadorVisuAlg();
|
|
109
|
+
this.avaliadorSintatico = new avaliador_sintatico_visualg_1.AvaliadorSintaticoVisuAlg();
|
|
110
|
+
this.importador = new importador_1.Importador(this.lexador, this.avaliadorSintatico, this.arquivosAbertos, this.conteudoArquivosAbertos, depurador);
|
|
111
|
+
this.interpretador = depurador
|
|
112
|
+
? new dialetos_2.InterpretadorVisuAlgComDepuracao(this.importador, process.cwd(), funcaoDeRetorno)
|
|
113
|
+
: new interpretador_visualg_1.InterpretadorVisuAlg(this.importador, process.cwd(), false, console.log);
|
|
114
|
+
break;
|
|
115
|
+
default:
|
|
116
|
+
this.lexador = new lexador_1.Lexador(performance);
|
|
117
|
+
this.avaliadorSintatico = new avaliador_sintatico_1.AvaliadorSintatico(performance);
|
|
118
|
+
this.importador = new importador_1.Importador(this.lexador, this.avaliadorSintatico, this.arquivosAbertos, this.conteudoArquivosAbertos, depurador);
|
|
119
|
+
this.interpretador = depurador
|
|
120
|
+
? new interpretador_com_depuracao_1.InterpretadorComDepuracao(this.importador, process.cwd(), funcaoDeRetorno)
|
|
121
|
+
: new interpretador_1.Interpretador(this.importador, process.cwd(), performance, funcaoDeRetorno);
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
if (traduzir) {
|
|
125
|
+
switch (traduzir) {
|
|
126
|
+
case 'javascript':
|
|
127
|
+
case 'js':
|
|
128
|
+
this.tradutorJavaScript = new tradutores_1.TradutorJavaScript();
|
|
129
|
+
break;
|
|
130
|
+
case 'delegua':
|
|
131
|
+
this.tradutorReversoJavascript = new tradutores_1.TradutorReversoJavaScript();
|
|
132
|
+
break;
|
|
133
|
+
default:
|
|
134
|
+
throw new Error(`Tradutor '${traduzir}' não implementado.`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (depurador) {
|
|
138
|
+
this.iniciarDepuracao();
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
versao() {
|
|
142
|
+
try {
|
|
143
|
+
const manifesto = caminho.resolve(__dirname, 'package.json');
|
|
144
|
+
return JSON.parse(sistemaArquivos.readFileSync(manifesto, { encoding: 'utf8' })).version || '0.12';
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
return '0.12 (desenvolvimento)';
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* LAIR (Leia-Avalie-Imprima-Repita) é o modo em que Delégua executa em modo console,
|
|
152
|
+
* ou seja, esperando como entrada linhas de código fornecidas pelo usuário.
|
|
153
|
+
*/
|
|
154
|
+
iniciarLairDelegua() {
|
|
155
|
+
this.funcaoDeRetorno(`Usando dialeto: ${this.dialetos[this.dialeto]}`);
|
|
156
|
+
this.funcaoDeRetorno(`Console da Linguagem Delégua v${this.versao()}`);
|
|
157
|
+
this.funcaoDeRetorno('Pressione Ctrl + C para sair');
|
|
158
|
+
const interfaceLeitura = readline.createInterface({
|
|
159
|
+
input: process.stdin,
|
|
160
|
+
output: process.stdout,
|
|
161
|
+
prompt: '\ndelegua> ',
|
|
162
|
+
});
|
|
163
|
+
const isto = this;
|
|
164
|
+
this.interpretador.interfaceEntradaSaida = interfaceLeitura;
|
|
165
|
+
interfaceLeitura.prompt();
|
|
166
|
+
interfaceLeitura.on('line', async (linha) => {
|
|
167
|
+
const { resultado } = await isto.executarUmaLinha(linha);
|
|
168
|
+
if (resultado && resultado.length) {
|
|
169
|
+
isto.funcaoDeRetorno(resultado[0]);
|
|
170
|
+
}
|
|
171
|
+
interfaceLeitura.prompt();
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Executa uma linha. Usado pelo modo LAIR e pelo servidor de depuração, quando recebe um comando 'avaliar'.
|
|
176
|
+
* @param linha A linha a ser avaliada.
|
|
177
|
+
* @returns O resultado da execução, com os retornos e respectivos erros, se houverem.
|
|
178
|
+
*/
|
|
179
|
+
async executarUmaLinha(linha) {
|
|
180
|
+
const retornoLexador = this.lexador.mapear([linha], -1);
|
|
181
|
+
const retornoAvaliadorSintatico = this.avaliadorSintatico.analisar(retornoLexador);
|
|
182
|
+
if (this.afericaoErros({
|
|
183
|
+
retornoLexador,
|
|
184
|
+
retornoAvaliadorSintatico,
|
|
185
|
+
})) {
|
|
186
|
+
return { resultado: [] };
|
|
187
|
+
}
|
|
188
|
+
return await this.executar({
|
|
189
|
+
retornoLexador,
|
|
190
|
+
retornoAvaliadorSintatico,
|
|
191
|
+
}, true);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Instancia um servidor de depuração, normalmente recebendo requisições na porta 7777.
|
|
195
|
+
*/
|
|
196
|
+
iniciarDepuracao() {
|
|
197
|
+
this.servidorDepuracao = new depuracao_1.ServidorDepuracao(this);
|
|
198
|
+
this.servidorDepuracao.iniciarServidorDepuracao();
|
|
199
|
+
this.interpretador.finalizacaoDaExecucao = this.finalizarDepuracao.bind(this);
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Pede ao servidor de depuração que finalize a execução.
|
|
203
|
+
* Se não for feito, o servidor de depuração mantém um _stream_ aberto e nunca finaliza.
|
|
204
|
+
* Mais informações: https://stackoverflow.com/a/47456805/1314276
|
|
205
|
+
*/
|
|
206
|
+
finalizarDepuracao() {
|
|
207
|
+
if (this.servidorDepuracao) {
|
|
208
|
+
this.servidorDepuracao.finalizarServidorDepuracao();
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Verifica erros nas etapas de lexação e avaliação sintática.
|
|
213
|
+
* @param retornoImportador Um objeto que implementa a interface RetornoImportador.
|
|
214
|
+
* @returns Verdadeiro se há erros. Falso caso contrário.
|
|
215
|
+
*/
|
|
216
|
+
afericaoErros(retornoImportador) {
|
|
217
|
+
if (retornoImportador.retornoLexador.erros.length > 0) {
|
|
218
|
+
for (const erroLexador of retornoImportador.retornoLexador.erros) {
|
|
219
|
+
this.reportar(erroLexador.linha, ` no '${erroLexador.caractere}'`, erroLexador.mensagem);
|
|
220
|
+
}
|
|
221
|
+
return true;
|
|
222
|
+
}
|
|
223
|
+
if (retornoImportador.retornoAvaliadorSintatico.erros.length > 0) {
|
|
224
|
+
for (const erroAvaliadorSintatico of retornoImportador.retornoAvaliadorSintatico.erros) {
|
|
225
|
+
this.erro(erroAvaliadorSintatico.simbolo, erroAvaliadorSintatico.message);
|
|
226
|
+
}
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Realiza a tradução do arquivo passado como parâmetro no comando de execução.
|
|
233
|
+
* @param caminhoRelativoArquivo O caminho do arquivo.
|
|
234
|
+
* @param gerarArquivoSaida Se o resultado da tradução deve ser escrito em arquivo.
|
|
235
|
+
* Se verdadeiro, os arquivos de saída são escritos no mesmo diretório
|
|
236
|
+
* do arquivo passado no primeiro parâmetro.
|
|
237
|
+
*/
|
|
238
|
+
traduzirArquivo(caminhoRelativoArquivo, gerarArquivoSaida, extensaoArquivoSaida) {
|
|
239
|
+
const caminhoAbsolutoPrimeiroArquivo = caminho.resolve(caminhoRelativoArquivo);
|
|
240
|
+
const novoDiretorioBase = caminho.dirname(caminhoAbsolutoPrimeiroArquivo);
|
|
241
|
+
this.importador.diretorioBase = novoDiretorioBase;
|
|
242
|
+
const retornoImportador = this.importador.importar(caminhoRelativoArquivo, true, !!this.tradutorReversoJavascript);
|
|
243
|
+
let resultado = null;
|
|
244
|
+
if (this.tradutorJavaScript !== null && this.tradutorJavaScript !== undefined) {
|
|
245
|
+
if (this.afericaoErros(retornoImportador)) {
|
|
246
|
+
process.exit(65); // Código para erro de avaliação antes da tradução
|
|
247
|
+
}
|
|
248
|
+
resultado = this.tradutorJavaScript.traduzir(retornoImportador.retornoAvaliadorSintatico.declaracoes);
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
resultado = this.tradutorReversoJavascript.traduzir(retornoImportador.conteudoArquivo.join('\n'));
|
|
252
|
+
}
|
|
253
|
+
if (gerarArquivoSaida) {
|
|
254
|
+
['.delegua', '.js'].map((extensao) => {
|
|
255
|
+
if (caminhoAbsolutoPrimeiroArquivo.includes(extensao)) {
|
|
256
|
+
sistemaArquivos.writeFile(caminhoAbsolutoPrimeiroArquivo.replace(extensao, `.${extensaoArquivoSaida}`), resultado, (erro) => {
|
|
257
|
+
if (erro)
|
|
258
|
+
throw erro;
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
this.funcaoDeRetorno(resultado);
|
|
264
|
+
}
|
|
265
|
+
async executarCodigoComoArgumento(codigo) {
|
|
266
|
+
const retornoLexador = this.lexador.mapear([codigo], -1);
|
|
267
|
+
const retornoAvaliadorSintatico = this.avaliadorSintatico.analisar(retornoLexador, -1);
|
|
268
|
+
const { erros } = await this.executar({
|
|
269
|
+
conteudoArquivo: [codigo],
|
|
270
|
+
nomeArquivo: '',
|
|
271
|
+
hashArquivo: -1,
|
|
272
|
+
retornoLexador: retornoLexador,
|
|
273
|
+
retornoAvaliadorSintatico: retornoAvaliadorSintatico,
|
|
274
|
+
});
|
|
275
|
+
if (erros.length > 0)
|
|
276
|
+
process.exit(70); // Código com exceções não tratadas
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Execução por arquivo.
|
|
280
|
+
* @param caminhoRelativoArquivo O caminho no sistema operacional do arquivo a ser aberto.
|
|
281
|
+
*/
|
|
282
|
+
async carregarArquivo(caminhoRelativoArquivo) {
|
|
283
|
+
const caminhoAbsolutoPrimeiroArquivo = caminho.resolve(caminhoRelativoArquivo);
|
|
284
|
+
const novoDiretorioBase = caminho.dirname(caminhoAbsolutoPrimeiroArquivo);
|
|
285
|
+
this.importador.diretorioBase = novoDiretorioBase;
|
|
286
|
+
this.interpretador.diretorioBase = novoDiretorioBase;
|
|
287
|
+
const retornoImportador = this.importador.importar(caminhoRelativoArquivo, true, false);
|
|
288
|
+
if (this.afericaoErros(retornoImportador)) {
|
|
289
|
+
process.exit(65); // Código para erro de avaliação antes da execução
|
|
290
|
+
}
|
|
291
|
+
let errosExecucao = {
|
|
292
|
+
lexador: [],
|
|
293
|
+
avaliadorSintatico: [],
|
|
294
|
+
interpretador: [],
|
|
295
|
+
};
|
|
296
|
+
const interfaceLeitura = readline.createInterface({
|
|
297
|
+
input: process.stdin,
|
|
298
|
+
output: process.stdout,
|
|
299
|
+
prompt: '\n> ',
|
|
300
|
+
});
|
|
301
|
+
this.interpretador.interfaceEntradaSaida = interfaceLeitura;
|
|
302
|
+
if (this.modoDepuracao) {
|
|
303
|
+
try {
|
|
304
|
+
this.interpretador.prepararParaDepuracao(retornoImportador.retornoAvaliadorSintatico.declaracoes);
|
|
305
|
+
}
|
|
306
|
+
catch (erro) {
|
|
307
|
+
console.error(chalk_1.default.red(`[Erro de execução]`) + ` Dialeto ${this.dialeto} não suporta depuração.`);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
const { erros } = await this.executar(retornoImportador);
|
|
312
|
+
errosExecucao = erros;
|
|
313
|
+
}
|
|
314
|
+
interfaceLeitura.close();
|
|
315
|
+
if (errosExecucao.length > 0)
|
|
316
|
+
process.exit(70); // Código com exceções não tratadas
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* A execução do código de fato.
|
|
320
|
+
* @param retornoImportador Dados retornados do Importador, como o retorno do Lexador, do Avaliador
|
|
321
|
+
* Sintático e respectivos erros.
|
|
322
|
+
* @param manterAmbiente Indicação se ambiente deve ser mantido ou não. Normalmente verdadeiro
|
|
323
|
+
* para LAIR, falso para execução por arquivo.
|
|
324
|
+
* @returns Um objeto com o resultado da execução.
|
|
325
|
+
*/
|
|
326
|
+
async executar(retornoImportador, manterAmbiente = false) {
|
|
327
|
+
var _a, _b;
|
|
328
|
+
const retornoInterpretador = await this.interpretador.interpretar(retornoImportador.retornoAvaliadorSintatico.declaracoes, manterAmbiente);
|
|
329
|
+
if (retornoInterpretador.erros.length > 0) {
|
|
330
|
+
for (const erroInterpretador of retornoInterpretador.erros) {
|
|
331
|
+
if (erroInterpretador.simbolo) {
|
|
332
|
+
this.erroEmTempoDeExecucao(erroInterpretador);
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
const erroEmJavaScript = erroInterpretador;
|
|
336
|
+
console.error(chalk_1.default.red(`[Linha: ${erroEmJavaScript.linha}] Erro em JavaScript: `) +
|
|
337
|
+
`${(_a = erroEmJavaScript.erroInterno) === null || _a === void 0 ? void 0 : _a.message}`);
|
|
338
|
+
console.error(chalk_1.default.red(`Pilha de execução: `) + `${(_b = erroEmJavaScript.erroInterno) === null || _b === void 0 ? void 0 : _b.stack}`);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
return {
|
|
343
|
+
erros: retornoInterpretador.erros,
|
|
344
|
+
resultado: retornoInterpretador.resultado,
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
reportar(linha, onde, mensagem) {
|
|
348
|
+
/* if (this.nomeArquivo)
|
|
349
|
+
console.error(
|
|
350
|
+
chalk.red(`[Arquivo: ${this.nomeArquivo}] [Linha: ${linha}]`) + ` Erro${onde}: ${mensagem}`
|
|
351
|
+
);
|
|
352
|
+
else */
|
|
353
|
+
console.error(chalk_1.default.red(`[Linha: ${linha}]`) + ` Erro${onde}: ${mensagem}`);
|
|
354
|
+
}
|
|
355
|
+
erro(simbolo, mensagemDeErro) {
|
|
356
|
+
const _simbolo = simbolo || { tipo: delegua_1.default.EOF, linha: -1, lexema: '(indefinido)' };
|
|
357
|
+
if (_simbolo.tipo === delegua_1.default.EOF) {
|
|
358
|
+
this.reportar(Number(_simbolo.linha), ' no final do código', mensagemDeErro);
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
this.reportar(Number(_simbolo.linha), ` no '${_simbolo.lexema}'`, mensagemDeErro);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
erroEmTempoDeExecucao(erro) {
|
|
365
|
+
var _a;
|
|
366
|
+
const linha = ((_a = erro === null || erro === void 0 ? void 0 : erro.simbolo) === null || _a === void 0 ? void 0 : _a.linha) || (erro === null || erro === void 0 ? void 0 : erro.linha);
|
|
367
|
+
const mensagem = (erro === null || erro === void 0 ? void 0 : erro.mensagem) || (erro === null || erro === void 0 ? void 0 : erro.message);
|
|
368
|
+
console.error(chalk_1.default.red(`Erro: [Linha: ${linha}]`) + ` ${mensagem}`);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
exports.Delegua = Delegua;
|
|
372
|
+
//# sourceMappingURL=delegua.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegua.js","sourceRoot":"","sources":["../../fontes/delegua.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAA2C;AAC3C,mDAAqC;AACrC,wDAA0C;AAC1C,kDAA0B;AAE1B,2EAAwE;AACxE,+GAA2G;AAC3G,iEAA8D;AAE9D,sGAAsF;AAYtF,gJAA2I;AAC3I,gHAA2G;AAC3G,gGAA4F;AAC5F,oIAA+H;AAC/H,yFAA4G;AAC5G,uEAA4E;AAG5E,yEAAyF;AACzF,yHAAoH;AACpH,oGAAgG;AAChG,wIAAmI;AACnI,8FAA0F;AAC1F,kIAA6H;AAC7H,yEAAyG;AACzG,8HAA0H;AAE1H,mFAAwG;AACxG,oHAA+G;AAC/G,wJAAkJ;AAElJ;;;;GAIG;AACH,MAAa,OAAO;IA0BhB,YACI,OAAO,GAAG,SAAS,EACnB,WAAW,GAAG,KAAK,EACnB,SAAS,GAAG,KAAK,EACjB,WAAgB,IAAI,EACpB,kBAA4B,IAAI;QA7BpC,aAAQ,GAAwC;YAC5C,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,OAAO;YACd,iBAAiB,EAAE,iBAAiB;YACpC,OAAO,EAAE,SAAS;SACrB,CAAC;QAwBE,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC;QAElC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,eAAe,GAAG,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC;QACtD,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAE/B,QAAQ,IAAI,CAAC,OAAO,EAAE;YAClB,KAAK,MAAM;gBACP,IAAI,CAAC,OAAO,GAAG,IAAI,0BAAW,EAAE,CAAC;gBACjC,IAAI,CAAC,kBAAkB,GAAG,IAAI,iDAAsB,EAAE,CAAC;gBACvD,IAAI,CAAC,UAAU,GAAG,IAAI,uBAAU,CAC5B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,uBAAuB,EAC5B,SAAS,CACZ,CAAC;gBACF,IAAI,CAAC,aAAa,GAAG,IAAI,6BAAa,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC3F,MAAM;YACV,KAAK,MAAM;gBACP,IAAI,SAAS,EAAE;oBACX,MAAM,IAAI,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,GAAG,yBAAyB,CAAC,CAAC;iBAC1E;gBAED,IAAI,CAAC,OAAO,GAAG,IAAI,2CAAmB,EAAE,CAAC;gBACzC,IAAI,CAAC,kBAAkB,GAAG,IAAI,yCAA8B,EAAE,CAAC;gBAC/D,IAAI,CAAC,UAAU,GAAG,IAAI,uBAAU,CAC5B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,uBAAuB,EAC5B,SAAS,CACZ,CAAC;gBACF,IAAI,CAAC,aAAa,GAAG,IAAI,uDAAyB,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;gBACxE,MAAM;YACV,KAAK,OAAO;gBACR,IAAI,CAAC,OAAO,GAAG,IAAI,4BAAY,EAAE,CAAC;gBAClC,IAAI,CAAC,kBAAkB,GAAG,IAAI,mDAAuB,EAAE,CAAC;gBACxD,IAAI,CAAC,UAAU,GAAG,IAAI,uBAAU,CAC5B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,uBAAuB,EAC5B,SAAS,CACZ,CAAC;gBACF,IAAI,CAAC,aAAa,GAAG,SAAS;oBAC1B,CAAC,CAAC,IAAI,uDAAyB,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC;oBAChF,CAAC,CAAC,IAAI,6BAAa,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;gBACtF,MAAM;YACV,KAAK,iBAAiB;gBAClB,IAAI,CAAC,OAAO,GAAG,IAAI,+CAAqB,EAAE,CAAC;gBAC3C,IAAI,CAAC,kBAAkB,GAAG,IAAI,sEAAgC,EAAE,CAAC;gBACjE,IAAI,CAAC,UAAU,GAAG,IAAI,uBAAU,CAC5B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,uBAAuB,EAC5B,SAAS,CACZ,CAAC;gBACF,IAAI,CAAC,aAAa,GAAG,SAAS;oBAC1B,CAAC,CAAC,IAAI,uDAAyB,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC;oBAChF,CAAC,CAAC,IAAI,6BAAa,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;gBACtF,MAAM;YACV,KAAK,SAAS;gBACV,IAAI,CAAC,OAAO,GAAG,IAAI,gCAAc,EAAE,CAAC;gBACpC,IAAI,CAAC,kBAAkB,GAAG,IAAI,uDAAyB,EAAE,CAAC;gBAC1D,IAAI,CAAC,UAAU,GAAG,IAAI,uBAAU,CAC5B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,uBAAuB,EAC5B,SAAS,CACZ,CAAC;gBACF,IAAI,CAAC,aAAa,GAAG,SAAS;oBAC1B,CAAC,CAAC,IAAI,2CAAgC,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC;oBACvF,CAAC,CAAC,IAAI,4CAAoB,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;gBACnF,MAAM;YACV;gBACI,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CAAC,WAAW,CAAC,CAAC;gBACxC,IAAI,CAAC,kBAAkB,GAAG,IAAI,wCAAkB,CAAC,WAAW,CAAC,CAAC;gBAC9D,IAAI,CAAC,UAAU,GAAG,IAAI,uBAAU,CAC5B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,uBAAuB,EAC5B,SAAS,CACZ,CAAC;gBACF,IAAI,CAAC,aAAa,GAAG,SAAS;oBAC1B,CAAC,CAAC,IAAI,uDAAyB,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC;oBAChF,CAAC,CAAC,IAAI,6BAAa,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;gBACtF,MAAM;SACb;QAED,IAAI,QAAQ,EAAE;YACV,QAAQ,QAAQ,EAAE;gBACd,KAAK,YAAY,CAAC;gBAClB,KAAK,IAAI;oBACL,IAAI,CAAC,kBAAkB,GAAG,IAAI,+BAAkB,EAAE,CAAC;oBACnD,MAAM;gBACV,KAAK,SAAS;oBACV,IAAI,CAAC,yBAAyB,GAAG,IAAI,sCAAyB,EAAE,CAAC;oBACjE,MAAM;gBACV;oBACI,MAAM,IAAI,KAAK,CAAC,aAAa,QAAQ,qBAAqB,CAAC,CAAC;aACnE;SACJ;QAED,IAAI,SAAS,EAAE;YACX,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B;IACL,CAAC;IAED,MAAM;QACF,IAAI;YACA,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YAE7D,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC;SACtG;QAAC,OAAO,KAAU,EAAE;YACjB,OAAO,wBAAwB,CAAC;SACnC;IACL,CAAC;IAED;;;OAGG;IACH,kBAAkB;QACd,IAAI,CAAC,eAAe,CAAC,mBAAmB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,eAAe,CAAC,iCAAiC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,eAAe,CAAC,8BAA8B,CAAC,CAAC;QAErD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,eAAe,CAAC;YAC9C,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,aAAa;SACxB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,aAAa,CAAC,qBAAqB,GAAG,gBAAgB,CAAC;QAE5D,gBAAgB,CAAC,MAAM,EAAE,CAAC;QAC1B,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAa,EAAE,EAAE;YAChD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACzD,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE;gBAC/B,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;aACtC;YAED,gBAAgB,CAAC,MAAM,EAAE,CAAC;QAC9B,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,gBAAgB,CAAC,KAAa;QAChC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,yBAAyB,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QACnF,IACI,IAAI,CAAC,aAAa,CAAC;YACf,cAAc;YACd,yBAAyB;SACP,CAAC,EACzB;YACE,OAAO,EAAE,SAAS,EAAE,EAAE,EAA8B,CAAC;SACxD;QAED,OAAO,MAAM,IAAI,CAAC,QAAQ,CACtB;YACI,cAAc;YACd,yBAAyB;SACP,EACtB,IAAI,CACP,CAAC;IACN,CAAC;IAED;;OAEG;IACH,gBAAgB;QACZ,IAAI,CAAC,iBAAiB,GAAG,IAAI,6BAAiB,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,iBAAiB,CAAC,wBAAwB,EAAE,CAAC;QACjD,IAAI,CAAC,aAAqB,CAAC,qBAAqB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3F,CAAC;IAED;;;;OAIG;IACH,kBAAkB;QACd,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,iBAAiB,CAAC,0BAA0B,EAAE,CAAC;SACvD;IACL,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,iBAAoC;QAC9C,IAAI,iBAAiB,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACnD,KAAK,MAAM,WAAW,IAAI,iBAAiB,CAAC,cAAc,CAAC,KAAK,EAAE;gBAC9D,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,WAAW,CAAC,SAAS,GAAG,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;aAC5F;YACD,OAAO,IAAI,CAAC;SACf;QAED,IAAI,iBAAiB,CAAC,yBAAyB,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9D,KAAK,MAAM,sBAAsB,IAAI,iBAAiB,CAAC,yBAAyB,CAAC,KAAK,EAAE;gBACpF,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC;aAC7E;YACD,OAAO,IAAI,CAAC;SACf;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;;OAMG;IACH,eAAe,CAAC,sBAA8B,EAAE,iBAA0B,EAAE,oBAA4B;QACpG,MAAM,8BAA8B,GAAG,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAC/E,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;QAE1E,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,iBAAiB,CAAC;QAElD,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAC9C,sBAAsB,EACtB,IAAI,EACJ,CAAC,CAAC,IAAI,CAAC,yBAAyB,CACnC,CAAC;QAEF,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE;YAC3E,IAAI,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE;gBACvC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,kDAAkD;aACvE;YAED,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC;SACzG;aAAM;YACH,SAAS,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SACrG;QAED,IAAI,iBAAiB,EAAE;YACnB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACjC,IAAI,8BAA8B,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;oBACnD,eAAe,CAAC,SAAS,CAAC,8BAA8B,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,oBAAoB,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;wBACxH,IAAI,IAAI;4BAAE,MAAM,IAAI,CAAC;oBACzB,CAAC,CAAC,CAAC;iBACN;YACL,CAAC,CAAC,CAAC;SACN;QAED,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,2BAA2B,CAAC,MAAc;QAC5C,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,yBAAyB,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;QACvF,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC;YAClC,eAAe,EAAE,CAAC,MAAM,CAAC;YACzB,WAAW,EAAE,EAAE;YACf,WAAW,EAAE,CAAC,CAAC;YACf,cAAc,EAAE,cAAc;YAC9B,yBAAyB,EAAE,yBAAyB;SACvD,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,mCAAmC;IAC/E,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe,CAAC,sBAA8B;QAChD,MAAM,8BAA8B,GAAG,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAC/E,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;QAE1E,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,iBAAiB,CAAC;QAClD,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,iBAAiB,CAAC;QAErD,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,sBAAsB,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAExF,IAAI,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE;YACvC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,kDAAkD;SACvE;QAED,IAAI,aAAa,GAAQ;YACrB,OAAO,EAAE,EAAE;YACX,kBAAkB,EAAE,EAAE;YACtB,aAAa,EAAE,EAAE;SACpB,CAAC;QAEF,MAAM,gBAAgB,GAAG,QAAQ,CAAC,eAAe,CAAC;YAC9C,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,MAAM;SACjB,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,CAAC,qBAAqB,GAAG,gBAAgB,CAAC;QAE5D,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI;gBACC,IAAI,CAAC,aAAoD,CAAC,qBAAqB,CAC5E,iBAAiB,CAAC,yBAAyB,CAAC,WAAW,CAC1D,CAAC;aACL;YAAC,OAAO,IAAS,EAAE;gBAChB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,YAAY,IAAI,CAAC,OAAO,yBAAyB,CAAC,CAAC;aACtG;SACJ;aAAM;YACH,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;YACzD,aAAa,GAAG,KAAK,CAAC;SACzB;QAED,gBAAgB,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,mCAAmC;IACvF,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,QAAQ,CAAC,iBAAoC,EAAE,cAAc,GAAG,KAAK;;QACvE,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAC7D,iBAAiB,CAAC,yBAAyB,CAAC,WAAW,EACvD,cAAc,CACjB,CAAC;QAEF,IAAI,oBAAoB,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACvC,KAAK,MAAM,iBAAiB,IAAI,oBAAoB,CAAC,KAAK,EAAE;gBACxD,IAAI,iBAAiB,CAAC,OAAO,EAAE;oBAC3B,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;iBACjD;qBAAM;oBACH,MAAM,gBAAgB,GAAQ,iBAAsC,CAAC;oBACrE,OAAO,CAAC,KAAK,CACT,eAAK,CAAC,GAAG,CAAC,WAAW,gBAAgB,CAAC,KAAK,wBAAwB,CAAC;wBAChE,GAAG,MAAA,gBAAgB,CAAC,WAAW,0CAAE,OAAO,EAAE,CACjD,CAAC;oBACF,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,GAAG,GAAG,MAAA,gBAAgB,CAAC,WAAW,0CAAE,KAAK,EAAE,CAAC,CAAC;iBAC9F;aACJ;SACJ;QAED,OAAO;YACH,KAAK,EAAE,oBAAoB,CAAC,KAAK;YACjC,SAAS,EAAE,oBAAoB,CAAC,SAAS;SAC5C,CAAC;IACN,CAAC;IAED,QAAQ,CAAC,KAAa,EAAE,IAAS,EAAE,QAAgB;QAC/C;;;;eAIO;QACP,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,WAAW,KAAK,GAAG,CAAC,GAAG,QAAQ,IAAI,KAAK,QAAQ,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,IAAI,CAAC,OAAyB,EAAE,cAAsB;QAClD,MAAM,QAAQ,GAAG,OAAO,IAAI,EAAE,IAAI,EAAE,iBAAe,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QAC7F,IAAI,QAAQ,CAAC,IAAI,KAAK,iBAAe,CAAC,GAAG,EAAE;YACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,qBAAqB,EAAE,cAAc,CAAC,CAAC;SAChF;aAAM;YACH,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,QAAQ,CAAC,MAAM,GAAG,EAAE,cAAc,CAAC,CAAC;SACrF;IACL,CAAC;IAED,qBAAqB,CAAC,IAAS;;QAC3B,MAAM,KAAK,GAAG,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,0CAAE,KAAK,MAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,CAAA,CAAC;QAClD,MAAM,QAAQ,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,MAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,CAAA,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,iBAAiB,KAAK,GAAG,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC,CAAC;IACzE,CAAC;CACJ;AAlaD,0BAkaC"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../fontes/interpretador/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Importar } from '@designliquido/delegua/fontes/declaracoes';
|
|
2
|
+
import { DeleguaModulo } from '@designliquido/delegua/fontes/estruturas';
|
|
3
|
+
import { ImportadorInterface } from '@designliquido/delegua/fontes/interfaces/importador-interface';
|
|
4
|
+
import { InterpretadorBase } from '@designliquido/delegua/fontes/interpretador/interpretador-base';
|
|
5
|
+
/**
|
|
6
|
+
* O Interpretador visita todos os elementos complexos gerados pelo avaliador sintático (_parser_),
|
|
7
|
+
* e de fato executa a lógica de programação descrita no código.
|
|
8
|
+
*/
|
|
9
|
+
export declare class Interpretador extends InterpretadorBase {
|
|
10
|
+
constructor(importador: ImportadorInterface, diretorioBase: string, performance?: boolean, funcaoDeRetorno?: Function);
|
|
11
|
+
/**
|
|
12
|
+
* Importa um arquivo como módulo.
|
|
13
|
+
* @param declaracao A declaração de importação.
|
|
14
|
+
* @returns Ou um `DeleguaModulo`, ou um dicionário de funções.
|
|
15
|
+
*/
|
|
16
|
+
visitarDeclaracaoImportar(declaracao: Importar): Promise<DeleguaModulo>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.Interpretador = void 0;
|
|
30
|
+
const caminho = __importStar(require("node:path"));
|
|
31
|
+
const estruturas_1 = require("@designliquido/delegua/fontes/estruturas");
|
|
32
|
+
const interpretador_base_1 = require("@designliquido/delegua/fontes/interpretador/interpretador-base");
|
|
33
|
+
const mecanismo_importacao_bibliotecas_1 = __importDefault(require("./mecanismo-importacao-bibliotecas"));
|
|
34
|
+
/**
|
|
35
|
+
* O Interpretador visita todos os elementos complexos gerados pelo avaliador sintático (_parser_),
|
|
36
|
+
* e de fato executa a lógica de programação descrita no código.
|
|
37
|
+
*/
|
|
38
|
+
class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
39
|
+
constructor(importador, diretorioBase, performance = false, funcaoDeRetorno = null) {
|
|
40
|
+
super(importador, diretorioBase, performance, funcaoDeRetorno);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Importa um arquivo como módulo.
|
|
44
|
+
* @param declaracao A declaração de importação.
|
|
45
|
+
* @returns Ou um `DeleguaModulo`, ou um dicionário de funções.
|
|
46
|
+
*/
|
|
47
|
+
async visitarDeclaracaoImportar(declaracao) {
|
|
48
|
+
const caminhoRelativo = await this.avaliar(declaracao.caminho);
|
|
49
|
+
const caminhoTotal = caminho.join(this.diretorioBase, caminhoRelativo);
|
|
50
|
+
const nomeArquivo = caminho.basename(caminhoTotal);
|
|
51
|
+
if (!caminhoTotal.endsWith('.delegua')) {
|
|
52
|
+
try {
|
|
53
|
+
return await (0, mecanismo_importacao_bibliotecas_1.default)(caminhoRelativo);
|
|
54
|
+
}
|
|
55
|
+
catch (erro) {
|
|
56
|
+
this.erros.push(erro);
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const conteudoImportacao = this.importador.importar(caminhoRelativo, false, false);
|
|
61
|
+
const retornoInterpretador = await this.interpretar(conteudoImportacao.retornoAvaliadorSintatico.declaracoes, true);
|
|
62
|
+
const funcoesChamaveis = this.pilhaEscoposExecucao.obterTodasDeleguaFuncao();
|
|
63
|
+
const declaracoesClasse = this.pilhaEscoposExecucao.obterTodasDeclaracaoClasse();
|
|
64
|
+
if (declaracoesClasse.hasOwnProperty('super')) {
|
|
65
|
+
delete declaracoesClasse['super'];
|
|
66
|
+
}
|
|
67
|
+
const novoModulo = new estruturas_1.DeleguaModulo();
|
|
68
|
+
const chavesFuncoesChamaveis = Object.keys(funcoesChamaveis);
|
|
69
|
+
for (let i = 0; i < chavesFuncoesChamaveis.length; i++) {
|
|
70
|
+
novoModulo.componentes[chavesFuncoesChamaveis[i]] = funcoesChamaveis[chavesFuncoesChamaveis[i]];
|
|
71
|
+
}
|
|
72
|
+
const chavesDeclaracoesClasse = Object.keys(declaracoesClasse);
|
|
73
|
+
for (let i = 0; i < chavesDeclaracoesClasse.length; i++) {
|
|
74
|
+
novoModulo.componentes[chavesDeclaracoesClasse[i]] = declaracoesClasse[chavesDeclaracoesClasse[i]];
|
|
75
|
+
}
|
|
76
|
+
return novoModulo;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
exports.Interpretador = Interpretador;
|
|
80
|
+
//# sourceMappingURL=interpretador.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpretador.js","sourceRoot":"","sources":["../../../fontes/interpretador/interpretador.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAqC;AAGrC,yEAAyE;AAGzE,uGAAmG;AAEnG,0GAAwE;AAGxE;;;GAGG;AACH,MAAa,aAAc,SAAQ,sCAAiB;IAChD,YACI,UAA+B,EAC/B,aAAqB,EACrB,WAAW,GAAG,KAAK,EACnB,kBAA4B,IAAI;QAEhC,KAAK,CAAC,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;IACnE,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,yBAAyB,CAAC,UAAoB;QAChD,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QACvE,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAEnD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;YACpC,IAAI;gBACA,OAAO,MAAM,IAAA,0CAAsB,EAAC,eAAe,CAAC,CAAC;aACxD;YAAC,OAAO,IAAS,EAAE;gBAChB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,OAAO,IAAI,CAAC;aACf;SACJ;QAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACnF,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,WAAW,CAC/C,kBAAkB,CAAC,yBAAyB,CAAC,WAAW,EACxD,IAAI,CACP,CAAC;QAEF,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,uBAAuB,EAAE,CAAC;QAE7E,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,0BAA0B,EAAE,CAAC;QAEjF,IAAI,iBAAiB,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;YAC3C,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;SACrC;QAED,MAAM,UAAU,GAAG,IAAI,0BAAa,EAAE,CAAC;QAEvC,MAAM,sBAAsB,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpD,UAAU,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;SACnG;QAED,MAAM,uBAAuB,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,uBAAuB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrD,UAAU,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;SACtG;QAED,OAAO,UAAU,CAAC;IACtB,CAAC;CACJ;AAzDD,sCAyDC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
const processoFilho = __importStar(require("node:child_process"));
|
|
27
|
+
const caminho = __importStar(require("node:path"));
|
|
28
|
+
const sistemaArquivos = __importStar(require("node:fs"));
|
|
29
|
+
const excecoes_1 = require("@designliquido/delegua/fontes/excecoes");
|
|
30
|
+
const funcao_padrao_1 = require("@designliquido/delegua/fontes/estruturas/funcao-padrao");
|
|
31
|
+
const modulo_1 = require("@designliquido/delegua/fontes/estruturas/modulo");
|
|
32
|
+
const classe_padrao_1 = require("@designliquido/delegua/fontes/estruturas/classe-padrao");
|
|
33
|
+
const carregarBibliotecaDelegua = (nome) => {
|
|
34
|
+
let dadosDoModulo;
|
|
35
|
+
try {
|
|
36
|
+
dadosDoModulo = require(nome);
|
|
37
|
+
}
|
|
38
|
+
catch (erro) {
|
|
39
|
+
// Biblioteca não existe localmente. Tentar importação global
|
|
40
|
+
try {
|
|
41
|
+
dadosDoModulo = importarPacoteDeleguaCompleto(nome);
|
|
42
|
+
}
|
|
43
|
+
catch (erro2) {
|
|
44
|
+
throw new excecoes_1.ErroEmTempoDeExecucao(null, `Biblioteca ${nome} não encontrada para importação.`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return modularizarBiblioteca(dadosDoModulo, nome);
|
|
48
|
+
};
|
|
49
|
+
const carregarBiblioteca = async (nomeDaBiblioteca, caminhoDaBiblioteca) => {
|
|
50
|
+
let dadosDoModulo;
|
|
51
|
+
try {
|
|
52
|
+
dadosDoModulo = require(caminhoDaBiblioteca);
|
|
53
|
+
}
|
|
54
|
+
catch (erro) {
|
|
55
|
+
try {
|
|
56
|
+
dadosDoModulo = await importarPacoteExternoCompleto(nomeDaBiblioteca);
|
|
57
|
+
}
|
|
58
|
+
catch (erro2) {
|
|
59
|
+
throw new excecoes_1.ErroEmTempoDeExecucao(null, `Biblioteca ${nomeDaBiblioteca} não encontrada para importação. Informações adicionais: ${(erro2 === null || erro2 === void 0 ? void 0 : erro2.message) || '(nenhuma)'}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return modularizarBiblioteca(dadosDoModulo, nomeDaBiblioteca);
|
|
63
|
+
};
|
|
64
|
+
const modularizarBiblioteca = (dadosDoModulo, nome) => {
|
|
65
|
+
const novoModulo = new modulo_1.DeleguaModulo(nome);
|
|
66
|
+
const chaves = Object.keys(dadosDoModulo);
|
|
67
|
+
for (let i = 0; i < chaves.length; i++) {
|
|
68
|
+
const moduloAtual = dadosDoModulo[chaves[i]];
|
|
69
|
+
if (typeof moduloAtual === 'function') {
|
|
70
|
+
// Por definição, funções tradicionais e classes são identificadas em JavaScript como "functions".
|
|
71
|
+
// A primeira heurística era verificando a propriedade `prototype`, mas isso não funciona bem
|
|
72
|
+
// porque classes e funções avulsas todas possuem prototype.
|
|
73
|
+
// Uma heurística nova é converter `moduloAtual` para `string` e verificar se a declaração começa com `class`.
|
|
74
|
+
// Se sim, podemos dizer que a "function" é uma classe padrão.
|
|
75
|
+
// Caso contrário, é uma função (`FuncaoPadrao`).
|
|
76
|
+
if (String(moduloAtual).startsWith('class')) {
|
|
77
|
+
const classePadrao = new classe_padrao_1.ClassePadrao(chaves[i], moduloAtual);
|
|
78
|
+
novoModulo.componentes[chaves[i]] = classePadrao;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
novoModulo.componentes[chaves[i]] = new funcao_padrao_1.FuncaoPadrao(moduloAtual.length, moduloAtual);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
novoModulo.componentes[chaves[i]] = moduloAtual;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return novoModulo;
|
|
89
|
+
};
|
|
90
|
+
const importarPacoteCaminhoBase = async (caminhoRelativo) => {
|
|
91
|
+
var _a;
|
|
92
|
+
let resultado = null;
|
|
93
|
+
const npm = process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
94
|
+
const global = processoFilho.spawnSync(npm, ['root', '--location=global']);
|
|
95
|
+
const caminhoAbsoluto = caminho.join(global.output[1].toString().trim()) + `\\${caminhoRelativo}\\package.json`;
|
|
96
|
+
let arquivoInicio = JSON.parse(sistemaArquivos.readFileSync(caminhoAbsoluto, 'utf-8')).main || 'index.js';
|
|
97
|
+
await (_a = caminho.join('file:///' + global.output[1].toString().trim()) +
|
|
98
|
+
`\\${caminhoRelativo}\\${arquivoInicio.replace('./', '')}`, Promise.resolve().then(() => __importStar(require(_a)))).then((resposta) => {
|
|
99
|
+
resultado = resposta;
|
|
100
|
+
});
|
|
101
|
+
return resultado;
|
|
102
|
+
};
|
|
103
|
+
const importarPacoteDeleguaCompleto = async (nome) => {
|
|
104
|
+
return await importarPacoteCaminhoBase(`delegua\\node_modules\\${nome}`);
|
|
105
|
+
};
|
|
106
|
+
const importarPacoteExternoCompleto = async (nome) => {
|
|
107
|
+
return await importarPacoteCaminhoBase(nome);
|
|
108
|
+
};
|
|
109
|
+
const verificarModulosDelegua = (nome) => {
|
|
110
|
+
const modulos = {
|
|
111
|
+
estatistica: '@designliquido/delegua-estatistica',
|
|
112
|
+
estatística: '@designliquido/delegua-estatistica',
|
|
113
|
+
fisica: '@designliquido/delegua-fisica',
|
|
114
|
+
física: '@designliquido/delegua-fisica',
|
|
115
|
+
json: '@designliquido/delegua-json',
|
|
116
|
+
matematica: '@designliquido/delegua-matematica',
|
|
117
|
+
matemática: '@designliquido/delegua-matematica',
|
|
118
|
+
tempo: '@designliquido/delegua-tempo',
|
|
119
|
+
};
|
|
120
|
+
if (Object.keys(modulos).includes(nome)) {
|
|
121
|
+
return modulos[nome].toString();
|
|
122
|
+
}
|
|
123
|
+
return false;
|
|
124
|
+
};
|
|
125
|
+
async function default_1(nome) {
|
|
126
|
+
const nomeBibliotecaResolvido = verificarModulosDelegua(nome);
|
|
127
|
+
return nomeBibliotecaResolvido
|
|
128
|
+
? carregarBibliotecaDelegua(String(nomeBibliotecaResolvido))
|
|
129
|
+
: await carregarBiblioteca(nome, nome);
|
|
130
|
+
}
|
|
131
|
+
exports.default = default_1;
|
|
132
|
+
//# sourceMappingURL=mecanismo-importacao-bibliotecas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mecanismo-importacao-bibliotecas.js","sourceRoot":"","sources":["../../../fontes/interpretador/mecanismo-importacao-bibliotecas.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@designliquido/delegua-node",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"description": "Linguagem Delégua com capacidades para ecossistema Node.js.",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"empacotar": "rimraf ./dist && tsc && copyfiles -V ./bin/delegua ./bin/delegua.cmd ./dist && copyfiles -V ./package.json ./dist/bin && copyfiles -V ./README.md ./dist",
|
|
7
|
+
"testes-unitarios": "jest --coverage",
|
|
8
|
+
"testes:egua": "./bin/delegua-ts exemplos/dialetos/egua-classico/testes.egua",
|
|
9
|
+
"testes:delegua:bhaskara": "./bin/delegua-ts exemplos/dialetos/egua-classico/bhaskara.egua",
|
|
10
|
+
"testes:delegua:fibonacci": "./bin/delegua-ts exemplos/dialetos/egua-classico/fibonacci.egua",
|
|
11
|
+
"testes:egua-classico": "./bin/delegua-ts --dialeto egua exemplos/dialetos/egua-classico/testes.egua"
|
|
12
|
+
},
|
|
13
|
+
"dependencies": {
|
|
14
|
+
"@designliquido/delegua": "^0.13.2",
|
|
15
|
+
"chalk": "4.1.2",
|
|
16
|
+
"commander": "^9.4.1"
|
|
17
|
+
},
|
|
18
|
+
"devDependencies": {
|
|
19
|
+
"@designliquido/delegua-estatistica": "^0.0.5",
|
|
20
|
+
"@designliquido/delegua-fisica": "^0.0.2",
|
|
21
|
+
"@designliquido/delegua-json": "^0.0.0",
|
|
22
|
+
"@designliquido/delegua-matematica": "^0.2.0",
|
|
23
|
+
"@designliquido/delegua-tempo": "^0.0.1",
|
|
24
|
+
"@types/jest": "^29.4.0",
|
|
25
|
+
"@types/node": "^18.11.19",
|
|
26
|
+
"copyfiles": "^2.4.1",
|
|
27
|
+
"jest": "^29.4.1",
|
|
28
|
+
"rimraf": "^4.1.2",
|
|
29
|
+
"ts-jest": "^29.0.5",
|
|
30
|
+
"ts-node": "^10.9.1",
|
|
31
|
+
"typescript": "^4.9.5"
|
|
32
|
+
}
|
|
33
|
+
}
|