@designliquido/delegua 0.12.7 → 0.13.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 +2 -2
- package/bin/package.json +2 -1
- package/execucao.js +2 -1
- package/execucao.js.map +1 -1
- package/fontes/avaliador-sintatico/avaliador-sintatico-base.d.ts +3 -1
- package/fontes/avaliador-sintatico/avaliador-sintatico-base.js +28 -1
- package/fontes/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.d.ts +4 -3
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.js +90 -17
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.js.map +1 -1
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-studio.d.ts +26 -0
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-studio.js +157 -0
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-studio.js.map +1 -0
- package/fontes/delegua.d.ts +1 -1
- package/fontes/delegua.js +14 -3
- package/fontes/delegua.js.map +1 -1
- package/fontes/lexador/dialetos/lexador-birl.js +10 -51
- package/fontes/lexador/dialetos/lexador-birl.js.map +1 -1
- package/fontes/lexador/dialetos/lexador-portugol-studio.d.ts +15 -0
- package/fontes/lexador/dialetos/lexador-portugol-studio.js +243 -0
- package/fontes/lexador/dialetos/lexador-portugol-studio.js.map +1 -0
- package/fontes/lexador/dialetos/palavras-reservadas/index.d.ts +1 -0
- package/fontes/lexador/dialetos/palavras-reservadas/index.js +1 -0
- package/fontes/lexador/dialetos/palavras-reservadas/index.js.map +1 -1
- package/fontes/lexador/dialetos/palavras-reservadas/portugol-studio.d.ts +6 -0
- package/fontes/lexador/dialetos/palavras-reservadas/portugol-studio.js +12 -0
- package/fontes/lexador/dialetos/palavras-reservadas/portugol-studio.js.map +1 -0
- package/fontes/lexador/lexador-base.d.ts +41 -0
- package/fontes/lexador/lexador-base.js +113 -0
- package/fontes/lexador/lexador-base.js.map +1 -0
- package/fontes/tipos-de-simbolos/birl.d.ts +5 -0
- package/fontes/tipos-de-simbolos/birl.js +5 -0
- package/fontes/tipos-de-simbolos/birl.js.map +1 -1
- package/fontes/tipos-de-simbolos/portugol-studio.d.ts +33 -0
- package/fontes/tipos-de-simbolos/portugol-studio.js +35 -0
- package/fontes/tipos-de-simbolos/portugol-studio.js.map +1 -0
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -53,7 +53,7 @@ Delégua tem retrocompatibilidade com a linguagem Égua e compreende sua extens
|
|
|
53
53
|
- **Grátis.** Sem planos, sem limitações e sem propaganda.
|
|
54
54
|
- **Código aberto (_open source_).** Todo o código fonte disponível para estudar, modificar e contribuir.
|
|
55
55
|
- **Linguagem Científica.** Apoiamos e encorajamos o desenvolvimento e aprimoramento da ciência e da educação.
|
|
56
|
-
- **Multidialetos.** Execute algoritmos em [Portugol VisuAlg](http://visualg3.com.br).
|
|
56
|
+
- **Multidialetos.** Execute algoritmos em [Portugol VisuAlg](http://visualg3.com.br) e [Portugol Studio](http://lite.acad.univali.br/portugol/).
|
|
57
57
|
- **Depurável.** Usando um editor com suporte à depuração como o [Visual Studio Code](https://code.visualstudio.com), você pode inspecionar o seu programa, suas variáveis e executar linha por linha
|
|
58
58
|
|
|
59
59
|
## Aplicações
|
|
@@ -119,7 +119,7 @@ npm install -g @designliquido/delegua
|
|
|
119
119
|
|
|
120
120
|
## Tradução para outras linguagens
|
|
121
121
|
|
|
122
|
-
|
|
122
|
+
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).
|
|
123
123
|
|
|
124
124
|
## Documentação
|
|
125
125
|
|
package/bin/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@designliquido/delegua",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.8",
|
|
4
4
|
"description": "Linguagem de programação simples e moderna usando português estruturado, com suporte a múltiplos dialetos",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -67,6 +67,7 @@
|
|
|
67
67
|
"@designliquido/delegua-matematica": "^0.2.0",
|
|
68
68
|
"@designliquido/delegua-tempo": "^0.0.1",
|
|
69
69
|
"@types/esprima": "^4.0.3",
|
|
70
|
+
"@types/estree": "^1.0.0",
|
|
70
71
|
"@types/jest": "^29.4.0",
|
|
71
72
|
"@types/node": "^18.11.13",
|
|
72
73
|
"@typescript-eslint/eslint-plugin": "^5.46.1",
|
package/execucao.js
CHANGED
|
@@ -27,7 +27,8 @@ const principal = () => {
|
|
|
27
27
|
else {
|
|
28
28
|
if (codigoOuNomeArquivo) {
|
|
29
29
|
if (opcoes.traduzir) {
|
|
30
|
-
|
|
30
|
+
const extensaoSaida = opcoes.traduzir;
|
|
31
|
+
delegua.traduzirArquivo(codigoOuNomeArquivo, opcoes.saida, extensaoSaida);
|
|
31
32
|
}
|
|
32
33
|
else {
|
|
33
34
|
delegua.carregarArquivo(codigoOuNomeArquivo);
|
package/execucao.js.map
CHANGED
|
@@ -1 +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,OAAO,CAAC,eAAe,CAAC,mBAAmB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;
|
|
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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Construto, FuncaoConstruto } from '../construtos';
|
|
2
2
|
import { Escreva, Expressao, Se, Enquanto, Para, Sustar, Continua, Retorna, Escolha, Importar, Tente, Fazer, Var, FuncaoDeclaracao as FuncaoDeclaracao, Classe, Declaracao, Leia } from '../declaracoes';
|
|
3
|
-
import { AvaliadorSintaticoInterface, SimboloInterface } from '../interfaces';
|
|
3
|
+
import { AvaliadorSintaticoInterface, ParametroInterface, SimboloInterface } from '../interfaces';
|
|
4
4
|
import { RetornoLexador, RetornoAvaliadorSintatico } from '../interfaces/retornos';
|
|
5
5
|
import { ErroAvaliadorSintatico } from './erro-avaliador-sintatico';
|
|
6
6
|
/**
|
|
@@ -16,6 +16,7 @@ export declare abstract class AvaliadorSintaticoBase implements AvaliadorSintati
|
|
|
16
16
|
blocos: number;
|
|
17
17
|
consumir(tipo: string, mensagemDeErro: string): SimboloInterface;
|
|
18
18
|
erro(simbolo: SimboloInterface, mensagemDeErro: string): ErroAvaliadorSintatico;
|
|
19
|
+
simboloAnterior(): SimboloInterface;
|
|
19
20
|
verificarTipoSimboloAtual(tipo: string): boolean;
|
|
20
21
|
verificarTipoProximoSimbolo(tipo: string): boolean;
|
|
21
22
|
estaNoFinal(): boolean;
|
|
@@ -60,6 +61,7 @@ export declare abstract class AvaliadorSintaticoBase implements AvaliadorSintati
|
|
|
60
61
|
funcao(tipo: string): FuncaoDeclaracao;
|
|
61
62
|
abstract corpoDaFuncao(tipo: string): FuncaoConstruto;
|
|
62
63
|
declaracaoDeClasse(): Classe;
|
|
64
|
+
protected logicaComumParametros(): ParametroInterface[];
|
|
63
65
|
abstract declaracao(): Declaracao;
|
|
64
66
|
abstract analisar(retornoLexador: RetornoLexador, hashArquivo?: number): RetornoAvaliadorSintatico;
|
|
65
67
|
}
|
|
@@ -24,6 +24,9 @@ class AvaliadorSintaticoBase {
|
|
|
24
24
|
this.erros.push(excecao);
|
|
25
25
|
return excecao;
|
|
26
26
|
}
|
|
27
|
+
simboloAnterior() {
|
|
28
|
+
return this.simbolos[this.atual - 1];
|
|
29
|
+
}
|
|
27
30
|
verificarTipoSimboloAtual(tipo) {
|
|
28
31
|
if (this.estaNoFinal())
|
|
29
32
|
return false;
|
|
@@ -51,7 +54,7 @@ class AvaliadorSintaticoBase {
|
|
|
51
54
|
return false;
|
|
52
55
|
}
|
|
53
56
|
declaracaoLeia() {
|
|
54
|
-
throw new Error('
|
|
57
|
+
throw new Error('Método não implementado.');
|
|
55
58
|
}
|
|
56
59
|
finalizarChamada(entidadeChamada) {
|
|
57
60
|
const argumentos = [];
|
|
@@ -178,6 +181,30 @@ class AvaliadorSintaticoBase {
|
|
|
178
181
|
declaracaoDeClasse() {
|
|
179
182
|
throw new Error('Método não implementado.');
|
|
180
183
|
}
|
|
184
|
+
logicaComumParametros() {
|
|
185
|
+
const parametros = [];
|
|
186
|
+
do {
|
|
187
|
+
if (parametros.length >= 255) {
|
|
188
|
+
this.erro(this.simbolos[this.atual], 'Não pode haver mais de 255 parâmetros');
|
|
189
|
+
}
|
|
190
|
+
const parametro = {};
|
|
191
|
+
if (this.simbolos[this.atual].tipo === comum_1.default.MULTIPLICACAO) {
|
|
192
|
+
this.consumir(comum_1.default.MULTIPLICACAO, null);
|
|
193
|
+
parametro.tipo = 'estrela';
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
parametro.tipo = 'padrao';
|
|
197
|
+
}
|
|
198
|
+
parametro.nome = this.consumir(comum_1.default.IDENTIFICADOR, 'Esperado nome do parâmetro.');
|
|
199
|
+
if (this.verificarSeSimboloAtualEIgualA(comum_1.default.IGUAL)) {
|
|
200
|
+
parametro.valorPadrao = this.primario();
|
|
201
|
+
}
|
|
202
|
+
parametros.push(parametro);
|
|
203
|
+
if (parametro.tipo === 'estrela')
|
|
204
|
+
break;
|
|
205
|
+
} while (this.verificarSeSimboloAtualEIgualA(comum_1.default.VIRGULA));
|
|
206
|
+
return parametros;
|
|
207
|
+
}
|
|
181
208
|
}
|
|
182
209
|
exports.AvaliadorSintaticoBase = AvaliadorSintaticoBase;
|
|
183
210
|
//# sourceMappingURL=avaliador-sintatico-base.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avaliador-sintatico-base.js","sourceRoot":"","sources":["../../../fontes/avaliador-sintatico/avaliador-sintatico-base.ts"],"names":[],"mappings":";;;;;;AAAA,8CAA6F;AAC7F,gDAkBwB;AAGxB,yEAAoE;AAEpE,uEAAyD;AAEzD;;;;GAIG;AACH,MAAsB,sBAAsB;IAQxC,QAAQ,CAAC,IAAY,EAAE,cAAsB;QACzC,IAAI,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,wBAAwB,EAAE,CAAC;QACjF,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,CAAC,OAAyB,EAAE,cAAsB;QAClD,MAAM,OAAO,GAAG,IAAI,iDAAsB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACpE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,yBAAyB,CAAC,IAAY;QAClC,IAAI,IAAI,CAAC,WAAW,EAAE;YAAE,OAAO,KAAK,CAAC;QACrC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;IACnD,CAAC;IAED,2BAA2B,CAAC,IAAY;QACpC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;IACvD,CAAC;IAED,WAAW;QACP,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC/C,CAAC;IAED,wBAAwB;QACpB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,8BAA8B,CAAC,GAAG,UAAoB;QAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,EAAE;gBAC3C,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAChC,OAAO,IAAI,CAAC;aACf;SACJ;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,cAAc;QACV,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"avaliador-sintatico-base.js","sourceRoot":"","sources":["../../../fontes/avaliador-sintatico/avaliador-sintatico-base.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Construto, FuncaoConstruto } from '../../construtos';
|
|
2
|
-
import { Escreva, Declaracao, Enquanto, Para, Escolha, Fazer, Se } from '../../declaracoes';
|
|
2
|
+
import { Escreva, Declaracao, Enquanto, Para, Escolha, Fazer, Se, Retorna } from '../../declaracoes';
|
|
3
3
|
import { RetornoLexador, RetornoAvaliadorSintatico } from '../../interfaces/retornos';
|
|
4
4
|
import { AvaliadorSintaticoBase } from '../avaliador-sintatico-base';
|
|
5
5
|
export declare class AvaliadorSintaticoBirl extends AvaliadorSintaticoBase {
|
|
@@ -8,14 +8,15 @@ export declare class AvaliadorSintaticoBirl extends AvaliadorSintaticoBase {
|
|
|
8
8
|
primario(): Construto;
|
|
9
9
|
chamar(): Construto;
|
|
10
10
|
atribuir(): Construto;
|
|
11
|
-
declaracaoEscreva(): Escreva;
|
|
12
11
|
blocoEscopo(): Declaracao[];
|
|
13
12
|
declaracaoEnquanto(): Enquanto;
|
|
14
13
|
declaracaoPara(): Para;
|
|
15
14
|
declaracaoEscolha(): Escolha;
|
|
15
|
+
declaracaoEscreva(): Escreva;
|
|
16
16
|
declaracaoFazer(): Fazer;
|
|
17
|
+
declaracaoRetorna(): Retorna;
|
|
17
18
|
declaracaoSe(): Se;
|
|
18
19
|
corpoDaFuncao(tipo: string): FuncaoConstruto;
|
|
19
|
-
declaracao():
|
|
20
|
+
declaracao(): any;
|
|
20
21
|
analisar(retornoLexador: RetornoLexador, hashArquivo?: number): RetornoAvaliadorSintatico;
|
|
21
22
|
}
|
|
@@ -4,8 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.AvaliadorSintaticoBirl = void 0;
|
|
7
|
+
const construtos_1 = require("../../construtos");
|
|
8
|
+
const declaracoes_1 = require("../../declaracoes");
|
|
7
9
|
const avaliador_sintatico_base_1 = require("../avaliador-sintatico-base");
|
|
8
|
-
const erro_avaliador_sintatico_1 = require("../erro-avaliador-sintatico");
|
|
9
10
|
const birl_1 = __importDefault(require("../../tipos-de-simbolos/birl"));
|
|
10
11
|
class AvaliadorSintaticoBirl extends avaliador_sintatico_base_1.AvaliadorSintaticoBase {
|
|
11
12
|
validarSegmentoHoraDoShow() {
|
|
@@ -19,49 +20,121 @@ class AvaliadorSintaticoBirl extends avaliador_sintatico_base_1.AvaliadorSintati
|
|
|
19
20
|
this.blocos -= 1;
|
|
20
21
|
}
|
|
21
22
|
primario() {
|
|
22
|
-
|
|
23
|
+
const simboloAtual = this.simbolos[this.atual];
|
|
24
|
+
if (this.verificarSeSimboloAtualEIgualA(birl_1.default.NEGATIVO))
|
|
25
|
+
return new construtos_1.Literal(this.hashArquivo, Number(simboloAtual.linha), false);
|
|
26
|
+
if (this.verificarSeSimboloAtualEIgualA(birl_1.default.POSITIVO))
|
|
27
|
+
return new construtos_1.Literal(this.hashArquivo, Number(simboloAtual.linha), true);
|
|
28
|
+
/* if (
|
|
29
|
+
this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.IDENTIFICADOR, tiposDeSimbolos.METODO_BIBLIOTECA_GLOBAL)
|
|
30
|
+
) {
|
|
31
|
+
return new Variavel(this.hashArquivo, this.simbolos[this.atual - 1]);
|
|
32
|
+
} */
|
|
33
|
+
if (this.verificarSeSimboloAtualEIgualA(birl_1.default.NUMERO, birl_1.default.FRANGAO, birl_1.default.FRANGÃO, birl_1.default.FRANGO, birl_1.default.TEXTO)) {
|
|
34
|
+
const simboloAnterior = this.simbolos[this.atual - 1];
|
|
35
|
+
return new construtos_1.Literal(this.hashArquivo, Number(simboloAnterior.linha), simboloAnterior.literal);
|
|
36
|
+
}
|
|
37
|
+
if (this.verificarSeSimboloAtualEIgualA(birl_1.default.PARENTESE_ESQUERDO)) {
|
|
38
|
+
const expressao = this.expressao();
|
|
39
|
+
this.consumir(birl_1.default.PARENTESE_DIREITO, "Esperado ')' após a expressão.");
|
|
40
|
+
return new construtos_1.Agrupamento(this.hashArquivo, Number(simboloAtual.linha), expressao);
|
|
41
|
+
}
|
|
23
42
|
}
|
|
24
43
|
chamar() {
|
|
25
44
|
return this.primario();
|
|
26
45
|
}
|
|
27
46
|
atribuir() {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
47
|
+
const expressao = this.ou();
|
|
48
|
+
if (this.verificarSeSimboloAtualEIgualA(birl_1.default.IGUAL)) {
|
|
49
|
+
const igual = this.simboloAnterior();
|
|
50
|
+
const valor = this.atribuir();
|
|
51
|
+
if (expressao instanceof construtos_1.Variavel) {
|
|
52
|
+
const simbolo = expressao.simbolo;
|
|
53
|
+
return new construtos_1.Atribuir(this.hashArquivo, simbolo, valor);
|
|
54
|
+
}
|
|
55
|
+
else if (expressao instanceof construtos_1.AcessoMetodo) {
|
|
56
|
+
const get = expressao;
|
|
57
|
+
return new construtos_1.DefinirValor(this.hashArquivo, 0, get.objeto, get.simbolo, valor);
|
|
58
|
+
}
|
|
59
|
+
else if (expressao instanceof construtos_1.AcessoIndiceVariavel) {
|
|
60
|
+
return new construtos_1.AtribuicaoSobrescrita(this.hashArquivo, 0, expressao.entidadeChamada, expressao.indice, valor);
|
|
61
|
+
}
|
|
62
|
+
this.erro(igual, 'Tarefa de atribuição inválida');
|
|
63
|
+
}
|
|
64
|
+
return expressao;
|
|
32
65
|
}
|
|
33
66
|
blocoEscopo() {
|
|
34
|
-
throw new Error('
|
|
67
|
+
throw new Error('Método não implementado.');
|
|
35
68
|
}
|
|
36
69
|
declaracaoEnquanto() {
|
|
37
|
-
throw new Error('
|
|
70
|
+
throw new Error('Método não implementado.');
|
|
38
71
|
}
|
|
39
72
|
declaracaoPara() {
|
|
40
|
-
throw new Error('
|
|
73
|
+
throw new Error('Método não implementado.');
|
|
41
74
|
}
|
|
42
75
|
declaracaoEscolha() {
|
|
43
|
-
throw new Error('
|
|
76
|
+
throw new Error('Método não implementado.');
|
|
77
|
+
}
|
|
78
|
+
declaracaoEscreva() {
|
|
79
|
+
const primeiroSimbolo = this.consumir(birl_1.default.CE, 'Esperado expressão `CE` para escrever mensagem.');
|
|
80
|
+
this.consumir(birl_1.default.QUER, 'Esperado expressão `QUER` após `CE` para escrever mensagem.');
|
|
81
|
+
this.consumir(birl_1.default.VER, 'Esperado expressão `VER` após `QUER` para escrever mensagem.');
|
|
82
|
+
this.consumir(birl_1.default.ESSA, 'Esperado expressão `ESSA` após `VER` para escrever mensagem.');
|
|
83
|
+
this.consumir(birl_1.default.PORRA, 'Esperado expressão `PORRA` após `ESSA` para escrever mensagem.');
|
|
84
|
+
this.consumir(birl_1.default.INTERROGACAO, 'Esperado interrogação após `PORRA` para escrever mensagem.');
|
|
85
|
+
this.consumir(birl_1.default.PARENTESE_ESQUERDO, 'Esperado parêntese esquerdo após interrogação para escrever mensagem.');
|
|
86
|
+
const argumento = this.declaracao();
|
|
87
|
+
this.consumir(birl_1.default.PARENTESE_DIREITO, 'Esperado parêntese direito após argumento para escrever mensagem.');
|
|
88
|
+
return new declaracoes_1.Escreva(Number(primeiroSimbolo.linha), this.hashArquivo, [argumento]);
|
|
44
89
|
}
|
|
45
90
|
declaracaoFazer() {
|
|
46
|
-
throw new Error('
|
|
91
|
+
throw new Error('Método não implementado.');
|
|
92
|
+
}
|
|
93
|
+
declaracaoRetorna() {
|
|
94
|
+
const primeiroSimbolo = this.consumir(birl_1.default.BORA, 'Esperado expressão `BORA` para retornar valor.');
|
|
95
|
+
this.consumir(birl_1.default.CUMPADE, 'Esperado expressão `CUMPADE` após `BORA` para retornar valor.');
|
|
96
|
+
this.consumir(birl_1.default.INTERROGACAO, 'Esperado interrogação após `CUMPADE` para retornar valor.');
|
|
97
|
+
const valor = this.declaracao();
|
|
98
|
+
return new declaracoes_1.Retorna(primeiroSimbolo, valor);
|
|
47
99
|
}
|
|
48
100
|
declaracaoSe() {
|
|
49
|
-
throw new Error('
|
|
101
|
+
throw new Error('Método não implementado.');
|
|
50
102
|
}
|
|
51
103
|
corpoDaFuncao(tipo) {
|
|
52
|
-
throw new Error('
|
|
104
|
+
throw new Error('Método não implementado.');
|
|
53
105
|
}
|
|
54
106
|
declaracao() {
|
|
55
|
-
|
|
107
|
+
const simboloAtual = this.simbolos[this.atual];
|
|
108
|
+
switch (simboloAtual.tipo) {
|
|
109
|
+
case birl_1.default.BORA: // BORA CUMPADE?
|
|
110
|
+
return this.declaracaoRetorna();
|
|
111
|
+
case birl_1.default.CE: // "CE QUER VER ESSA PORRA?"
|
|
112
|
+
return this.declaracaoEscreva();
|
|
113
|
+
case birl_1.default.PONTO_E_VIRGULA:
|
|
114
|
+
case birl_1.default.QUEBRA_LINHA:
|
|
115
|
+
this.avancarEDevolverAnterior();
|
|
116
|
+
return null;
|
|
117
|
+
default:
|
|
118
|
+
return this.expressao();
|
|
119
|
+
}
|
|
56
120
|
}
|
|
57
121
|
analisar(retornoLexador, hashArquivo) {
|
|
122
|
+
this.erros = [];
|
|
58
123
|
this.blocos = 0;
|
|
124
|
+
this.atual = 0;
|
|
59
125
|
// 1 validação
|
|
60
|
-
if (this.blocos > 0) {
|
|
61
|
-
throw new
|
|
62
|
-
|
|
126
|
+
/* if (this.blocos > 0) {
|
|
127
|
+
throw new ErroAvaliadorSintatico(
|
|
128
|
+
null,
|
|
129
|
+
'Quantidade de blocos abertos não corresponde com a quantidade de blocos fechados'
|
|
130
|
+
);
|
|
131
|
+
} */
|
|
132
|
+
this.simbolos = retornoLexador.simbolos;
|
|
63
133
|
const declaracoes = [];
|
|
64
134
|
this.validarSegmentoHoraDoShow();
|
|
135
|
+
while (!this.estaNoFinal() && this.simbolos[this.atual].tipo !== birl_1.default.BIRL) {
|
|
136
|
+
declaracoes.push(this.declaracao());
|
|
137
|
+
}
|
|
65
138
|
this.validarSegmentoBirlFinal();
|
|
66
139
|
return {
|
|
67
140
|
declaracoes: declaracoes.filter((d) => d),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avaliador-sintatico-birl.js","sourceRoot":"","sources":["../../../../fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"avaliador-sintatico-birl.js","sourceRoot":"","sources":["../../../../fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Construto, FuncaoConstruto } from "../../construtos";
|
|
2
|
+
import { Escreva, Declaracao, Se, Enquanto, Para, Escolha, Fazer } from "../../declaracoes";
|
|
3
|
+
import { RetornoLexador, RetornoAvaliadorSintatico } from "../../interfaces/retornos";
|
|
4
|
+
import { AvaliadorSintaticoBase } from "../avaliador-sintatico-base";
|
|
5
|
+
/**
|
|
6
|
+
* O avaliador sintático (Parser) é responsável por transformar os símbolos do Lexador em estruturas de alto nível.
|
|
7
|
+
* Essas estruturas de alto nível são as partes que executam lógica de programação de fato.
|
|
8
|
+
* Há dois grupos de estruturas de alto nível: Construtos e Declarações.
|
|
9
|
+
*/
|
|
10
|
+
export declare class AvaliadorSintaticoPortugolStudio extends AvaliadorSintaticoBase {
|
|
11
|
+
private validarEscopoPrograma;
|
|
12
|
+
primario(): Construto;
|
|
13
|
+
chamar(): Construto;
|
|
14
|
+
atribuir(): Construto;
|
|
15
|
+
declaracaoEscreva(): Escreva;
|
|
16
|
+
blocoEscopo(): Declaracao[];
|
|
17
|
+
declaracaoSe(): Se;
|
|
18
|
+
declaracaoEnquanto(): Enquanto;
|
|
19
|
+
declaracaoPara(): Para;
|
|
20
|
+
declaracaoEscolha(): Escolha;
|
|
21
|
+
declaracaoFazer(): Fazer;
|
|
22
|
+
corpoDaFuncao(tipo: string): FuncaoConstruto;
|
|
23
|
+
expressao(): Construto;
|
|
24
|
+
declaracao(): Declaracao | Declaracao[] | Construto | Construto[] | any;
|
|
25
|
+
analisar(retornoLexador: RetornoLexador, hashArquivo?: number): RetornoAvaliadorSintatico;
|
|
26
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AvaliadorSintaticoPortugolStudio = void 0;
|
|
7
|
+
const construtos_1 = require("../../construtos");
|
|
8
|
+
const declaracoes_1 = require("../../declaracoes");
|
|
9
|
+
const avaliador_sintatico_base_1 = require("../avaliador-sintatico-base");
|
|
10
|
+
const portugol_studio_1 = __importDefault(require("../../tipos-de-simbolos/portugol-studio"));
|
|
11
|
+
/**
|
|
12
|
+
* O avaliador sintático (Parser) é responsável por transformar os símbolos do Lexador em estruturas de alto nível.
|
|
13
|
+
* Essas estruturas de alto nível são as partes que executam lógica de programação de fato.
|
|
14
|
+
* Há dois grupos de estruturas de alto nível: Construtos e Declarações.
|
|
15
|
+
*/
|
|
16
|
+
class AvaliadorSintaticoPortugolStudio extends avaliador_sintatico_base_1.AvaliadorSintaticoBase {
|
|
17
|
+
validarEscopoPrograma(declaracoes) {
|
|
18
|
+
this.consumir(portugol_studio_1.default.PROGRAMA, "Esperada expressão 'programa' para inicializar programa.");
|
|
19
|
+
this.consumir(portugol_studio_1.default.CHAVE_ESQUERDA, "Esperada chave esquerda após expressão 'programa' para inicializar programa.");
|
|
20
|
+
while (!this.estaNoFinal()) {
|
|
21
|
+
declaracoes.push(this.declaracao());
|
|
22
|
+
}
|
|
23
|
+
if (this.simbolos[this.atual - 1].tipo !== portugol_studio_1.default.CHAVE_DIREITA) {
|
|
24
|
+
throw this.erro(this.simbolos[this.atual - 1], "Esperado chave direita final para término do programa.");
|
|
25
|
+
}
|
|
26
|
+
const encontrarDeclaracaoInicio = declaracoes.filter(d => d instanceof declaracoes_1.FuncaoDeclaracao && d.simbolo.lexema === 'inicio');
|
|
27
|
+
if (encontrarDeclaracaoInicio.length <= 0) {
|
|
28
|
+
throw this.erro(this.simbolos[0], "Função 'inicio()' para iniciar o programa não foi definida.");
|
|
29
|
+
}
|
|
30
|
+
// A última declaração do programa deve ser uma chamada a inicio()
|
|
31
|
+
const declaracaoInicio = encontrarDeclaracaoInicio[0];
|
|
32
|
+
declaracoes.push(new declaracoes_1.Expressao(new construtos_1.Chamada(declaracaoInicio.hashArquivo, declaracaoInicio.funcao, null, [])));
|
|
33
|
+
}
|
|
34
|
+
primario() {
|
|
35
|
+
if (this.verificarSeSimboloAtualEIgualA(portugol_studio_1.default.REAL, portugol_studio_1.default.CADEIA)) {
|
|
36
|
+
const simboloAnterior = this.simbolos[this.atual - 1];
|
|
37
|
+
return new construtos_1.Literal(this.hashArquivo, Number(simboloAnterior.linha), simboloAnterior.literal);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
chamar() {
|
|
41
|
+
let expressao = this.primario();
|
|
42
|
+
while (true) {
|
|
43
|
+
if (this.verificarSeSimboloAtualEIgualA(portugol_studio_1.default.PARENTESE_ESQUERDO)) {
|
|
44
|
+
expressao = this.finalizarChamada(expressao);
|
|
45
|
+
}
|
|
46
|
+
else if (this.verificarSeSimboloAtualEIgualA(portugol_studio_1.default.COLCHETE_ESQUERDO)) {
|
|
47
|
+
const indices = [];
|
|
48
|
+
do {
|
|
49
|
+
indices.push(this.expressao());
|
|
50
|
+
} while (this.verificarSeSimboloAtualEIgualA(portugol_studio_1.default.VIRGULA));
|
|
51
|
+
const indice = indices[0];
|
|
52
|
+
const simboloFechamento = this.consumir(portugol_studio_1.default.COLCHETE_DIREITO, "Esperado ']' após escrita do indice.");
|
|
53
|
+
expressao = new construtos_1.AcessoIndiceVariavel(this.hashArquivo, expressao, indice, simboloFechamento);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return expressao;
|
|
60
|
+
}
|
|
61
|
+
atribuir() {
|
|
62
|
+
const expressao = this.ou();
|
|
63
|
+
if (this.verificarSeSimboloAtualEIgualA(portugol_studio_1.default.IGUAL)) {
|
|
64
|
+
const setaAtribuicao = this.simbolos[this.atual - 1];
|
|
65
|
+
const valor = this.atribuir();
|
|
66
|
+
if (expressao instanceof construtos_1.Variavel) {
|
|
67
|
+
const simbolo = expressao.simbolo;
|
|
68
|
+
return new construtos_1.Atribuir(this.hashArquivo, simbolo, valor);
|
|
69
|
+
}
|
|
70
|
+
else if (expressao instanceof construtos_1.AcessoIndiceVariavel) {
|
|
71
|
+
return new construtos_1.AtribuicaoSobrescrita(this.hashArquivo, expressao.linha, expressao.entidadeChamada, expressao.indice, valor);
|
|
72
|
+
}
|
|
73
|
+
this.erro(setaAtribuicao, 'Tarefa de atribuição inválida');
|
|
74
|
+
}
|
|
75
|
+
return expressao;
|
|
76
|
+
}
|
|
77
|
+
declaracaoEscreva() {
|
|
78
|
+
const simboloAtual = this.avancarEDevolverAnterior();
|
|
79
|
+
this.consumir(portugol_studio_1.default.PARENTESE_ESQUERDO, "Esperado '(' antes dos valores em escreva.");
|
|
80
|
+
const argumentos = [];
|
|
81
|
+
do {
|
|
82
|
+
argumentos.push(this.expressao());
|
|
83
|
+
} while (this.verificarSeSimboloAtualEIgualA(portugol_studio_1.default.VIRGULA));
|
|
84
|
+
this.consumir(portugol_studio_1.default.PARENTESE_DIREITO, "Esperado ')' após os valores em escreva.");
|
|
85
|
+
return new declaracoes_1.Escreva(Number(simboloAtual.linha), simboloAtual.hashArquivo, argumentos);
|
|
86
|
+
}
|
|
87
|
+
blocoEscopo() {
|
|
88
|
+
const declaracoes = [];
|
|
89
|
+
while (!this.verificarTipoSimboloAtual(portugol_studio_1.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
|
|
90
|
+
declaracoes.push(this.declaracao());
|
|
91
|
+
}
|
|
92
|
+
this.consumir(portugol_studio_1.default.CHAVE_DIREITA, "Esperado '}' após o bloco.");
|
|
93
|
+
return declaracoes;
|
|
94
|
+
}
|
|
95
|
+
declaracaoSe() {
|
|
96
|
+
throw new Error("Método não implementado.");
|
|
97
|
+
}
|
|
98
|
+
declaracaoEnquanto() {
|
|
99
|
+
throw new Error("Método não implementado.");
|
|
100
|
+
}
|
|
101
|
+
declaracaoPara() {
|
|
102
|
+
throw new Error("Método não implementado.");
|
|
103
|
+
}
|
|
104
|
+
declaracaoEscolha() {
|
|
105
|
+
throw new Error("Método não implementado.");
|
|
106
|
+
}
|
|
107
|
+
declaracaoFazer() {
|
|
108
|
+
throw new Error("Método não implementado.");
|
|
109
|
+
}
|
|
110
|
+
corpoDaFuncao(tipo) {
|
|
111
|
+
// O parêntese esquerdo é considerado o símbolo inicial para
|
|
112
|
+
// fins de pragma.
|
|
113
|
+
const parenteseEsquerdo = this.consumir(portugol_studio_1.default.PARENTESE_ESQUERDO, `Esperado '(' após o nome ${tipo}.`);
|
|
114
|
+
let parametros = [];
|
|
115
|
+
if (!this.verificarTipoSimboloAtual(portugol_studio_1.default.PARENTESE_DIREITO)) {
|
|
116
|
+
parametros = this.logicaComumParametros();
|
|
117
|
+
}
|
|
118
|
+
this.consumir(portugol_studio_1.default.PARENTESE_DIREITO, "Esperado ')' após parâmetros.");
|
|
119
|
+
this.consumir(portugol_studio_1.default.CHAVE_ESQUERDA, `Esperado '{' antes do escopo do ${tipo}.`);
|
|
120
|
+
const corpo = this.blocoEscopo();
|
|
121
|
+
return new construtos_1.FuncaoConstruto(this.hashArquivo, Number(parenteseEsquerdo.linha), parametros, corpo);
|
|
122
|
+
}
|
|
123
|
+
expressao() {
|
|
124
|
+
// if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.LEIA)) return this.declaracaoLeia();
|
|
125
|
+
return this.atribuir();
|
|
126
|
+
}
|
|
127
|
+
declaracao() {
|
|
128
|
+
const simboloAtual = this.simbolos[this.atual];
|
|
129
|
+
switch (simboloAtual.tipo) {
|
|
130
|
+
case portugol_studio_1.default.ESCREVA:
|
|
131
|
+
return this.declaracaoEscreva();
|
|
132
|
+
case portugol_studio_1.default.FUNCAO:
|
|
133
|
+
return this.funcao('funcao');
|
|
134
|
+
case portugol_studio_1.default.PROGRAMA:
|
|
135
|
+
case portugol_studio_1.default.CHAVE_DIREITA:
|
|
136
|
+
this.avancarEDevolverAnterior();
|
|
137
|
+
return null;
|
|
138
|
+
default:
|
|
139
|
+
return this.expressao();
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
analisar(retornoLexador, hashArquivo) {
|
|
143
|
+
this.erros = [];
|
|
144
|
+
this.atual = 0;
|
|
145
|
+
this.blocos = 0;
|
|
146
|
+
this.hashArquivo = hashArquivo || 0;
|
|
147
|
+
this.simbolos = (retornoLexador === null || retornoLexador === void 0 ? void 0 : retornoLexador.simbolos) || [];
|
|
148
|
+
const declaracoes = [];
|
|
149
|
+
this.validarEscopoPrograma(declaracoes);
|
|
150
|
+
return {
|
|
151
|
+
declaracoes: declaracoes.filter(d => d),
|
|
152
|
+
erros: this.erros,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
exports.AvaliadorSintaticoPortugolStudio = AvaliadorSintaticoPortugolStudio;
|
|
157
|
+
//# sourceMappingURL=avaliador-sintatico-portugol-studio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avaliador-sintatico-portugol-studio.js","sourceRoot":"","sources":["../../../../fontes/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-studio.ts"],"names":[],"mappings":"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"}
|
package/fontes/delegua.d.ts
CHANGED
|
@@ -64,7 +64,7 @@ export declare class Delegua implements DeleguaInterface {
|
|
|
64
64
|
* Se verdadeiro, os arquivos de saída são escritos no mesmo diretório
|
|
65
65
|
* do arquivo passado no primeiro parâmetro.
|
|
66
66
|
*/
|
|
67
|
-
traduzirArquivo(caminhoRelativoArquivo: string, gerarArquivoSaida: boolean): any;
|
|
67
|
+
traduzirArquivo(caminhoRelativoArquivo: string, gerarArquivoSaida: boolean, extensaoArquivoSaida: string): any;
|
|
68
68
|
executarCodigoComoArgumento(codigo: string): Promise<void>;
|
|
69
69
|
/**
|
|
70
70
|
* Execução por arquivo.
|
package/fontes/delegua.js
CHANGED
|
@@ -50,6 +50,8 @@ const avaliador_sintatico_birl_1 = require("./avaliador-sintatico/dialetos/avali
|
|
|
50
50
|
const tradutores_1 = require("./tradutores");
|
|
51
51
|
const visualg_1 = require("./interpretador/dialetos/visualg");
|
|
52
52
|
const dialetos_2 = require("./interpretador/dialetos");
|
|
53
|
+
const lexador_portugol_studio_1 = require("./lexador/dialetos/lexador-portugol-studio");
|
|
54
|
+
const avaliador_sintatico_portugol_studio_1 = require("./avaliador-sintatico/dialetos/avaliador-sintatico-portugol-studio");
|
|
53
55
|
/**
|
|
54
56
|
* O núcleo da linguagem.
|
|
55
57
|
*
|
|
@@ -62,6 +64,7 @@ class Delegua {
|
|
|
62
64
|
delegua: 'padrão',
|
|
63
65
|
egua: 'Égua',
|
|
64
66
|
eguap: 'ÉguaP',
|
|
67
|
+
'portugol-studio': 'Portugol Studio',
|
|
65
68
|
visualg: 'VisuAlg',
|
|
66
69
|
};
|
|
67
70
|
this.arquivosAbertos = {};
|
|
@@ -93,6 +96,14 @@ class Delegua {
|
|
|
93
96
|
? new interpretador_com_depuracao_1.InterpretadorComDepuracao(this.importador, process.cwd(), funcaoDeRetorno)
|
|
94
97
|
: new interpretador_1.Interpretador(this.importador, process.cwd(), performance, funcaoDeRetorno);
|
|
95
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;
|
|
96
107
|
case 'visualg':
|
|
97
108
|
this.lexador = new lexador_visualg_1.LexadorVisuAlg();
|
|
98
109
|
this.avaliadorSintatico = new avaliador_sintatico_visualg_1.AvaliadorSintaticoVisuAlg();
|
|
@@ -224,7 +235,7 @@ class Delegua {
|
|
|
224
235
|
* Se verdadeiro, os arquivos de saída são escritos no mesmo diretório
|
|
225
236
|
* do arquivo passado no primeiro parâmetro.
|
|
226
237
|
*/
|
|
227
|
-
traduzirArquivo(caminhoRelativoArquivo, gerarArquivoSaida) {
|
|
238
|
+
traduzirArquivo(caminhoRelativoArquivo, gerarArquivoSaida, extensaoArquivoSaida) {
|
|
228
239
|
const caminhoAbsolutoPrimeiroArquivo = caminho.resolve(caminhoRelativoArquivo);
|
|
229
240
|
const novoDiretorioBase = caminho.dirname(caminhoAbsolutoPrimeiroArquivo);
|
|
230
241
|
this.importador.diretorioBase = novoDiretorioBase;
|
|
@@ -240,9 +251,9 @@ class Delegua {
|
|
|
240
251
|
resultado = this.tradutorReversoJavascript.traduzir(retornoImportador.conteudoArquivo.join('\n'));
|
|
241
252
|
}
|
|
242
253
|
if (gerarArquivoSaida) {
|
|
243
|
-
['.delegua', '.
|
|
254
|
+
['.delegua', '.js'].map((extensao) => {
|
|
244
255
|
if (caminhoAbsolutoPrimeiroArquivo.includes(extensao)) {
|
|
245
|
-
fs.writeFile(caminhoAbsolutoPrimeiroArquivo.replace(extensao,
|
|
256
|
+
fs.writeFile(caminhoAbsolutoPrimeiroArquivo.replace(extensao, `.${extensaoArquivoSaida}`), resultado, (erro) => {
|
|
246
257
|
if (erro)
|
|
247
258
|
throw erro;
|
|
248
259
|
});
|