@designliquido/delegua 0.52.2 → 0.53.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/avaliador-sintatico/avaliador-sintatico.d.ts +38 -3
- package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.js +112 -14
- package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/bin/package.json +1 -1
- package/construtos/enquanto-como-construto.d.ts +14 -0
- package/construtos/enquanto-como-construto.d.ts.map +1 -0
- package/construtos/enquanto-como-construto.js +19 -0
- package/construtos/enquanto-como-construto.js.map +1 -0
- package/construtos/fazer-como-construto.d.ts +14 -0
- package/construtos/fazer-como-construto.d.ts.map +1 -0
- package/construtos/fazer-como-construto.js +19 -0
- package/construtos/fazer-como-construto.js.map +1 -0
- package/construtos/index.d.ts +4 -0
- package/construtos/index.d.ts.map +1 -1
- package/construtos/index.js +4 -0
- package/construtos/index.js.map +1 -1
- package/construtos/para-cada-como-construto.d.ts +18 -0
- package/construtos/para-cada-como-construto.d.ts.map +1 -0
- package/construtos/para-cada-como-construto.js +21 -0
- package/construtos/para-cada-como-construto.js.map +1 -0
- package/construtos/para-como-construto.d.ts +19 -0
- package/construtos/para-como-construto.d.ts.map +1 -0
- package/construtos/para-como-construto.js +24 -0
- package/construtos/para-como-construto.js.map +1 -0
- package/declaracoes/bloco.d.ts.map +1 -1
- package/declaracoes/bloco.js +2 -0
- package/declaracoes/bloco.js.map +1 -1
- package/declaracoes/enquanto.d.ts +2 -1
- package/declaracoes/enquanto.d.ts.map +1 -1
- package/declaracoes/enquanto.js.map +1 -1
- package/declaracoes/fazer.d.ts +2 -1
- package/declaracoes/fazer.d.ts.map +1 -1
- package/declaracoes/fazer.js.map +1 -1
- package/declaracoes/para-cada.d.ts +5 -4
- package/declaracoes/para-cada.d.ts.map +1 -1
- package/declaracoes/para-cada.js +1 -1
- package/declaracoes/para-cada.js.map +1 -1
- package/declaracoes/para.d.ts +2 -1
- package/declaracoes/para.d.ts.map +1 -1
- package/declaracoes/para.js.map +1 -1
- package/formatadores/formatador-delegua.js +1 -1
- package/formatadores/formatador-delegua.js.map +1 -1
- package/interfaces/delegua/enquanto-interface.d.ts +9 -0
- package/interfaces/delegua/enquanto-interface.d.ts.map +1 -0
- package/interfaces/delegua/enquanto-interface.js +3 -0
- package/interfaces/delegua/enquanto-interface.js.map +1 -0
- package/interfaces/delegua/fazer-interface.d.ts +9 -0
- package/interfaces/delegua/fazer-interface.d.ts.map +1 -0
- package/interfaces/delegua/fazer-interface.js +3 -0
- package/interfaces/delegua/fazer-interface.js.map +1 -0
- package/interfaces/delegua/index.d.ts +5 -0
- package/interfaces/delegua/index.d.ts.map +1 -0
- package/interfaces/delegua/index.js +21 -0
- package/interfaces/delegua/index.js.map +1 -0
- package/interfaces/delegua/para-cada-interface.d.ts +11 -0
- package/interfaces/delegua/para-cada-interface.d.ts.map +1 -0
- package/interfaces/delegua/para-cada-interface.js +3 -0
- package/interfaces/delegua/para-cada-interface.js.map +1 -0
- package/interfaces/delegua/para-interface.d.ts +14 -0
- package/interfaces/delegua/para-interface.d.ts.map +1 -0
- package/interfaces/delegua/para-interface.js +3 -0
- package/interfaces/delegua/para-interface.js.map +1 -0
- package/interfaces/index.d.ts +1 -0
- package/interfaces/index.d.ts.map +1 -1
- package/interfaces/index.js +1 -0
- package/interfaces/index.js.map +1 -1
- package/interfaces/retornos/retorno-execucao-interface.d.ts +2 -1
- package/interfaces/retornos/retorno-execucao-interface.d.ts.map +1 -1
- package/interfaces/visitante-comum-interface.d.ts +1 -2
- package/interfaces/visitante-comum-interface.d.ts.map +1 -1
- package/interfaces/visitante-delegua-interface.d.ts +12 -0
- package/interfaces/visitante-delegua-interface.d.ts.map +1 -0
- package/interfaces/visitante-delegua-interface.js +3 -0
- package/interfaces/visitante-delegua-interface.js.map +1 -0
- package/interpretador/depuracao/comum.d.ts.map +1 -1
- package/interpretador/depuracao/comum.js +21 -20
- package/interpretador/depuracao/comum.js.map +1 -1
- package/interpretador/depuracao/interpretador-com-depuracao.d.ts.map +1 -1
- package/interpretador/depuracao/interpretador-com-depuracao.js +1 -3
- package/interpretador/depuracao/interpretador-com-depuracao.js.map +1 -1
- package/interpretador/interpretador-base.d.ts +1 -2
- package/interpretador/interpretador-base.d.ts.map +1 -1
- package/interpretador/interpretador-base.js +0 -48
- package/interpretador/interpretador-base.js.map +1 -1
- package/interpretador/interpretador-com-depuracao.d.ts.map +1 -1
- package/interpretador/interpretador-com-depuracao.js +1 -3
- package/interpretador/interpretador-com-depuracao.js.map +1 -1
- package/interpretador/interpretador.d.ts +25 -5
- package/interpretador/interpretador.d.ts.map +1 -1
- package/interpretador/interpretador.js +210 -2
- package/interpretador/interpretador.js.map +1 -1
- package/package.json +1 -1
- package/tradutores/tradutor-assemblyscript.js +1 -1
- package/tradutores/tradutor-assemblyscript.js.map +1 -1
- package/tradutores/tradutor-javascript.js +1 -1
- package/tradutores/tradutor-javascript.js.map +1 -1
- package/tradutores/tradutor-mermaidjs.js +1 -1
- package/tradutores/tradutor-mermaidjs.js.map +1 -1
- package/tradutores/tradutor-python.js +1 -1
- package/tradutores/tradutor-python.js.map +1 -1
- package/tradutores/tradutor-reverso-tenda.js +1 -1
- package/tradutores/tradutor-reverso-tenda.js.map +1 -1
- package/umd/delegua.js +821 -465
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<h3 align="center">Linguagem Delégua</h3>
|
|
5
5
|
|
|
6
6
|
<p align="center">
|
|
7
|
-
Linguagem de programação 100% em português com suporte a múltiplos dialetos, como Portugol VisuAlg, Portugol Studio, Mapler e BIRL.</a>
|
|
7
|
+
Linguagem de programação 100% em português com suporte a múltiplos dialetos, como variações de Portugol (VisuAlg, Portugol Studio, Portugol IPT, Mapler), e outros (Pituguês, BIRL, Calango).</a>
|
|
8
8
|
</p>
|
|
9
9
|
|
|
10
10
|
<p align="center">
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
|
|
44
44
|
## Introdução
|
|
45
45
|
|
|
46
|
-
Delégua é uma linguagem de programação baseada na língua portuguesa, cujo código começou como uma variação (_fork_) da [linguagem Égua](https://egua.dev)
|
|
46
|
+
Delégua é uma linguagem de programação baseada na língua portuguesa, usada para fins educacionais e comerciais pela Design Líquido, cujo código começou como uma variação (_fork_) da [linguagem Égua](https://egua.dev). A variação começou na versão 1.2.0 de Égua.
|
|
47
47
|
|
|
48
48
|
Delégua tem retrocompatibilidade parcial com a linguagem Égua e compreende sua extensão de arquivo (`.egua`), para
|
|
49
49
|
aplicações por linha de comando. Em outras palavras, todo programa escrito em Égua funciona no dialeto de Delégua correspondente. No mais, Delégua se diferenciou substancialmente de Égua com o passar dos anos, [e essas diferenças estão descritas em nossa documentação](https://github.com/DesignLiquido/delegua/wiki).
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { AcessoMetodoOuPropriedade, Chamada, Construto, Decorador, Dicionario, FuncaoConstruto, Leia, Tupla } from '../construtos';
|
|
1
|
+
import { AcessoMetodoOuPropriedade, Chamada, Construto, Decorador, Dicionario, EnquantoComoConstruto, FuncaoConstruto, Leia, ParaCadaComoConstruto, ParaComoConstruto, Tupla, Variavel } from '../construtos';
|
|
2
2
|
import { AvaliadorSintaticoInterface, ParametroInterface, SimboloInterface } from '../interfaces';
|
|
3
3
|
import { ErroAvaliadorSintatico } from './erro-avaliador-sintatico';
|
|
4
|
-
import { Classe, Comentario, Const, Continua, Declaracao, Enquanto, Escolha, Escreva, Expressao, Falhar, Fazer, FuncaoDeclaracao, Importar, Para, ParaCada, Retorna, Se, Sustar, TendoComo, Tente, Var } from '../declaracoes';
|
|
4
|
+
import { Bloco, Classe, Comentario, Const, Continua, Declaracao, Enquanto, Escolha, Escreva, Expressao, Falhar, Fazer, FuncaoDeclaracao, Importar, Para, ParaCada, Retorna, Se, Sustar, TendoComo, Tente, Var } from '../declaracoes';
|
|
5
5
|
import { RetornoAvaliadorSintatico } from '../interfaces/retornos/retorno-avaliador-sintatico';
|
|
6
6
|
import { RetornoLexador } from '../interfaces/retornos/retorno-lexador';
|
|
7
7
|
import { AvaliadorSintaticoBase } from './avaliador-sintatico-base';
|
|
@@ -51,6 +51,16 @@ export declare class AvaliadorSintatico extends AvaliadorSintaticoBase implement
|
|
|
51
51
|
protected obterChaveDicionario(): Construto;
|
|
52
52
|
protected construtoDicionario(simboloChaveEsquerda: SimboloInterface): Dicionario;
|
|
53
53
|
protected construtoTupla(): Tupla;
|
|
54
|
+
protected enquantoComoConstruto(): EnquantoComoConstruto;
|
|
55
|
+
protected fazerComoConstruto(simboloFazer: SimboloInterface): Construto;
|
|
56
|
+
protected paraCadaComoConstrutoVetor(simboloPara: SimboloInterface): ParaCadaComoConstruto;
|
|
57
|
+
protected paraCadaComoConstrutoDicionario(simboloPara: SimboloInterface): ParaCadaComoConstruto;
|
|
58
|
+
protected paraCadaComoConstruto(simboloPara: SimboloInterface): ParaCadaComoConstruto;
|
|
59
|
+
protected paraTradicionalComoConstruto(simboloPara: SimboloInterface): ParaComoConstruto;
|
|
60
|
+
/**
|
|
61
|
+
* Método que resolve `para` ou `para cada` como construto.
|
|
62
|
+
*/
|
|
63
|
+
protected paraComoConstruto(simboloPara: SimboloInterface): ParaCadaComoConstruto | ParaComoConstruto;
|
|
54
64
|
primario(): Construto;
|
|
55
65
|
chamar(): Construto;
|
|
56
66
|
/**
|
|
@@ -101,12 +111,20 @@ export declare class AvaliadorSintatico extends AvaliadorSintaticoBase implement
|
|
|
101
111
|
protected declaracaoComentarioMultilinha(): Comentario;
|
|
102
112
|
protected declaracaoComentarioUmaLinha(): Comentario;
|
|
103
113
|
declaracaoContinua(): Continua;
|
|
114
|
+
protected logicaComumEnquanto(): {
|
|
115
|
+
condicao: Construto;
|
|
116
|
+
corpo: Bloco;
|
|
117
|
+
};
|
|
104
118
|
declaracaoEnquanto(): Enquanto;
|
|
105
119
|
protected declaracaoEscolha(): Escolha;
|
|
106
120
|
declaracaoEscreva(): Escreva;
|
|
107
121
|
protected declaracaoExpressao(): Expressao;
|
|
108
122
|
protected declaracaoFalhar(): Falhar;
|
|
109
|
-
protected
|
|
123
|
+
protected logicaComumFazer(): {
|
|
124
|
+
caminhoFazer: Declaracao | Declaracao[];
|
|
125
|
+
condicaoEnquanto: Construto;
|
|
126
|
+
};
|
|
127
|
+
protected declaracaoFazer(simboloFazer: SimboloInterface): Fazer;
|
|
110
128
|
/**
|
|
111
129
|
* O símbolo é emitido aqui para fins de formatação, mas este método é
|
|
112
130
|
* sobrescrito em `delegua-node`.
|
|
@@ -114,9 +132,26 @@ export declare class AvaliadorSintatico extends AvaliadorSintaticoBase implement
|
|
|
114
132
|
*/
|
|
115
133
|
declaracaoImportar(): Importar;
|
|
116
134
|
declaracaoPara(): Para | ParaCada;
|
|
135
|
+
protected logicaParaCadaDicionario(simboloPara: SimboloInterface): {
|
|
136
|
+
nomeVariavelChave: SimboloInterface<string>;
|
|
137
|
+
nomeVariavelValor: SimboloInterface<string>;
|
|
138
|
+
dicionario: Construto;
|
|
139
|
+
corpo: Bloco;
|
|
140
|
+
};
|
|
117
141
|
protected declaracaoParaCadaDicionario(simboloPara: SimboloInterface): ParaCada;
|
|
142
|
+
protected logicaComumParaCadaVetor(simboloPara: SimboloInterface): {
|
|
143
|
+
variavelIteracao: Variavel<string>;
|
|
144
|
+
vetor: Construto;
|
|
145
|
+
corpo: Bloco;
|
|
146
|
+
};
|
|
118
147
|
protected declaracaoParaCadaVetor(simboloPara: SimboloInterface): ParaCada;
|
|
119
148
|
protected declaracaoParaCada(simboloPara: SimboloInterface): ParaCada;
|
|
149
|
+
protected logicaComumPara(simboloPara: SimboloInterface): {
|
|
150
|
+
inicializador: Expressao | Var | Const[];
|
|
151
|
+
condicao: any;
|
|
152
|
+
incrementar: any;
|
|
153
|
+
corpo: Bloco;
|
|
154
|
+
};
|
|
120
155
|
protected declaracaoParaTradicional(simboloPara: SimboloInterface): Para;
|
|
121
156
|
declaracaoRetorna(): Retorna;
|
|
122
157
|
declaracaoSe(): Se;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avaliador-sintatico.d.ts","sourceRoot":"","sources":["../../fontes/avaliador-sintatico/avaliador-sintatico.ts"],"names":[],"mappings":"AAEA,OAAO,EAGH,yBAAyB,EAOzB,OAAO,EAGP,SAAS,EACT,SAAS,EAET,UAAU,
|
|
1
|
+
{"version":3,"file":"avaliador-sintatico.d.ts","sourceRoot":"","sources":["../../fontes/avaliador-sintatico/avaliador-sintatico.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,13 +14,13 @@ const inferenciador_1 = require("../inferenciador");
|
|
|
14
14
|
const pilha_escopos_1 = require("./pilha-escopos");
|
|
15
15
|
const informacao_escopo_1 = require("./informacao-escopo");
|
|
16
16
|
const informacao_variavel_ou_constante_1 = require("../informacao-variavel-ou-constante");
|
|
17
|
+
const comum_1 = require("./comum");
|
|
17
18
|
const delegua_1 = __importDefault(require("../tipos-de-dados/delegua"));
|
|
18
19
|
const delegua_2 = __importDefault(require("../tipos-de-simbolos/delegua"));
|
|
19
20
|
const primitivas_dicionario_1 = __importDefault(require("../bibliotecas/primitivas-dicionario"));
|
|
20
21
|
const primitivas_numero_1 = __importDefault(require("../bibliotecas/primitivas-numero"));
|
|
21
22
|
const primitivas_texto_1 = __importDefault(require("../bibliotecas/primitivas-texto"));
|
|
22
23
|
const primitivas_vetor_1 = __importDefault(require("../bibliotecas/primitivas-vetor"));
|
|
23
|
-
const comum_1 = require("./comum");
|
|
24
24
|
/**
|
|
25
25
|
* O avaliador sintático (_Parser_) é responsável por transformar os símbolos do Lexador em estruturas de alto nível.
|
|
26
26
|
* Essas estruturas de alto nível são as partes que executam lógica de programação de fato.
|
|
@@ -143,6 +143,56 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
143
143
|
this.consumir(delegua_2.default.COLCHETE_DIREITO, "Esperado ']' após a expressão.");
|
|
144
144
|
return new tuplas_1.SeletorTuplas(...argumentos);
|
|
145
145
|
}
|
|
146
|
+
enquantoComoConstruto() {
|
|
147
|
+
const { condicao, corpo } = this.logicaComumEnquanto();
|
|
148
|
+
return new construtos_1.EnquantoComoConstruto(condicao, corpo);
|
|
149
|
+
}
|
|
150
|
+
fazerComoConstruto(simboloFazer) {
|
|
151
|
+
try {
|
|
152
|
+
this.blocos += 1;
|
|
153
|
+
const { caminhoFazer, condicaoEnquanto } = this.logicaComumFazer();
|
|
154
|
+
return new construtos_1.FazerComoConstruto(simboloFazer.hashArquivo, Number(simboloFazer.linha), caminhoFazer, condicaoEnquanto);
|
|
155
|
+
}
|
|
156
|
+
finally {
|
|
157
|
+
this.blocos -= 1;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
paraCadaComoConstrutoVetor(simboloPara) {
|
|
161
|
+
const { variavelIteracao, vetor, corpo } = this.logicaComumParaCadaVetor(simboloPara);
|
|
162
|
+
return new construtos_1.ParaCadaComoConstruto(this.hashArquivo, Number(simboloPara.linha), variavelIteracao, vetor, corpo);
|
|
163
|
+
}
|
|
164
|
+
paraCadaComoConstrutoDicionario(simboloPara) {
|
|
165
|
+
const { nomeVariavelChave, nomeVariavelValor, dicionario, corpo } = this.logicaParaCadaDicionario(simboloPara);
|
|
166
|
+
return new construtos_1.ParaCadaComoConstruto(this.hashArquivo, Number(simboloPara.linha), new tuplas_1.Dupla(new construtos_1.Literal(this.hashArquivo, Number(simboloPara.linha), nomeVariavelChave.lexema), new construtos_1.Literal(this.hashArquivo, Number(simboloPara.linha), nomeVariavelValor.lexema)), dicionario, corpo);
|
|
167
|
+
}
|
|
168
|
+
paraCadaComoConstruto(simboloPara) {
|
|
169
|
+
if (this.verificarTipoSimboloAtual(delegua_2.default.IDENTIFICADOR)) {
|
|
170
|
+
return this.paraCadaComoConstrutoVetor(simboloPara);
|
|
171
|
+
}
|
|
172
|
+
if (this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_ESQUERDA)) {
|
|
173
|
+
return this.paraCadaComoConstrutoDicionario(simboloPara);
|
|
174
|
+
}
|
|
175
|
+
throw this.erro(simboloPara, 'Identificador de iteração deve ser ou um par chave-valor, ou um nome de variável.');
|
|
176
|
+
}
|
|
177
|
+
paraTradicionalComoConstruto(simboloPara) {
|
|
178
|
+
const { inicializador, condicao, incrementar, corpo } = this.logicaComumPara(simboloPara);
|
|
179
|
+
return new construtos_1.ParaComoConstruto(simboloPara.hashArquivo, simboloPara.linha, inicializador, condicao, incrementar, corpo);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Método que resolve `para` ou `para cada` como construto.
|
|
183
|
+
*/
|
|
184
|
+
paraComoConstruto(simboloPara) {
|
|
185
|
+
try {
|
|
186
|
+
this.blocos += 1;
|
|
187
|
+
if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.CADA)) {
|
|
188
|
+
return this.paraCadaComoConstruto(simboloPara);
|
|
189
|
+
}
|
|
190
|
+
return this.paraTradicionalComoConstruto(simboloPara);
|
|
191
|
+
}
|
|
192
|
+
finally {
|
|
193
|
+
this.blocos -= 1;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
146
196
|
primario() {
|
|
147
197
|
const simboloAtual = this.simbolos[this.atual];
|
|
148
198
|
let valores = [];
|
|
@@ -194,6 +244,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
194
244
|
const valoresSemSeparadores = valoresSemComentarios.filter((v) => v.constructor.name !== 'Separador');
|
|
195
245
|
const tipoVetor = (0, inferenciador_1.inferirTipoVariavel)(valoresSemSeparadores);
|
|
196
246
|
return new construtos_1.Vetor(this.hashArquivo, Number(simboloAtual.linha), valores, valores.length, tipoVetor);
|
|
247
|
+
case delegua_2.default.ENQUANTO:
|
|
248
|
+
this.avancarEDevolverAnterior();
|
|
249
|
+
return this.enquantoComoConstruto();
|
|
197
250
|
case delegua_2.default.EXPRESSAO_REGULAR:
|
|
198
251
|
let valor = '';
|
|
199
252
|
let linhaAtual = this.simbolos[this.atual].linha;
|
|
@@ -212,6 +265,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
212
265
|
case delegua_2.default.FALSO:
|
|
213
266
|
this.avancarEDevolverAnterior();
|
|
214
267
|
return new construtos_1.Literal(this.hashArquivo, Number(simboloAtual.linha), false, 'lógico');
|
|
268
|
+
case delegua_2.default.FAZER:
|
|
269
|
+
const simboloFazer = this.avancarEDevolverAnterior();
|
|
270
|
+
return this.fazerComoConstruto(simboloFazer);
|
|
215
271
|
case delegua_2.default.FUNCAO:
|
|
216
272
|
case delegua_2.default.FUNÇÃO:
|
|
217
273
|
const simboloFuncao = this.avancarEDevolverAnterior();
|
|
@@ -259,6 +315,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
259
315
|
const tipoInferido = (0, inferenciador_1.inferirTipoVariavel)(simboloNumeroTexto.literal);
|
|
260
316
|
const tipoDadosElementar = (0, inferenciador_1.tipoInferenciaParaTipoDadosElementar)(tipoInferido);
|
|
261
317
|
return new construtos_1.Literal(this.hashArquivo, Number(simboloNumeroTexto.linha), simboloNumeroTexto.literal, tipoDadosElementar);
|
|
318
|
+
case delegua_2.default.PARA:
|
|
319
|
+
const simboloPara = this.avancarEDevolverAnterior();
|
|
320
|
+
return this.paraComoConstruto(simboloPara);
|
|
262
321
|
case delegua_2.default.PARENTESE_ESQUERDO:
|
|
263
322
|
this.avancarEDevolverAnterior();
|
|
264
323
|
const expressao = this.expressao();
|
|
@@ -722,12 +781,19 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
722
781
|
this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
|
|
723
782
|
return new declaracoes_1.Continua(this.simbolos[this.atual - 1]);
|
|
724
783
|
}
|
|
784
|
+
logicaComumEnquanto() {
|
|
785
|
+
const condicao = this.expressao();
|
|
786
|
+
// TODO: Talvez não seja uma ideia melhor chamar o método de `Bloco` aqui?
|
|
787
|
+
const corpo = this.resolverDeclaracao();
|
|
788
|
+
return {
|
|
789
|
+
condicao,
|
|
790
|
+
corpo
|
|
791
|
+
};
|
|
792
|
+
}
|
|
725
793
|
declaracaoEnquanto() {
|
|
726
794
|
try {
|
|
727
795
|
this.blocos += 1;
|
|
728
|
-
const condicao = this.
|
|
729
|
-
// TODO: Talvez não seja uma ideia melhor chamar o método de `Bloco` aqui?
|
|
730
|
-
const corpo = this.resolverDeclaracao();
|
|
796
|
+
const { condicao, corpo } = this.logicaComumEnquanto();
|
|
731
797
|
return new declaracoes_1.Enquanto(condicao, corpo);
|
|
732
798
|
}
|
|
733
799
|
finally {
|
|
@@ -820,13 +886,19 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
820
886
|
const simboloFalha = this.simbolos[this.atual - 1];
|
|
821
887
|
return new declaracoes_1.Falhar(simboloFalha, this.declaracaoExpressao().expressao);
|
|
822
888
|
}
|
|
823
|
-
|
|
824
|
-
const
|
|
889
|
+
logicaComumFazer() {
|
|
890
|
+
const caminhoFazer = this.resolverDeclaracao();
|
|
891
|
+
this.consumir(delegua_2.default.ENQUANTO, "Esperado declaração do 'enquanto' após o escopo do 'fazer'.");
|
|
892
|
+
const condicaoEnquanto = this.expressao();
|
|
893
|
+
return {
|
|
894
|
+
caminhoFazer,
|
|
895
|
+
condicaoEnquanto
|
|
896
|
+
};
|
|
897
|
+
}
|
|
898
|
+
declaracaoFazer(simboloFazer) {
|
|
825
899
|
try {
|
|
826
900
|
this.blocos += 1;
|
|
827
|
-
const caminhoFazer = this.
|
|
828
|
-
this.consumir(delegua_2.default.ENQUANTO, "Esperado declaração do 'enquanto' após o escopo do 'fazer'.");
|
|
829
|
-
const condicaoEnquanto = this.expressao();
|
|
901
|
+
const { caminhoFazer, condicaoEnquanto } = this.logicaComumFazer();
|
|
830
902
|
return new declaracoes_1.Fazer(simboloFazer.hashArquivo, Number(simboloFazer.linha), caminhoFazer, // TODO: Aqui pode ser um `Bloco`?
|
|
831
903
|
condicaoEnquanto);
|
|
832
904
|
}
|
|
@@ -858,7 +930,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
858
930
|
this.blocos -= 1;
|
|
859
931
|
}
|
|
860
932
|
}
|
|
861
|
-
|
|
933
|
+
logicaParaCadaDicionario(simboloPara) {
|
|
862
934
|
this.avancarEDevolverAnterior(); // chave esquerda
|
|
863
935
|
const nomeVariavelChave = this.consumir(delegua_2.default.IDENTIFICADOR, "Esperado identificador de variável para chave de iteração, em instrução 'para cada'.");
|
|
864
936
|
this.consumir(delegua_2.default.VIRGULA, "Esperado vírgula após nome de variável para chave de iteração, em instrução 'para cada'.");
|
|
@@ -879,9 +951,18 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
879
951
|
this.pilhaEscopos.definirInformacoesVariavel(nomeVariavelValor.lexema, new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante(nomeVariavelValor.lexema, 'qualquer'));
|
|
880
952
|
// TODO: Talvez não seja uma ideia melhor chamar o método de `Bloco` aqui?
|
|
881
953
|
const corpo = this.resolverDeclaracao();
|
|
954
|
+
return {
|
|
955
|
+
nomeVariavelChave,
|
|
956
|
+
nomeVariavelValor,
|
|
957
|
+
dicionario,
|
|
958
|
+
corpo
|
|
959
|
+
};
|
|
960
|
+
}
|
|
961
|
+
declaracaoParaCadaDicionario(simboloPara) {
|
|
962
|
+
const { nomeVariavelChave, nomeVariavelValor, dicionario, corpo } = this.logicaParaCadaDicionario(simboloPara);
|
|
882
963
|
return new declaracoes_1.ParaCada(this.hashArquivo, Number(simboloPara.linha), new tuplas_1.Dupla(new construtos_1.Literal(this.hashArquivo, Number(simboloPara.linha), nomeVariavelChave.lexema), new construtos_1.Literal(this.hashArquivo, Number(simboloPara.linha), nomeVariavelValor.lexema)), dicionario, corpo);
|
|
883
964
|
}
|
|
884
|
-
|
|
965
|
+
logicaComumParaCadaVetor(simboloPara) {
|
|
885
966
|
const nomeVariavelIteracao = this.avancarEDevolverAnterior();
|
|
886
967
|
const variavelIteracao = new construtos_1.Variavel(this.hashArquivo, nomeVariavelIteracao);
|
|
887
968
|
if (!this.verificarSeSimboloAtualEIgualA(delegua_2.default.DE, delegua_2.default.EM)) {
|
|
@@ -902,6 +983,14 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
902
983
|
this.pilhaEscopos.definirInformacoesVariavel(nomeVariavelIteracao.lexema, new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante(nomeVariavelIteracao.lexema, tipoVariavelIteracao));
|
|
903
984
|
// TODO: Talvez não seja uma ideia melhor chamar o método de `Bloco` aqui?
|
|
904
985
|
const corpo = this.resolverDeclaracao();
|
|
986
|
+
return {
|
|
987
|
+
variavelIteracao,
|
|
988
|
+
vetor,
|
|
989
|
+
corpo
|
|
990
|
+
};
|
|
991
|
+
}
|
|
992
|
+
declaracaoParaCadaVetor(simboloPara) {
|
|
993
|
+
const { variavelIteracao, vetor, corpo } = this.logicaComumParaCadaVetor(simboloPara);
|
|
905
994
|
return new declaracoes_1.ParaCada(this.hashArquivo, Number(simboloPara.linha), variavelIteracao, vetor, corpo);
|
|
906
995
|
}
|
|
907
996
|
declaracaoParaCada(simboloPara) {
|
|
@@ -913,7 +1002,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
913
1002
|
}
|
|
914
1003
|
throw this.erro(simboloPara, 'Identificador de iteração deve ser ou um par chave-valor, ou um nome de variável.');
|
|
915
1004
|
}
|
|
916
|
-
|
|
1005
|
+
logicaComumPara(simboloPara) {
|
|
917
1006
|
const comParenteses = this.verificarSeSimboloAtualEIgualA(delegua_2.default.PARENTESE_ESQUERDO);
|
|
918
1007
|
let inicializador;
|
|
919
1008
|
if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA)) {
|
|
@@ -944,6 +1033,15 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
944
1033
|
}
|
|
945
1034
|
// TODO: Talvez não seja uma ideia melhor chamar o método de `Bloco` aqui?
|
|
946
1035
|
const corpo = this.resolverDeclaracao();
|
|
1036
|
+
return {
|
|
1037
|
+
inicializador,
|
|
1038
|
+
condicao,
|
|
1039
|
+
incrementar,
|
|
1040
|
+
corpo
|
|
1041
|
+
};
|
|
1042
|
+
}
|
|
1043
|
+
declaracaoParaTradicional(simboloPara) {
|
|
1044
|
+
const { inicializador, condicao, incrementar, corpo } = this.logicaComumPara(simboloPara);
|
|
947
1045
|
return new declaracoes_1.Para(this.hashArquivo, Number(simboloPara.linha), inicializador, condicao, incrementar, corpo);
|
|
948
1046
|
}
|
|
949
1047
|
declaracaoRetorna() {
|
|
@@ -1082,8 +1180,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1082
1180
|
this.avancarEDevolverAnterior();
|
|
1083
1181
|
return this.declaracaoFalhar();
|
|
1084
1182
|
case delegua_2.default.FAZER:
|
|
1085
|
-
this.avancarEDevolverAnterior();
|
|
1086
|
-
return this.declaracaoFazer();
|
|
1183
|
+
const simboloFazer = this.avancarEDevolverAnterior();
|
|
1184
|
+
return this.declaracaoFazer(simboloFazer);
|
|
1087
1185
|
case delegua_2.default.LINHA_COMENTARIO:
|
|
1088
1186
|
return this.declaracaoComentarioMultilinha();
|
|
1089
1187
|
case delegua_2.default.PARA:
|