@designliquido/portugol-studio 0.9.18 → 0.10.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 +22 -1
- package/analisador-semantico/analisador-semantico-portugol-studio.d.ts +12 -4
- package/analisador-semantico/analisador-semantico-portugol-studio.d.ts.map +1 -1
- package/analisador-semantico/analisador-semantico-portugol-studio.js +147 -12
- package/analisador-semantico/analisador-semantico-portugol-studio.js.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico-portugol-studio.d.ts +2 -1
- package/avaliador-sintatico/avaliador-sintatico-portugol-studio.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico-portugol-studio.js +23 -13
- package/avaliador-sintatico/avaliador-sintatico-portugol-studio.js.map +1 -1
- package/bibliotecas/calendario.d.ts +19 -0
- package/bibliotecas/calendario.d.ts.map +1 -1
- package/bibliotecas/calendario.js +23 -4
- package/bibliotecas/calendario.js.map +1 -1
- package/bibliotecas/objetos.d.ts +2 -0
- package/bibliotecas/objetos.d.ts.map +1 -1
- package/bibliotecas/objetos.js +9 -1
- package/bibliotecas/objetos.js.map +1 -1
- package/bibliotecas/tipos.d.ts +1 -0
- package/bibliotecas/tipos.d.ts.map +1 -1
- package/bibliotecas/tipos.js +6 -2
- package/bibliotecas/tipos.js.map +1 -1
- package/formatador/formatador-portugol-studio.d.ts.map +1 -1
- package/formatador/formatador-portugol-studio.js +357 -75
- package/formatador/formatador-portugol-studio.js.map +1 -1
- package/interpretador/comum.d.ts.map +1 -1
- package/interpretador/comum.js +46 -10
- package/interpretador/comum.js.map +1 -1
- package/package.json +3 -3
|
@@ -8,6 +8,7 @@ const declaracoes_1 = require("@designliquido/delegua/declaracoes");
|
|
|
8
8
|
const construtos_1 = require("@designliquido/delegua/construtos");
|
|
9
9
|
const matriz_1 = require("../construtos/matriz");
|
|
10
10
|
const limpa_1 = require("../construtos/limpa");
|
|
11
|
+
const quebras_1 = require("@designliquido/delegua/quebras");
|
|
11
12
|
const lexico_regular_1 = __importDefault(require("../tipos-de-simbolos/lexico-regular"));
|
|
12
13
|
class FormatadorPortugolStudio {
|
|
13
14
|
constructor(quebraLinha, tamanhoIndentacao = 4) {
|
|
@@ -19,41 +20,93 @@ class FormatadorPortugolStudio {
|
|
|
19
20
|
this.deveIndentar = true;
|
|
20
21
|
this.ultimaLinhaFormatada = -1;
|
|
21
22
|
}
|
|
22
|
-
/* istanbul ignore next */
|
|
23
23
|
visitarExpressaoTuplaN(expressao) {
|
|
24
|
-
|
|
24
|
+
var _a;
|
|
25
|
+
const valores = (_a = expressao === null || expressao === void 0 ? void 0 : expressao.valores) !== null && _a !== void 0 ? _a : [];
|
|
26
|
+
this.codigoFormatado += '(';
|
|
27
|
+
for (let i = 0; i < valores.length; i++) {
|
|
28
|
+
this.formatarDeclaracaoOuConstruto(valores[i]);
|
|
29
|
+
if (i < valores.length - 1) {
|
|
30
|
+
this.codigoFormatado += ', ';
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
this.codigoFormatado += ')';
|
|
25
34
|
}
|
|
26
|
-
/* istanbul ignore next */
|
|
27
35
|
visitarExpressaoAcessoIntervaloVariavel(expressao) {
|
|
28
|
-
|
|
36
|
+
var _a, _b, _c, _d;
|
|
37
|
+
const entidade = (_a = expressao.entidadeChamada) !== null && _a !== void 0 ? _a : expressao.objeto;
|
|
38
|
+
const indiceInicial = (_b = expressao.indiceInicial) !== null && _b !== void 0 ? _b : expressao.inicio;
|
|
39
|
+
const indiceFinal = (_c = expressao.indiceFinal) !== null && _c !== void 0 ? _c : expressao.fim;
|
|
40
|
+
if (entidade) {
|
|
41
|
+
if (((_d = entidade === null || entidade === void 0 ? void 0 : entidade.simbolo) === null || _d === void 0 ? void 0 : _d.lexema) && entidade.constructor === Object) {
|
|
42
|
+
this.codigoFormatado += entidade.simbolo.lexema;
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
this.formatarDeclaracaoOuConstruto(entidade);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
this.codigoFormatado += '[';
|
|
49
|
+
if (indiceInicial) {
|
|
50
|
+
this.formatarDeclaracaoOuConstruto(indiceInicial);
|
|
51
|
+
}
|
|
52
|
+
this.codigoFormatado += '..';
|
|
53
|
+
if (indiceFinal) {
|
|
54
|
+
this.formatarDeclaracaoOuConstruto(indiceFinal);
|
|
55
|
+
}
|
|
56
|
+
this.codigoFormatado += ']';
|
|
29
57
|
}
|
|
30
|
-
/* istanbul ignore next */
|
|
31
58
|
visitarDeclaracaoTextoDocumentacao(declaracao) {
|
|
32
|
-
|
|
59
|
+
var _a;
|
|
60
|
+
const conteudo = (_a = declaracao === null || declaracao === void 0 ? void 0 : declaracao.texto) !== null && _a !== void 0 ? _a : declaracao === null || declaracao === void 0 ? void 0 : declaracao.conteudo;
|
|
61
|
+
if (!conteudo) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}// ${String(conteudo).replace(/\s+/g, ' ')}${this.quebraLinha}`;
|
|
33
65
|
}
|
|
34
|
-
/* istanbul ignore next */
|
|
35
66
|
visitarExpressaoComentario(expressao) {
|
|
36
|
-
|
|
67
|
+
const conteudo = expressao === null || expressao === void 0 ? void 0 : expressao.conteudo;
|
|
68
|
+
if (conteudo) {
|
|
69
|
+
this.codigoFormatado += `/* ${String(conteudo).replace(/\s+/g, ' ')} */`;
|
|
70
|
+
}
|
|
37
71
|
}
|
|
38
|
-
/* istanbul ignore next */
|
|
39
72
|
visitarExpressaoSeparador(expressao) {
|
|
40
|
-
|
|
73
|
+
const valor = expressao === null || expressao === void 0 ? void 0 : expressao.valor;
|
|
74
|
+
this.codigoFormatado += typeof valor === 'string' ? valor : ', ';
|
|
41
75
|
}
|
|
42
|
-
/* istanbul ignore next */
|
|
43
76
|
visitarExpressaoArgumentoReferenciaFuncao(expressao) {
|
|
44
|
-
|
|
77
|
+
var _a, _b;
|
|
78
|
+
const argumento = (_b = (_a = expressao === null || expressao === void 0 ? void 0 : expressao.valor) !== null && _a !== void 0 ? _a : expressao === null || expressao === void 0 ? void 0 : expressao.argumento) !== null && _b !== void 0 ? _b : expressao;
|
|
79
|
+
if (argumento && argumento !== expressao) {
|
|
80
|
+
this.formatarDeclaracaoOuConstruto(argumento);
|
|
81
|
+
}
|
|
45
82
|
}
|
|
46
|
-
/* istanbul ignore next */
|
|
47
83
|
visitarExpressaoReferenciaFuncao(expressao) {
|
|
48
|
-
|
|
84
|
+
const simbolo = expressao === null || expressao === void 0 ? void 0 : expressao.simbolo;
|
|
85
|
+
const nome = expressao === null || expressao === void 0 ? void 0 : expressao.nome;
|
|
86
|
+
if (simbolo === null || simbolo === void 0 ? void 0 : simbolo.lexema) {
|
|
87
|
+
this.codigoFormatado += simbolo.lexema;
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (typeof nome === 'string') {
|
|
91
|
+
this.codigoFormatado += nome;
|
|
92
|
+
}
|
|
49
93
|
}
|
|
50
|
-
/* istanbul ignore next */
|
|
51
94
|
visitarExpressaoAcessoMetodoOuPropriedade(expressao) {
|
|
52
|
-
|
|
95
|
+
this.visitarExpressaoAcessoMetodo(expressao);
|
|
53
96
|
}
|
|
54
|
-
/* istanbul ignore next */
|
|
55
97
|
visitarExpressaoAcessoPropriedade(expressao) {
|
|
56
|
-
|
|
98
|
+
const objeto = expressao.objeto || expressao.entidadeChamada;
|
|
99
|
+
const simbolo = expressao.simbolo || expressao.nome;
|
|
100
|
+
if (objeto) {
|
|
101
|
+
this.formatarDeclaracaoOuConstruto(objeto);
|
|
102
|
+
}
|
|
103
|
+
if (simbolo === null || simbolo === void 0 ? void 0 : simbolo.lexema) {
|
|
104
|
+
this.codigoFormatado += `.${simbolo.lexema}`;
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (typeof simbolo === 'string') {
|
|
108
|
+
this.codigoFormatado += `.${simbolo}`;
|
|
109
|
+
}
|
|
57
110
|
}
|
|
58
111
|
visitarDeclaracaoComentario(declaracao) {
|
|
59
112
|
if (declaracao.multilinha) {
|
|
@@ -83,25 +136,52 @@ class FormatadorPortugolStudio {
|
|
|
83
136
|
}
|
|
84
137
|
}
|
|
85
138
|
}
|
|
86
|
-
/* istanbul ignore next */
|
|
87
139
|
visitarDeclaracaoTendoComo(declaracao) {
|
|
88
|
-
|
|
140
|
+
const inicializacao = declaracao === null || declaracao === void 0 ? void 0 : declaracao.inicializacao;
|
|
141
|
+
const corpo = declaracao === null || declaracao === void 0 ? void 0 : declaracao.corpo;
|
|
142
|
+
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}tendo`;
|
|
143
|
+
if (inicializacao) {
|
|
144
|
+
this.codigoFormatado += ' (';
|
|
145
|
+
this.formatarDeclaracaoOuConstruto(inicializacao);
|
|
146
|
+
this.codigoFormatado += ')';
|
|
147
|
+
}
|
|
148
|
+
this.codigoFormatado += ` {${this.quebraLinha}`;
|
|
149
|
+
if (corpo === null || corpo === void 0 ? void 0 : corpo.declaracoes) {
|
|
150
|
+
this.formatarBlocoOuVetorDeclaracoes(corpo.declaracoes);
|
|
151
|
+
}
|
|
152
|
+
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}}${this.quebraLinha}`;
|
|
89
153
|
}
|
|
90
|
-
/* istanbul ignore next */
|
|
91
154
|
visitarDeclaracaoInicioAlgoritmo(declaracao) {
|
|
92
|
-
|
|
155
|
+
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}inicio_algoritmo${this.quebraLinha}`;
|
|
156
|
+
return Promise.resolve();
|
|
93
157
|
}
|
|
94
|
-
/* istanbul ignore next */
|
|
95
158
|
visitarDeclaracaoCabecalhoPrograma(declaracao) {
|
|
96
|
-
|
|
159
|
+
return Promise.resolve();
|
|
97
160
|
}
|
|
98
|
-
/* istanbul ignore next */
|
|
99
161
|
visitarExpressaoTupla(expressao) {
|
|
100
|
-
|
|
162
|
+
var _a;
|
|
163
|
+
const valores = (_a = expressao === null || expressao === void 0 ? void 0 : expressao.valores) !== null && _a !== void 0 ? _a : [];
|
|
164
|
+
this.codigoFormatado += '(';
|
|
165
|
+
for (let i = 0; i < valores.length; i++) {
|
|
166
|
+
this.formatarDeclaracaoOuConstruto(valores[i]);
|
|
167
|
+
if (i < valores.length - 1) {
|
|
168
|
+
this.codigoFormatado += ', ';
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
this.codigoFormatado += ')';
|
|
172
|
+
return Promise.resolve();
|
|
101
173
|
}
|
|
102
|
-
/* istanbul ignore next */
|
|
103
174
|
visitarDeclaracaoClasse(declaracao) {
|
|
104
|
-
|
|
175
|
+
var _a, _b, _c;
|
|
176
|
+
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}classe ${(_b = (_a = declaracao.simbolo) === null || _a === void 0 ? void 0 : _a.lexema) !== null && _b !== void 0 ? _b : ''}${this.quebraLinha}`;
|
|
177
|
+
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}{${this.quebraLinha}`;
|
|
178
|
+
const metodos = (_c = declaracao.metodos) !== null && _c !== void 0 ? _c : [];
|
|
179
|
+
this.indentacaoAtual += this.tamanhoIndentacao;
|
|
180
|
+
for (const metodo of metodos) {
|
|
181
|
+
this.formatarDeclaracaoOuConstruto(metodo);
|
|
182
|
+
}
|
|
183
|
+
this.indentacaoAtual -= this.tamanhoIndentacao;
|
|
184
|
+
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}}${this.quebraLinha}`;
|
|
105
185
|
}
|
|
106
186
|
visitarDeclaracaoConst(declaracao) {
|
|
107
187
|
if (declaracao.inicializador) {
|
|
@@ -124,9 +204,20 @@ class FormatadorPortugolStudio {
|
|
|
124
204
|
this.codigoFormatado += this.quebraLinha;
|
|
125
205
|
}
|
|
126
206
|
}
|
|
127
|
-
/* istanbul ignore next */
|
|
128
207
|
visitarDeclaracaoConstMultiplo(declaracao) {
|
|
129
|
-
|
|
208
|
+
var _a, _b, _c, _d, _e;
|
|
209
|
+
const inicializadores = (_a = declaracao.inicializadores) !== null && _a !== void 0 ? _a : [];
|
|
210
|
+
const simbolos = (_b = declaracao.simbolos) !== null && _b !== void 0 ? _b : [];
|
|
211
|
+
const tipo = (_c = declaracao.tipo) !== null && _c !== void 0 ? _c : '';
|
|
212
|
+
for (let i = 0; i < simbolos.length; i++) {
|
|
213
|
+
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}const ${tipo} ${(_e = (_d = simbolos[i]) === null || _d === void 0 ? void 0 : _d.lexema) !== null && _e !== void 0 ? _e : simbolos[i]}`;
|
|
214
|
+
if (inicializadores[i] !== undefined) {
|
|
215
|
+
this.codigoFormatado += ' = ';
|
|
216
|
+
this.formatarDeclaracaoOuConstruto(inicializadores[i]);
|
|
217
|
+
}
|
|
218
|
+
this.codigoFormatado += this.quebraLinha;
|
|
219
|
+
}
|
|
220
|
+
return Promise.resolve();
|
|
130
221
|
}
|
|
131
222
|
visitarExpressaoDeAtribuicao(expressao) {
|
|
132
223
|
if (expressao.valor instanceof construtos_1.Binario &&
|
|
@@ -154,7 +245,24 @@ class FormatadorPortugolStudio {
|
|
|
154
245
|
this.formatarDeclaracaoOuConstruto(declaracao.expressao);
|
|
155
246
|
}
|
|
156
247
|
visitarDeclaracaoDefinicaoFuncao(declaracao) {
|
|
157
|
-
|
|
248
|
+
var _a;
|
|
249
|
+
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}funcao `;
|
|
250
|
+
if (declaracao.tipo && declaracao.tipo !== 'qualquer') {
|
|
251
|
+
this.codigoFormatado += `${declaracao.tipo} `;
|
|
252
|
+
}
|
|
253
|
+
this.codigoFormatado += `${declaracao.simbolo.lexema}(`;
|
|
254
|
+
const parametros = (_a = declaracao.funcao.parametros) !== null && _a !== void 0 ? _a : [];
|
|
255
|
+
for (let i = 0; i < parametros.length; i++) {
|
|
256
|
+
const param = parametros[i];
|
|
257
|
+
if (param.tipoDado) {
|
|
258
|
+
this.codigoFormatado += `${param.tipoDado} `;
|
|
259
|
+
}
|
|
260
|
+
this.codigoFormatado += param.nome.lexema;
|
|
261
|
+
if (i < parametros.length - 1) {
|
|
262
|
+
this.codigoFormatado += ', ';
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
this.codigoFormatado += `)${this.quebraLinha}`;
|
|
158
266
|
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}{${this.quebraLinha}`;
|
|
159
267
|
this.visitarExpressaoFuncaoConstruto(declaracao.funcao);
|
|
160
268
|
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}}${this.quebraLinha}`;
|
|
@@ -168,6 +276,7 @@ class FormatadorPortugolStudio {
|
|
|
168
276
|
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}}${this.quebraLinha}`;
|
|
169
277
|
}
|
|
170
278
|
visitarDeclaracaoEscolha(declaracao) {
|
|
279
|
+
var _a, _b;
|
|
171
280
|
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}escolha `;
|
|
172
281
|
this.formatarDeclaracaoOuConstruto(declaracao.identificadorOuLiteral);
|
|
173
282
|
this.codigoFormatado += ` {${this.quebraLinha}`;
|
|
@@ -184,11 +293,12 @@ class FormatadorPortugolStudio {
|
|
|
184
293
|
this.formatarDeclaracaoOuConstruto(declaracoes);
|
|
185
294
|
}
|
|
186
295
|
}
|
|
187
|
-
|
|
188
|
-
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}caso contrario
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
296
|
+
if ((_b = (_a = declaracao.caminhoPadrao) === null || _a === void 0 ? void 0 : _a.declaracoes) === null || _b === void 0 ? void 0 : _b.length) {
|
|
297
|
+
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}caso contrario:${this.quebraLinha}`;
|
|
298
|
+
for (let padrao of declaracao.caminhoPadrao.declaracoes) {
|
|
299
|
+
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}`;
|
|
300
|
+
this.formatarDeclaracaoOuConstruto(padrao);
|
|
301
|
+
}
|
|
192
302
|
}
|
|
193
303
|
this.indentacaoAtual -= this.tamanhoIndentacao;
|
|
194
304
|
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}}${this.quebraLinha}`;
|
|
@@ -281,9 +391,8 @@ class FormatadorPortugolStudio {
|
|
|
281
391
|
this.indentacaoAtual -= this.tamanhoIndentacao;
|
|
282
392
|
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}}${this.quebraLinha}`;
|
|
283
393
|
}
|
|
284
|
-
/* istanbul ignore next */
|
|
285
394
|
visitarDeclaracaoParaCada(declaracao) {
|
|
286
|
-
throw new Error('
|
|
395
|
+
throw new Error("Construto 'para cada' não é suportado no dialeto Portugol Studio.");
|
|
287
396
|
}
|
|
288
397
|
visitarDeclaracaoSe(declaracao) {
|
|
289
398
|
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}se (`;
|
|
@@ -300,9 +409,8 @@ class FormatadorPortugolStudio {
|
|
|
300
409
|
}
|
|
301
410
|
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}}${this.quebraLinha}`;
|
|
302
411
|
}
|
|
303
|
-
/* istanbul ignore next */
|
|
304
412
|
visitarDeclaracaoTente(declaracao) {
|
|
305
|
-
throw new Error('
|
|
413
|
+
throw new Error("Construto 'tente/pegue/finalmente' não é suportado no dialeto Portugol Studio.");
|
|
306
414
|
}
|
|
307
415
|
visitarDeclaracaoVar(declaracao) {
|
|
308
416
|
if (declaracao.tipo) {
|
|
@@ -356,9 +464,20 @@ class FormatadorPortugolStudio {
|
|
|
356
464
|
this.formatarDeclaracaoOuConstruto(declaracao.inicializador);
|
|
357
465
|
}
|
|
358
466
|
}
|
|
359
|
-
/* istanbul ignore next */
|
|
360
467
|
visitarDeclaracaoVarMultiplo(declaracao) {
|
|
361
|
-
|
|
468
|
+
var _a, _b, _c, _d, _e;
|
|
469
|
+
const inicializadores = (_a = declaracao.inicializadores) !== null && _a !== void 0 ? _a : [];
|
|
470
|
+
const simbolos = (_b = declaracao.simbolos) !== null && _b !== void 0 ? _b : [];
|
|
471
|
+
const tipo = (_c = declaracao.tipo) !== null && _c !== void 0 ? _c : '';
|
|
472
|
+
for (let i = 0; i < simbolos.length; i++) {
|
|
473
|
+
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}${tipo} ${(_e = (_d = simbolos[i]) === null || _d === void 0 ? void 0 : _d.lexema) !== null && _e !== void 0 ? _e : simbolos[i]}`;
|
|
474
|
+
if (inicializadores[i] !== undefined) {
|
|
475
|
+
this.codigoFormatado += ' = ';
|
|
476
|
+
this.formatarDeclaracaoOuConstruto(inicializadores[i]);
|
|
477
|
+
}
|
|
478
|
+
this.codigoFormatado += this.quebraLinha;
|
|
479
|
+
}
|
|
480
|
+
return Promise.resolve();
|
|
362
481
|
}
|
|
363
482
|
visitarExpressaoAcessoIndiceVariavel(expressao) {
|
|
364
483
|
this.formatarDeclaracaoOuConstruto(expressao.entidadeChamada);
|
|
@@ -368,7 +487,22 @@ class FormatadorPortugolStudio {
|
|
|
368
487
|
}
|
|
369
488
|
/* istanbul ignore next */
|
|
370
489
|
visitarExpressaoAcessoElementoMatriz(expressao) {
|
|
371
|
-
|
|
490
|
+
var _a, _b, _c;
|
|
491
|
+
const entidade = (_a = expressao === null || expressao === void 0 ? void 0 : expressao.entidadeChamada) !== null && _a !== void 0 ? _a : expressao === null || expressao === void 0 ? void 0 : expressao.objeto;
|
|
492
|
+
const indices = (_b = expressao === null || expressao === void 0 ? void 0 : expressao.indices) !== null && _b !== void 0 ? _b : [expressao === null || expressao === void 0 ? void 0 : expressao.indicePrimario, expressao === null || expressao === void 0 ? void 0 : expressao.indiceSecundario].filter(Boolean);
|
|
493
|
+
if (entidade) {
|
|
494
|
+
if (((_c = entidade === null || entidade === void 0 ? void 0 : entidade.simbolo) === null || _c === void 0 ? void 0 : _c.lexema) && entidade.constructor === Object) {
|
|
495
|
+
this.codigoFormatado += entidade.simbolo.lexema;
|
|
496
|
+
}
|
|
497
|
+
else {
|
|
498
|
+
this.formatarDeclaracaoOuConstruto(entidade);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
for (const indice of indices) {
|
|
502
|
+
this.codigoFormatado += '[';
|
|
503
|
+
this.formatarDeclaracaoOuConstruto(indice);
|
|
504
|
+
this.codigoFormatado += ']';
|
|
505
|
+
}
|
|
372
506
|
}
|
|
373
507
|
visitarExpressaoAcessoMetodo(expressao) {
|
|
374
508
|
this.formatarDeclaracaoOuConstruto(expressao.objeto);
|
|
@@ -387,21 +521,31 @@ class FormatadorPortugolStudio {
|
|
|
387
521
|
this.formatarDeclaracaoOuConstruto(expressao.valor);
|
|
388
522
|
this.codigoFormatado += this.quebraLinha;
|
|
389
523
|
}
|
|
390
|
-
/* istanbul ignore next */
|
|
391
524
|
visitarExpressaoAtribuicaoPorIndicesMatriz(expressao) {
|
|
392
|
-
|
|
525
|
+
this.visitarExpressaoAcessoElementoMatriz(expressao);
|
|
526
|
+
this.codigoFormatado += ' = ';
|
|
527
|
+
this.formatarDeclaracaoOuConstruto(expressao === null || expressao === void 0 ? void 0 : expressao.valor);
|
|
528
|
+
this.codigoFormatado += this.quebraLinha;
|
|
529
|
+
return Promise.resolve();
|
|
393
530
|
}
|
|
394
531
|
visitarExpressaoBinaria(expressao) {
|
|
532
|
+
var _a;
|
|
395
533
|
this.formatarDeclaracaoOuConstruto(expressao.esquerda);
|
|
396
534
|
switch (expressao.operador.tipo) {
|
|
397
535
|
case lexico_regular_1.default.ADICAO:
|
|
398
536
|
this.codigoFormatado += ' + ';
|
|
399
537
|
break;
|
|
538
|
+
case lexico_regular_1.default.DIFERENTE:
|
|
539
|
+
this.codigoFormatado += ' != ';
|
|
540
|
+
break;
|
|
400
541
|
case lexico_regular_1.default.DIVISAO:
|
|
401
542
|
this.codigoFormatado += ' / ';
|
|
402
543
|
break;
|
|
544
|
+
case lexico_regular_1.default.DIVISAO_IGUAL:
|
|
545
|
+
this.codigoFormatado += ' /= ';
|
|
546
|
+
break;
|
|
403
547
|
case lexico_regular_1.default.DIVISAO_INTEIRA:
|
|
404
|
-
this.codigoFormatado += '
|
|
548
|
+
this.codigoFormatado += ' \\ ';
|
|
405
549
|
break;
|
|
406
550
|
case lexico_regular_1.default.IGUAL:
|
|
407
551
|
this.codigoFormatado += ' = ';
|
|
@@ -415,23 +559,32 @@ class FormatadorPortugolStudio {
|
|
|
415
559
|
case lexico_regular_1.default.MAIOR_IGUAL:
|
|
416
560
|
this.codigoFormatado += ' >= ';
|
|
417
561
|
break;
|
|
562
|
+
case lexico_regular_1.default.MAIS_IGUAL:
|
|
563
|
+
this.codigoFormatado += ' += ';
|
|
564
|
+
break;
|
|
418
565
|
case lexico_regular_1.default.MENOR:
|
|
419
566
|
this.codigoFormatado += ' < ';
|
|
420
567
|
break;
|
|
421
568
|
case lexico_regular_1.default.MENOR_IGUAL:
|
|
422
569
|
this.codigoFormatado += ' <= ';
|
|
423
570
|
break;
|
|
424
|
-
case lexico_regular_1.default.
|
|
425
|
-
this.codigoFormatado +=
|
|
571
|
+
case lexico_regular_1.default.MENOS_IGUAL:
|
|
572
|
+
this.codigoFormatado += ' -= ';
|
|
426
573
|
break;
|
|
427
574
|
case lexico_regular_1.default.MULTIPLICACAO:
|
|
428
575
|
this.codigoFormatado += ` * `;
|
|
429
576
|
break;
|
|
577
|
+
case lexico_regular_1.default.MULTIPLICACAO_IGUAL:
|
|
578
|
+
this.codigoFormatado += ' *= ';
|
|
579
|
+
break;
|
|
430
580
|
case lexico_regular_1.default.MODULO:
|
|
431
581
|
this.codigoFormatado += ` % `;
|
|
432
582
|
break;
|
|
583
|
+
case lexico_regular_1.default.SUBTRACAO:
|
|
584
|
+
this.codigoFormatado += ` - `;
|
|
585
|
+
break;
|
|
433
586
|
default:
|
|
434
|
-
|
|
587
|
+
this.codigoFormatado += ` ${(_a = expressao.operador.lexema) !== null && _a !== void 0 ? _a : ''} `;
|
|
435
588
|
break;
|
|
436
589
|
}
|
|
437
590
|
this.formatarDeclaracaoOuConstruto(expressao.direita);
|
|
@@ -441,7 +594,11 @@ class FormatadorPortugolStudio {
|
|
|
441
594
|
}
|
|
442
595
|
/* istanbul ignore next */
|
|
443
596
|
visitarExpressaoContinua(declaracao) {
|
|
444
|
-
|
|
597
|
+
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}continue`;
|
|
598
|
+
if (this.devePularLinha) {
|
|
599
|
+
this.codigoFormatado += this.quebraLinha;
|
|
600
|
+
}
|
|
601
|
+
return new quebras_1.ContinuarQuebra();
|
|
445
602
|
}
|
|
446
603
|
visitarExpressaoDeChamada(expressao) {
|
|
447
604
|
this.formatarDeclaracaoOuConstruto(expressao.entidadeChamada);
|
|
@@ -454,36 +611,72 @@ class FormatadorPortugolStudio {
|
|
|
454
611
|
}
|
|
455
612
|
this.codigoFormatado += ')';
|
|
456
613
|
}
|
|
457
|
-
/* istanbul ignore next */
|
|
458
614
|
visitarExpressaoDefinirValor(expressao) {
|
|
459
|
-
|
|
615
|
+
var _a, _b, _c;
|
|
616
|
+
const objeto = (_a = expressao === null || expressao === void 0 ? void 0 : expressao.objeto) !== null && _a !== void 0 ? _a : expressao === null || expressao === void 0 ? void 0 : expressao.entidadeChamada;
|
|
617
|
+
const nomePropriedade = (_c = (_b = expressao === null || expressao === void 0 ? void 0 : expressao.nome) !== null && _b !== void 0 ? _b : expressao === null || expressao === void 0 ? void 0 : expressao.simbolo) !== null && _c !== void 0 ? _c : expressao === null || expressao === void 0 ? void 0 : expressao.propriedade;
|
|
618
|
+
const valor = expressao === null || expressao === void 0 ? void 0 : expressao.valor;
|
|
619
|
+
if (objeto) {
|
|
620
|
+
this.formatarDeclaracaoOuConstruto(objeto);
|
|
621
|
+
}
|
|
622
|
+
if (nomePropriedade === null || nomePropriedade === void 0 ? void 0 : nomePropriedade.lexema) {
|
|
623
|
+
this.codigoFormatado += `.${nomePropriedade.lexema}`;
|
|
624
|
+
}
|
|
625
|
+
else if (typeof nomePropriedade === 'string') {
|
|
626
|
+
this.codigoFormatado += `.${nomePropriedade}`;
|
|
627
|
+
}
|
|
628
|
+
this.codigoFormatado += ' = ';
|
|
629
|
+
this.formatarDeclaracaoOuConstruto(valor);
|
|
630
|
+
if (this.devePularLinha) {
|
|
631
|
+
this.codigoFormatado += this.quebraLinha;
|
|
632
|
+
}
|
|
460
633
|
}
|
|
461
|
-
/* istanbul ignore next */
|
|
462
634
|
visitarExpressaoDeleguaFuncao(expressao) {
|
|
463
|
-
|
|
635
|
+
const simbolo = expressao === null || expressao === void 0 ? void 0 : expressao.simbolo;
|
|
636
|
+
if (simbolo === null || simbolo === void 0 ? void 0 : simbolo.lexema) {
|
|
637
|
+
this.codigoFormatado += simbolo.lexema;
|
|
638
|
+
return;
|
|
639
|
+
}
|
|
640
|
+
this.codigoFormatado += 'funcao';
|
|
464
641
|
}
|
|
465
642
|
visitarExpressaoDeVariavel(expressao) {
|
|
466
643
|
this.codigoFormatado += `${expressao.simbolo.lexema}`;
|
|
467
644
|
}
|
|
468
|
-
/* istanbul ignore next */
|
|
469
645
|
visitarExpressaoDicionario(expressao) {
|
|
470
|
-
|
|
646
|
+
var _a, _b;
|
|
647
|
+
const chaves = (_a = expressao === null || expressao === void 0 ? void 0 : expressao.chaves) !== null && _a !== void 0 ? _a : [];
|
|
648
|
+
const valores = (_b = expressao === null || expressao === void 0 ? void 0 : expressao.valores) !== null && _b !== void 0 ? _b : [];
|
|
649
|
+
this.codigoFormatado += '{';
|
|
650
|
+
for (let i = 0; i < chaves.length; i++) {
|
|
651
|
+
this.formatarDeclaracaoOuConstruto(chaves[i]);
|
|
652
|
+
this.codigoFormatado += ': ';
|
|
653
|
+
this.formatarDeclaracaoOuConstruto(valores[i]);
|
|
654
|
+
if (i < chaves.length - 1) {
|
|
655
|
+
this.codigoFormatado += ', ';
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
this.codigoFormatado += '}';
|
|
471
659
|
}
|
|
472
|
-
/* istanbul ignore next */
|
|
473
660
|
visitarExpressaoExpressaoRegular(expressao) {
|
|
474
|
-
throw new Error(
|
|
661
|
+
throw new Error("Construto de expressão regular não é suportado no dialeto Portugol Studio.");
|
|
475
662
|
}
|
|
476
|
-
/* istanbul ignore next */
|
|
477
663
|
visitarExpressaoFalhar(expressao) {
|
|
478
|
-
throw new Error('
|
|
664
|
+
throw new Error("Construto 'falhar' não é suportado no dialeto Portugol Studio.");
|
|
479
665
|
}
|
|
480
666
|
/* istanbul ignore next */
|
|
481
667
|
visitarExpressaoFimPara(declaracao) {
|
|
482
|
-
|
|
668
|
+
return;
|
|
483
669
|
}
|
|
484
|
-
/* istanbul ignore next */
|
|
485
670
|
visitarExpressaoFormatacaoEscrita(declaracao) {
|
|
486
|
-
|
|
671
|
+
var _a, _b;
|
|
672
|
+
const expressao = (_b = (_a = declaracao.expressao) !== null && _a !== void 0 ? _a : declaracao.valor) !== null && _b !== void 0 ? _b : declaracao;
|
|
673
|
+
if (expressao && expressao !== declaracao) {
|
|
674
|
+
this.formatarDeclaracaoOuConstruto(expressao);
|
|
675
|
+
return;
|
|
676
|
+
}
|
|
677
|
+
if (declaracao.hasOwnProperty('casasDecimais')) {
|
|
678
|
+
this.codigoFormatado += `${declaracao.casasDecimais}`;
|
|
679
|
+
}
|
|
487
680
|
}
|
|
488
681
|
visitarExpressaoFuncaoConstruto(expressao) {
|
|
489
682
|
this.indentacaoAtual += this.tamanhoIndentacao;
|
|
@@ -498,7 +691,7 @@ class FormatadorPortugolStudio {
|
|
|
498
691
|
}
|
|
499
692
|
/* istanbul ignore next */
|
|
500
693
|
visitarExpressaoIsto(expressao) {
|
|
501
|
-
|
|
694
|
+
this.codigoFormatado += 'isto';
|
|
502
695
|
}
|
|
503
696
|
visitarExpressaoLeia(expressao) {
|
|
504
697
|
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}leia(`;
|
|
@@ -537,9 +730,21 @@ class FormatadorPortugolStudio {
|
|
|
537
730
|
}
|
|
538
731
|
this.codigoFormatado += `${expressao.valor}`;
|
|
539
732
|
}
|
|
540
|
-
/* istanbul ignore next */
|
|
541
733
|
visitarExpressaoLogica(expressao) {
|
|
542
|
-
|
|
734
|
+
var _a;
|
|
735
|
+
this.formatarDeclaracaoOuConstruto(expressao.esquerda);
|
|
736
|
+
switch (expressao.operador.tipo) {
|
|
737
|
+
case lexico_regular_1.default.E:
|
|
738
|
+
this.codigoFormatado += ' e ';
|
|
739
|
+
break;
|
|
740
|
+
case lexico_regular_1.default.OU:
|
|
741
|
+
this.codigoFormatado += ' ou ';
|
|
742
|
+
break;
|
|
743
|
+
default:
|
|
744
|
+
this.codigoFormatado += ` ${(_a = expressao.operador.lexema) !== null && _a !== void 0 ? _a : ''} `;
|
|
745
|
+
break;
|
|
746
|
+
}
|
|
747
|
+
this.formatarDeclaracaoOuConstruto(expressao.direita);
|
|
543
748
|
}
|
|
544
749
|
visitarExpressaoRetornar(declaracao) {
|
|
545
750
|
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}retorne`;
|
|
@@ -551,17 +756,28 @@ class FormatadorPortugolStudio {
|
|
|
551
756
|
}
|
|
552
757
|
/* istanbul ignore next */
|
|
553
758
|
visitarExpressaoSuper(expressao) {
|
|
554
|
-
|
|
759
|
+
this.codigoFormatado += 'super';
|
|
555
760
|
}
|
|
556
761
|
/* istanbul ignore next */
|
|
557
762
|
visitarExpressaoSustar(declaracao) {
|
|
558
|
-
|
|
763
|
+
this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}pare`;
|
|
764
|
+
if (this.devePularLinha) {
|
|
765
|
+
this.codigoFormatado += this.quebraLinha;
|
|
766
|
+
}
|
|
767
|
+
return new quebras_1.SustarQuebra();
|
|
559
768
|
}
|
|
560
769
|
/* istanbul ignore next */
|
|
561
770
|
visitarExpressaoTipoDe(expressao) {
|
|
562
|
-
|
|
771
|
+
this.codigoFormatado += 'tipo';
|
|
772
|
+
if (expressao === null || expressao === void 0 ? void 0 : expressao.valor) {
|
|
773
|
+
this.codigoFormatado += '(';
|
|
774
|
+
this.formatarDeclaracaoOuConstruto(expressao.valor);
|
|
775
|
+
this.codigoFormatado += ')';
|
|
776
|
+
}
|
|
777
|
+
return Promise.resolve();
|
|
563
778
|
}
|
|
564
779
|
visitarExpressaoUnaria(expressao) {
|
|
780
|
+
var _a;
|
|
565
781
|
let operador;
|
|
566
782
|
switch (expressao.operador.tipo) {
|
|
567
783
|
case lexico_regular_1.default.INCREMENTAR:
|
|
@@ -573,8 +789,11 @@ class FormatadorPortugolStudio {
|
|
|
573
789
|
case lexico_regular_1.default.NEGACAO:
|
|
574
790
|
operador = 'nao ';
|
|
575
791
|
break;
|
|
792
|
+
case lexico_regular_1.default.SUBTRACAO:
|
|
793
|
+
operador = '-';
|
|
794
|
+
break;
|
|
576
795
|
default:
|
|
577
|
-
|
|
796
|
+
operador = (_a = expressao.operador.lexema) !== null && _a !== void 0 ? _a : '';
|
|
578
797
|
break;
|
|
579
798
|
}
|
|
580
799
|
switch (expressao.incidenciaOperador) {
|
|
@@ -607,12 +826,24 @@ class FormatadorPortugolStudio {
|
|
|
607
826
|
case construtos_1.AcessoIndiceVariavel:
|
|
608
827
|
this.visitarExpressaoAcessoIndiceVariavel(declaracaoOuConstruto);
|
|
609
828
|
break;
|
|
829
|
+
/* istanbul ignore next */
|
|
830
|
+
case construtos_1.AcessoIntervaloVariavel:
|
|
831
|
+
this.visitarExpressaoAcessoIntervaloVariavel(declaracaoOuConstruto);
|
|
832
|
+
break;
|
|
610
833
|
case construtos_1.AcessoMetodoOuPropriedade:
|
|
611
|
-
this.
|
|
834
|
+
this.visitarExpressaoAcessoMetodoOuPropriedade(declaracaoOuConstruto);
|
|
835
|
+
break;
|
|
836
|
+
/* istanbul ignore next */
|
|
837
|
+
case construtos_1.AcessoPropriedade:
|
|
838
|
+
this.visitarExpressaoAcessoPropriedade(declaracaoOuConstruto);
|
|
612
839
|
break;
|
|
613
840
|
case construtos_1.Agrupamento:
|
|
614
841
|
this.visitarExpressaoAgrupamento(declaracaoOuConstruto);
|
|
615
842
|
break;
|
|
843
|
+
/* istanbul ignore next */
|
|
844
|
+
case construtos_1.ArgumentoReferenciaFuncao:
|
|
845
|
+
this.visitarExpressaoArgumentoReferenciaFuncao(declaracaoOuConstruto);
|
|
846
|
+
break;
|
|
616
847
|
case construtos_1.AtribuicaoPorIndice:
|
|
617
848
|
this.visitarExpressaoAtribuicaoPorIndice(declaracaoOuConstruto);
|
|
618
849
|
break;
|
|
@@ -628,12 +859,18 @@ class FormatadorPortugolStudio {
|
|
|
628
859
|
case construtos_1.Chamada:
|
|
629
860
|
this.visitarExpressaoDeChamada(declaracaoOuConstruto);
|
|
630
861
|
break;
|
|
862
|
+
/* istanbul ignore next */
|
|
631
863
|
case declaracoes_1.Classe:
|
|
632
864
|
this.visitarDeclaracaoClasse(declaracaoOuConstruto);
|
|
633
865
|
break;
|
|
634
866
|
case declaracoes_1.Comentario:
|
|
635
867
|
this.visitarDeclaracaoComentario(declaracaoOuConstruto);
|
|
636
868
|
break;
|
|
869
|
+
/* istanbul ignore next */
|
|
870
|
+
case construtos_1.ComentarioComoConstruto:
|
|
871
|
+
this.visitarExpressaoComentario(declaracaoOuConstruto);
|
|
872
|
+
break;
|
|
873
|
+
/* istanbul ignore next */
|
|
637
874
|
case declaracoes_1.Continua:
|
|
638
875
|
this.visitarExpressaoContinua(declaracaoOuConstruto);
|
|
639
876
|
break;
|
|
@@ -649,6 +886,7 @@ class FormatadorPortugolStudio {
|
|
|
649
886
|
case declaracoes_1.Enquanto:
|
|
650
887
|
this.visitarDeclaracaoEnquanto(declaracaoOuConstruto);
|
|
651
888
|
break;
|
|
889
|
+
/* istanbul ignore next */
|
|
652
890
|
case declaracoes_1.Escreva:
|
|
653
891
|
this.visitarDeclaracaoEscreva(declaracaoOuConstruto);
|
|
654
892
|
break;
|
|
@@ -658,15 +896,18 @@ class FormatadorPortugolStudio {
|
|
|
658
896
|
case declaracoes_1.Expressao:
|
|
659
897
|
this.visitarDeclaracaoDeExpressao(declaracaoOuConstruto);
|
|
660
898
|
break;
|
|
899
|
+
/* istanbul ignore next */
|
|
661
900
|
case construtos_1.ExpressaoRegular:
|
|
662
901
|
this.visitarExpressaoExpressaoRegular(declaracaoOuConstruto);
|
|
663
902
|
break;
|
|
903
|
+
/* istanbul ignore next */
|
|
664
904
|
case declaracoes_1.Falhar:
|
|
665
905
|
this.visitarExpressaoFalhar(declaracaoOuConstruto);
|
|
666
906
|
break;
|
|
667
907
|
case declaracoes_1.Fazer:
|
|
668
908
|
this.visitarDeclaracaoFazer(declaracaoOuConstruto);
|
|
669
909
|
break;
|
|
910
|
+
/* istanbul ignore next */
|
|
670
911
|
case construtos_1.FuncaoConstruto:
|
|
671
912
|
this.visitarExpressaoFuncaoConstruto(declaracaoOuConstruto);
|
|
672
913
|
break;
|
|
@@ -676,9 +917,11 @@ class FormatadorPortugolStudio {
|
|
|
676
917
|
case declaracoes_1.Importar:
|
|
677
918
|
this.visitarDeclaracaoImportar(declaracaoOuConstruto);
|
|
678
919
|
break;
|
|
920
|
+
/* istanbul ignore next */
|
|
679
921
|
case construtos_1.ImportarComoConstruto:
|
|
680
922
|
this.visitarExpressaoImportarComoConstruto(declaracaoOuConstruto);
|
|
681
923
|
break;
|
|
924
|
+
/* istanbul ignore next */
|
|
682
925
|
case construtos_1.Isto:
|
|
683
926
|
this.visitarExpressaoIsto(declaracaoOuConstruto);
|
|
684
927
|
break;
|
|
@@ -700,6 +943,7 @@ class FormatadorPortugolStudio {
|
|
|
700
943
|
case declaracoes_1.Para:
|
|
701
944
|
this.visitarDeclaracaoPara(declaracaoOuConstruto);
|
|
702
945
|
break;
|
|
946
|
+
/* istanbul ignore next */
|
|
703
947
|
case declaracoes_1.ParaCada:
|
|
704
948
|
this.visitarDeclaracaoParaCada(declaracaoOuConstruto);
|
|
705
949
|
break;
|
|
@@ -709,15 +953,19 @@ class FormatadorPortugolStudio {
|
|
|
709
953
|
case declaracoes_1.Se:
|
|
710
954
|
this.visitarDeclaracaoSe(declaracaoOuConstruto);
|
|
711
955
|
break;
|
|
956
|
+
/* istanbul ignore next */
|
|
712
957
|
case construtos_1.Super:
|
|
713
958
|
this.visitarExpressaoSuper(declaracaoOuConstruto);
|
|
714
959
|
break;
|
|
960
|
+
/* istanbul ignore next */
|
|
715
961
|
case declaracoes_1.Sustar:
|
|
716
962
|
this.visitarExpressaoSustar(declaracaoOuConstruto);
|
|
717
963
|
break;
|
|
964
|
+
/* istanbul ignore next */
|
|
718
965
|
case declaracoes_1.Tente:
|
|
719
966
|
this.visitarDeclaracaoTente(declaracaoOuConstruto);
|
|
720
967
|
break;
|
|
968
|
+
/* istanbul ignore next */
|
|
721
969
|
case construtos_1.TipoDe:
|
|
722
970
|
this.visitarExpressaoTipoDe(declaracaoOuConstruto);
|
|
723
971
|
break;
|
|
@@ -727,15 +975,47 @@ class FormatadorPortugolStudio {
|
|
|
727
975
|
case declaracoes_1.Const:
|
|
728
976
|
this.visitarDeclaracaoConst(declaracaoOuConstruto);
|
|
729
977
|
break;
|
|
978
|
+
/* istanbul ignore next */
|
|
979
|
+
case declaracoes_1.ConstMultiplo:
|
|
980
|
+
this.visitarDeclaracaoConstMultiplo(declaracaoOuConstruto);
|
|
981
|
+
break;
|
|
982
|
+
case construtos_1.FimPara:
|
|
983
|
+
this.visitarExpressaoFimPara(declaracaoOuConstruto);
|
|
984
|
+
break;
|
|
730
985
|
case declaracoes_1.Var:
|
|
731
986
|
this.visitarDeclaracaoVar(declaracaoOuConstruto);
|
|
732
987
|
break;
|
|
988
|
+
/* istanbul ignore next */
|
|
989
|
+
case declaracoes_1.VarMultiplo:
|
|
990
|
+
this.visitarDeclaracaoVarMultiplo(declaracaoOuConstruto);
|
|
991
|
+
break;
|
|
733
992
|
case construtos_1.Variavel:
|
|
734
993
|
this.visitarExpressaoDeVariavel(declaracaoOuConstruto);
|
|
735
994
|
break;
|
|
995
|
+
/* istanbul ignore next */
|
|
996
|
+
case construtos_1.ReferenciaFuncao:
|
|
997
|
+
this.visitarExpressaoReferenciaFuncao(declaracaoOuConstruto);
|
|
998
|
+
break;
|
|
999
|
+
/* istanbul ignore next */
|
|
1000
|
+
case construtos_1.Separador:
|
|
1001
|
+
this.visitarExpressaoSeparador(declaracaoOuConstruto);
|
|
1002
|
+
break;
|
|
1003
|
+
/* istanbul ignore next */
|
|
1004
|
+
case declaracoes_1.TextoDocumentacao:
|
|
1005
|
+
this.visitarDeclaracaoTextoDocumentacao(declaracaoOuConstruto);
|
|
1006
|
+
break;
|
|
1007
|
+
/* istanbul ignore next */
|
|
1008
|
+
case construtos_1.Tupla:
|
|
1009
|
+
this.visitarExpressaoTupla(declaracaoOuConstruto);
|
|
1010
|
+
break;
|
|
1011
|
+
/* istanbul ignore next */
|
|
1012
|
+
case construtos_1.TuplaN:
|
|
1013
|
+
this.visitarExpressaoTuplaN(declaracaoOuConstruto);
|
|
1014
|
+
break;
|
|
736
1015
|
case construtos_1.Vetor:
|
|
737
1016
|
this.visitarExpressaoVetor(declaracaoOuConstruto);
|
|
738
1017
|
break;
|
|
1018
|
+
/* istanbul ignore next */
|
|
739
1019
|
default:
|
|
740
1020
|
console.log(declaracaoOuConstruto.constructor.name);
|
|
741
1021
|
break;
|
|
@@ -756,20 +1036,22 @@ class FormatadorPortugolStudio {
|
|
|
756
1036
|
this.indentacaoAtual = 0;
|
|
757
1037
|
this.codigoFormatado = '';
|
|
758
1038
|
this.ultimaLinhaFormatada = -1;
|
|
1039
|
+
// Trabalha em uma cópia para não mutar o array original.
|
|
1040
|
+
const copia = declaracoes.slice();
|
|
759
1041
|
// Comentários podem vir antes da declaração do programa.
|
|
760
|
-
while (
|
|
761
|
-
const comentario =
|
|
1042
|
+
while (copia[0] instanceof declaracoes_1.Comentario) {
|
|
1043
|
+
const comentario = copia.shift();
|
|
762
1044
|
this.visitarDeclaracaoComentario(comentario);
|
|
763
1045
|
}
|
|
764
1046
|
// O avaliador sintático devolve uma última declaração `Expressao`
|
|
765
1047
|
// que é simplemente uma chamada à função `inicio()`, mas que é
|
|
766
1048
|
// irrelevante aqui, então simplesmente a descartamos.
|
|
767
|
-
|
|
1049
|
+
copia.pop();
|
|
768
1050
|
this.codigoFormatado += `programa ${this.quebraLinha}{${this.quebraLinha}`;
|
|
769
1051
|
this.devePularLinha = true;
|
|
770
1052
|
this.deveIndentar = true;
|
|
771
1053
|
this.indentacaoAtual += this.tamanhoIndentacao;
|
|
772
|
-
for (let declaracao of
|
|
1054
|
+
for (let declaracao of copia) {
|
|
773
1055
|
this.formatarDeclaracaoOuConstruto(declaracao);
|
|
774
1056
|
// Track line number at the top-level declaration only
|
|
775
1057
|
if (declaracao.linha !== undefined && !(declaracao instanceof declaracoes_1.Comentario)) {
|