@designliquido/delegua 0.61.1 → 0.61.3
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/analisador-semantico/analisador-semantico-base.d.ts +2 -1
- package/analisador-semantico/analisador-semantico-base.d.ts.map +1 -1
- package/analisador-semantico/analisador-semantico-base.js +3 -0
- package/analisador-semantico/analisador-semantico-base.js.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.js +11 -7
- package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts +8 -6
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +145 -85
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.d.ts +90 -0
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.d.ts.map +1 -0
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js +714 -0
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js.map +1 -0
- package/avaliador-sintatico/dialetos/index.d.ts +1 -0
- package/avaliador-sintatico/dialetos/index.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/index.js +1 -0
- package/avaliador-sintatico/dialetos/index.js.map +1 -1
- package/bibliotecas/biblioteca-global.d.ts +9 -0
- package/bibliotecas/biblioteca-global.d.ts.map +1 -1
- package/bibliotecas/biblioteca-global.js +24 -0
- package/bibliotecas/biblioteca-global.js.map +1 -1
- package/bibliotecas/dialetos/egua-classico/biblioteca-global.js +1 -1
- package/bibliotecas/dialetos/egua-classico/biblioteca-global.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts +9 -0
- package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/biblioteca-global.js +24 -0
- package/bibliotecas/dialetos/pitugues/biblioteca-global.js.map +1 -1
- package/bin/package.json +1 -1
- package/construtos/funcao.d.ts +2 -1
- package/construtos/funcao.d.ts.map +1 -1
- package/construtos/funcao.js +2 -1
- package/construtos/funcao.js.map +1 -1
- package/construtos/isto.d.ts +4 -4
- package/construtos/isto.d.ts.map +1 -1
- package/construtos/isto.js +2 -2
- package/construtos/isto.js.map +1 -1
- package/declaracoes/classe.d.ts +1 -0
- package/declaracoes/classe.d.ts.map +1 -1
- package/declaracoes/classe.js.map +1 -1
- package/declaracoes/comentario.d.ts +1 -1
- package/declaracoes/comentario.d.ts.map +1 -1
- package/declaracoes/comentario.js +1 -1
- package/declaracoes/comentario.js.map +1 -1
- package/declaracoes/escreva.d.ts +2 -1
- package/declaracoes/escreva.d.ts.map +1 -1
- package/declaracoes/escreva.js.map +1 -1
- package/declaracoes/index.d.ts +1 -0
- package/declaracoes/index.d.ts.map +1 -1
- package/declaracoes/index.js +1 -0
- package/declaracoes/index.js.map +1 -1
- package/declaracoes/texto-documentacao.d.ts +12 -0
- package/declaracoes/texto-documentacao.d.ts.map +1 -0
- package/declaracoes/texto-documentacao.js +21 -0
- package/declaracoes/texto-documentacao.js.map +1 -0
- package/formatadores/formatador-delegua.d.ts +4 -2
- package/formatadores/formatador-delegua.d.ts.map +1 -1
- package/formatadores/formatador-delegua.js +55 -43
- package/formatadores/formatador-delegua.js.map +1 -1
- package/formatadores/formatador-pitugues.d.ts +70 -60
- package/formatadores/formatador-pitugues.d.ts.map +1 -1
- package/formatadores/formatador-pitugues.js +390 -227
- package/formatadores/formatador-pitugues.js.map +1 -1
- package/interfaces/visitante-comum-interface.d.ts +2 -1
- package/interfaces/visitante-comum-interface.d.ts.map +1 -1
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts +2 -1
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts.map +1 -1
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +4 -1
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
- package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts +2 -1
- package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts.map +1 -1
- package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js +7 -4
- package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js.map +1 -1
- package/interpretador/dialetos/pitugues/comum.js +11 -11
- package/interpretador/dialetos/pitugues/comum.js.map +1 -1
- package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts +2 -1
- package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts.map +1 -1
- package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js +3 -0
- package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js.map +1 -1
- package/interpretador/estruturas/delegua-funcao.d.ts.map +1 -1
- package/interpretador/estruturas/delegua-funcao.js.map +1 -1
- package/interpretador/estruturas/metodo-primitiva.d.ts +3 -1
- package/interpretador/estruturas/metodo-primitiva.d.ts.map +1 -1
- package/interpretador/estruturas/metodo-primitiva.js +5 -2
- package/interpretador/estruturas/metodo-primitiva.js.map +1 -1
- package/interpretador/interpretador-base.d.ts +5 -4
- package/interpretador/interpretador-base.d.ts.map +1 -1
- package/interpretador/interpretador-base.js +50 -16
- package/interpretador/interpretador-base.js.map +1 -1
- package/interpretador/interpretador.d.ts.map +1 -1
- package/interpretador/interpretador.js +14 -11
- package/interpretador/interpretador.js.map +1 -1
- package/lexador/dialetos/index.d.ts +1 -0
- package/lexador/dialetos/index.d.ts.map +1 -1
- package/lexador/dialetos/index.js +1 -0
- package/lexador/dialetos/index.js.map +1 -1
- package/lexador/dialetos/lexador-prisma.d.ts +46 -0
- package/lexador/dialetos/lexador-prisma.d.ts.map +1 -0
- package/lexador/dialetos/lexador-prisma.js +357 -0
- package/lexador/dialetos/lexador-prisma.js.map +1 -0
- package/lexador/dialetos/palavras-reservadas/prisma.d.ts +40 -0
- package/lexador/dialetos/palavras-reservadas/prisma.d.ts.map +1 -0
- package/lexador/dialetos/palavras-reservadas/prisma.js +47 -0
- package/lexador/dialetos/palavras-reservadas/prisma.js.map +1 -0
- package/package.json +1 -1
- package/tipos-de-dados/dialetos/prisma.d.ts +28 -0
- package/tipos-de-dados/dialetos/prisma.d.ts.map +1 -0
- package/tipos-de-dados/dialetos/prisma.js +29 -0
- package/tipos-de-dados/dialetos/prisma.js.map +1 -0
- package/tipos-de-simbolos/prisma.d.ts +78 -0
- package/tipos-de-simbolos/prisma.d.ts.map +1 -0
- package/tipos-de-simbolos/prisma.js +79 -0
- package/tipos-de-simbolos/prisma.js.map +1 -0
- package/umd/delegua.js +2333 -803
|
@@ -1,234 +1,397 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.FormatadorPitugues = void 0;
|
|
7
|
+
const construtos_1 = require("../construtos");
|
|
8
|
+
const declaracoes_1 = require("../declaracoes");
|
|
9
|
+
const pitugues_1 = __importDefault(require("../tipos-de-simbolos/pitugues"));
|
|
4
10
|
class FormatadorPitugues {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
visitarDeclaracaoDeExpressao(declaracao) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
11
|
+
constructor() {
|
|
12
|
+
this.nívelIndentação = 0;
|
|
13
|
+
this.tamanhoIndentação = 4;
|
|
14
|
+
this.códigoFormatado = '';
|
|
15
|
+
this.quebraLinha = '\n';
|
|
16
|
+
}
|
|
17
|
+
indentar() {
|
|
18
|
+
return ' '.repeat(this.nívelIndentação);
|
|
19
|
+
}
|
|
20
|
+
adicionarLinha(texto = '') {
|
|
21
|
+
this.códigoFormatado += this.indentar() + texto + this.quebraLinha;
|
|
22
|
+
}
|
|
23
|
+
aumentarIndentação() {
|
|
24
|
+
this.nívelIndentação += this.tamanhoIndentação;
|
|
25
|
+
}
|
|
26
|
+
diminuirIndentação() {
|
|
27
|
+
this.nívelIndentação -= this.tamanhoIndentação;
|
|
28
|
+
}
|
|
29
|
+
// Métodos obrigatórios da interface, não usados no Pituguês.
|
|
30
|
+
visitarDeclaracaoCabecalhoPrograma() { return Promise.resolve(); }
|
|
31
|
+
visitarDeclaracaoConstMultiplo() { return Promise.resolve(); }
|
|
32
|
+
visitarDeclaracaoEscrevaMesmaLinha() { return Promise.resolve(); }
|
|
33
|
+
visitarDeclaracaoInicioAlgoritmo() { return Promise.resolve(); }
|
|
34
|
+
visitarDeclaracaoTendoComo() { return Promise.resolve(); }
|
|
35
|
+
visitarDeclaracaoVarMultiplo() { return Promise.resolve(); }
|
|
36
|
+
visitarExpressaoAcessoElementoMatriz() { return Promise.resolve(); }
|
|
37
|
+
visitarExpressaoAcessoMetodo() { return Promise.resolve(); }
|
|
38
|
+
visitarExpressaoAcessoPropriedade() { return Promise.resolve(); }
|
|
39
|
+
visitarExpressaoArgumentoReferenciaFuncao() { return Promise.resolve(); }
|
|
40
|
+
visitarExpressaoAtribuicaoPorIndicesMatriz() { return Promise.resolve(); }
|
|
41
|
+
visitarExpressaoComentario() { return Promise.resolve(); }
|
|
42
|
+
visitarExpressaoExpressaoRegular() { return Promise.resolve(); }
|
|
43
|
+
visitarExpressaoFimPara() { return Promise.resolve(); }
|
|
44
|
+
visitarExpressaoFormatacaoEscrita() { return Promise.resolve(); }
|
|
45
|
+
visitarExpressaoReferenciaFuncao() { return Promise.resolve(); }
|
|
46
|
+
visitarExpressaoSeparador() { return Promise.resolve(); }
|
|
47
|
+
visitarExpressaoTupla() { return Promise.resolve(); }
|
|
48
|
+
async visitarDeclaracaoDeExpressao(declaracao) {
|
|
49
|
+
this.códigoFormatado += this.indentar();
|
|
50
|
+
this.códigoFormatado += await declaracao.expressao.aceitar(this) + `\n`;
|
|
51
|
+
}
|
|
52
|
+
async visitarDeclaracaoClasse(declaração) {
|
|
53
|
+
this.adicionarLinha(`classe ${declaração.simbolo.lexema}:`);
|
|
54
|
+
this.aumentarIndentação();
|
|
55
|
+
// Atributos
|
|
56
|
+
for (const atributo of declaração.propriedades || []) {
|
|
57
|
+
const tipo = atributo.tipo ? `: ${atributo.tipo}` : '';
|
|
58
|
+
this.adicionarLinha(`${atributo.nome.lexema}${tipo}`);
|
|
59
|
+
}
|
|
60
|
+
// Métodos
|
|
61
|
+
for (const método of declaração.metodos || []) {
|
|
62
|
+
const nome = método.simbolo.lexema;
|
|
63
|
+
const éConstrutor = nome === 'construtor';
|
|
64
|
+
const parâmetros = método.funcao.parametros;
|
|
65
|
+
this.códigoFormatado += this.indentar();
|
|
66
|
+
this.códigoFormatado += `${éConstrutor ? 'construtor' : `função ${nome}`}(`;
|
|
67
|
+
if (parâmetros.length > 0) {
|
|
68
|
+
for (let i = 0; i < parâmetros.length; i++) {
|
|
69
|
+
const p = parâmetros[i];
|
|
70
|
+
const tipo = p.tipoDado ? `: ${p.tipoDado}` : '';
|
|
71
|
+
this.códigoFormatado += `${p.nome.lexema}${tipo}`;
|
|
72
|
+
this.códigoFormatado += ', ';
|
|
73
|
+
}
|
|
74
|
+
if (parâmetros.length > 1) {
|
|
75
|
+
this.códigoFormatado = this.códigoFormatado.slice(0, -2);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
this.códigoFormatado += '):\n';
|
|
79
|
+
this.aumentarIndentação();
|
|
80
|
+
for (const instrução of método.funcao.corpo) {
|
|
81
|
+
await instrução.aceitar(this);
|
|
82
|
+
}
|
|
83
|
+
this.diminuirIndentação();
|
|
84
|
+
}
|
|
85
|
+
this.diminuirIndentação();
|
|
86
|
+
}
|
|
87
|
+
async visitarDeclaracaoDefinicaoFuncao(declaração) {
|
|
88
|
+
const parâmetros = declaração.funcao.parametros;
|
|
89
|
+
this.códigoFormatado += this.indentar() + `função ${declaração.simbolo.lexema}(`;
|
|
90
|
+
for (let i = 0; i < parâmetros.length; i++) {
|
|
91
|
+
const p = parâmetros[i];
|
|
92
|
+
const tipo = p.tipoDado ? `: ${p.tipoDado}` : '';
|
|
93
|
+
this.códigoFormatado += `${p.nome.lexema}${tipo}`;
|
|
94
|
+
if (i < parâmetros.length - 1)
|
|
95
|
+
this.códigoFormatado += ', ';
|
|
96
|
+
}
|
|
97
|
+
this.códigoFormatado += '):\n';
|
|
98
|
+
this.aumentarIndentação();
|
|
99
|
+
for (const instrução of declaração.funcao.corpo) {
|
|
100
|
+
await instrução.aceitar(this);
|
|
101
|
+
}
|
|
102
|
+
this.diminuirIndentação();
|
|
103
|
+
}
|
|
104
|
+
visitarDeclaracaoTextoDocumentacao(declaracao) {
|
|
105
|
+
this.códigoFormatado += `'''${declaracao.conteudo}'''`;
|
|
106
|
+
}
|
|
107
|
+
async visitarDeclaracaoVar(declaração) {
|
|
108
|
+
this.códigoFormatado += this.indentar() + `var ${declaração.simbolo.lexema} = `;
|
|
109
|
+
if (declaração.inicializador) {
|
|
110
|
+
this.códigoFormatado += await declaração.inicializador.aceitar(this);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
this.códigoFormatado += 'nulo';
|
|
114
|
+
}
|
|
115
|
+
this.códigoFormatado += `\n`;
|
|
116
|
+
}
|
|
117
|
+
async visitarDeclaracaoConst(declaração) {
|
|
118
|
+
return Promise.resolve();
|
|
119
|
+
}
|
|
120
|
+
async visitarDeclaracaoSe(declaração) {
|
|
121
|
+
this.adicionarLinha(`se ${await declaração.condicao.aceitar(this)}:`);
|
|
122
|
+
this.aumentarIndentação();
|
|
123
|
+
for (const instrução of declaração.caminhoEntao.declaracoes) {
|
|
124
|
+
await instrução.aceitar(this);
|
|
125
|
+
}
|
|
126
|
+
this.diminuirIndentação();
|
|
127
|
+
if (declaração.caminhoSenao) {
|
|
128
|
+
this.adicionarLinha('senão:');
|
|
129
|
+
this.aumentarIndentação();
|
|
130
|
+
if (declaração.caminhoSenao instanceof declaracoes_1.Bloco) {
|
|
131
|
+
for (const instrução of declaração.caminhoSenao.declaracoes) {
|
|
132
|
+
await instrução.aceitar(this);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
await declaração.caminhoSenao.aceitar(this);
|
|
137
|
+
}
|
|
138
|
+
this.diminuirIndentação();
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
async visitarDeclaracaoEnquanto(declaração) {
|
|
142
|
+
this.adicionarLinha(`enquanto ${await declaração.condicao.aceitar(this)}:`);
|
|
143
|
+
this.aumentarIndentação();
|
|
144
|
+
for (const instrução of declaração.corpo.declaracoes) {
|
|
145
|
+
await instrução.aceitar(this);
|
|
146
|
+
}
|
|
147
|
+
this.diminuirIndentação();
|
|
148
|
+
}
|
|
149
|
+
async visitarDeclaracaoEscolha(declaração) {
|
|
150
|
+
var _a, _b;
|
|
151
|
+
const valor = await declaração.identificadorOuLiteral.aceitar(this);
|
|
152
|
+
this.adicionarLinha(`escolha ${valor}:`);
|
|
153
|
+
this.aumentarIndentação();
|
|
154
|
+
for (const caminho of declaração.caminhos) {
|
|
155
|
+
for (const condição of caminho.condicoes) {
|
|
156
|
+
this.adicionarLinha(`caso ${await condição.aceitar(this)}:`);
|
|
157
|
+
this.aumentarIndentação();
|
|
158
|
+
for (const instrução of caminho.declaracoes) {
|
|
159
|
+
await instrução.aceitar(this);
|
|
160
|
+
}
|
|
161
|
+
this.diminuirIndentação();
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if ((_b = (_a = declaração.caminhoPadrao) === null || _a === void 0 ? void 0 : _a.declaracoes) === null || _b === void 0 ? void 0 : _b.length) {
|
|
165
|
+
this.adicionarLinha('padrão:');
|
|
166
|
+
this.aumentarIndentação();
|
|
167
|
+
for (const instrução of declaração.caminhoPadrao.declaracoes) {
|
|
168
|
+
await instrução.aceitar(this);
|
|
169
|
+
}
|
|
170
|
+
this.diminuirIndentação();
|
|
171
|
+
}
|
|
172
|
+
this.diminuirIndentação();
|
|
173
|
+
}
|
|
174
|
+
async visitarDeclaracaoFazer(declaração) {
|
|
175
|
+
this.adicionarLinha('fazer:');
|
|
176
|
+
this.aumentarIndentação();
|
|
177
|
+
for (const instrução of declaração.caminhoFazer.declaracoes) {
|
|
178
|
+
await instrução.aceitar(this);
|
|
179
|
+
}
|
|
180
|
+
this.diminuirIndentação();
|
|
181
|
+
this.adicionarLinha(`enquanto ${await declaração.condicaoEnquanto.aceitar(this)}`);
|
|
182
|
+
}
|
|
183
|
+
async visitarDeclaracaoParaCada(declaração) {
|
|
184
|
+
const variavelIteracao = await declaração.variavelIteracao.aceitar(this);
|
|
185
|
+
const vetorOuDicionario = await declaração.vetorOuDicionario.aceitar(this);
|
|
186
|
+
this.adicionarLinha(`para cada ${variavelIteracao} de ${vetorOuDicionario}:`);
|
|
187
|
+
this.aumentarIndentação();
|
|
188
|
+
for (const instrução of declaração.corpo.declaracoes) {
|
|
189
|
+
await instrução.aceitar(this);
|
|
190
|
+
}
|
|
191
|
+
this.diminuirIndentação();
|
|
192
|
+
}
|
|
193
|
+
async visitarDeclaracaoPara(declaração) {
|
|
194
|
+
return Promise.resolve();
|
|
195
|
+
}
|
|
196
|
+
async visitarDeclaracaoTente(declaração) {
|
|
197
|
+
this.adicionarLinha('tente:');
|
|
198
|
+
this.aumentarIndentação();
|
|
199
|
+
for (const instrução of declaração.caminhoTente)
|
|
200
|
+
await instrução.aceitar(this);
|
|
201
|
+
this.diminuirIndentação();
|
|
202
|
+
if (declaração.caminhoPegue) {
|
|
203
|
+
this.adicionarLinha('pegue como erro:');
|
|
204
|
+
this.aumentarIndentação();
|
|
205
|
+
const declaracoes = declaração.caminhoPegue instanceof construtos_1.FuncaoConstruto ? declaração.caminhoPegue.corpo : declaração.caminhoPegue;
|
|
206
|
+
for (const instrução of declaracoes) {
|
|
207
|
+
await instrução.aceitar(this);
|
|
208
|
+
}
|
|
209
|
+
this.diminuirIndentação();
|
|
210
|
+
}
|
|
211
|
+
if (declaração.caminhoFinalmente) {
|
|
212
|
+
this.adicionarLinha('finalmente:');
|
|
213
|
+
this.aumentarIndentação();
|
|
214
|
+
for (const instrução of declaração.caminhoFinalmente)
|
|
215
|
+
await instrução.aceitar(this);
|
|
216
|
+
this.diminuirIndentação();
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
async visitarDeclaracaoEscreva(declaração) {
|
|
220
|
+
this.códigoFormatado += this.indentar() + `${declaração.simboloEscreva ? declaração.simboloEscreva.lexema : 'imprima'}(`;
|
|
221
|
+
for (let i = 0; i < declaração.argumentos.length; i++) {
|
|
222
|
+
this.códigoFormatado += await declaração.argumentos[i].aceitar(this);
|
|
223
|
+
if (i < declaração.argumentos.length - 1)
|
|
224
|
+
this.códigoFormatado += ', ';
|
|
225
|
+
}
|
|
226
|
+
this.códigoFormatado += `)${this.quebraLinha}`;
|
|
227
|
+
}
|
|
228
|
+
async visitarDeclaracaoImportar(declaração) {
|
|
229
|
+
const caminho = await declaração.caminho.aceitar(this);
|
|
230
|
+
this.adicionarLinha(`importar "${caminho.replace(/'/g, '')}"`);
|
|
231
|
+
}
|
|
232
|
+
async visitarDeclaracaoComentario(declaração) {
|
|
233
|
+
this.adicionarLinha(`# ${declaração.conteudo}`);
|
|
234
|
+
}
|
|
235
|
+
// ================================================================
|
|
236
|
+
// Expressões
|
|
237
|
+
// ================================================================
|
|
238
|
+
async visitarExpressaoBloco(declaração) {
|
|
239
|
+
for (const instrução of declaração.declaracoes) {
|
|
240
|
+
await instrução.aceitar(this);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
async visitarExpressaoRetornar(declaração) {
|
|
244
|
+
if (declaração.valor) {
|
|
245
|
+
return `retorna ${await declaração.valor.aceitar(this)}`;
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
return 'retorna';
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
visitarExpressaoContinua() {
|
|
252
|
+
this.adicionarLinha('continue');
|
|
253
|
+
}
|
|
254
|
+
visitarExpressaoSustar() {
|
|
255
|
+
this.adicionarLinha('sustar');
|
|
256
|
+
}
|
|
257
|
+
async visitarExpressaoFalhar(expressão) {
|
|
258
|
+
const mensagem = expressão.explicacao ? await expressão.explicacao.aceitar(this) : '"Erro"';
|
|
259
|
+
this.adicionarLinha(`levante Erro(${mensagem})`);
|
|
260
|
+
}
|
|
261
|
+
async visitarExpressaoDeAtribuicao(expressão) {
|
|
262
|
+
return `${await expressão.alvo.aceitar(this)} = ${await expressão.valor.aceitar(this)}`;
|
|
263
|
+
}
|
|
264
|
+
async visitarExpressaoBinaria(expressão) {
|
|
265
|
+
const esquerda = await expressão.esquerda.aceitar(this);
|
|
266
|
+
const direita = await expressão.direita.aceitar(this);
|
|
267
|
+
const operador = this.mapearOperador(expressão.operador.tipo);
|
|
268
|
+
return `${esquerda} ${operador} ${direita}`;
|
|
269
|
+
}
|
|
270
|
+
async visitarExpressaoLogica(expressão) {
|
|
271
|
+
const esquerda = await expressão.esquerda.aceitar(this);
|
|
272
|
+
const direita = await expressão.direita.aceitar(this);
|
|
273
|
+
const operador = expressão.operador.tipo === pitugues_1.default.E ? 'e' : 'ou';
|
|
274
|
+
return `${esquerda} ${operador} ${direita}`;
|
|
275
|
+
}
|
|
276
|
+
async visitarExpressaoLiteral(expressão) {
|
|
277
|
+
if (expressão.valor === null)
|
|
278
|
+
return 'nulo';
|
|
279
|
+
if (expressão.valor === true)
|
|
280
|
+
return 'verdadeiro';
|
|
281
|
+
if (expressão.valor === false)
|
|
282
|
+
return 'falso';
|
|
283
|
+
if (typeof expressão.valor === 'string') {
|
|
284
|
+
return `'${expressão.valor.replace(/'/g, "\\'")}'`;
|
|
285
|
+
}
|
|
286
|
+
return String(expressão.valor);
|
|
287
|
+
}
|
|
288
|
+
async visitarExpressaoDeVariavel(expressão) {
|
|
289
|
+
return expressão.simbolo.lexema;
|
|
290
|
+
}
|
|
291
|
+
async visitarExpressaoAgrupamento(expressão) {
|
|
292
|
+
return `(${await expressão.expressao.aceitar(this)})`;
|
|
293
|
+
}
|
|
294
|
+
async visitarExpressaoUnaria(expressão) {
|
|
295
|
+
const operador = expressão.operador.tipo === pitugues_1.default.SUBTRACAO ? '-'
|
|
296
|
+
: expressão.operador.tipo === pitugues_1.default.NEGACAO ? 'não '
|
|
297
|
+
: '';
|
|
298
|
+
const operando = await expressão.operando.aceitar(this);
|
|
299
|
+
return expressão.incidenciaOperador === 'ANTES'
|
|
300
|
+
? `${operador}${operando}`
|
|
301
|
+
: `${operando}${operador}`;
|
|
302
|
+
}
|
|
303
|
+
async visitarExpressaoDeChamada(expressão) {
|
|
304
|
+
const função = await expressão.entidadeChamada.aceitar(this);
|
|
305
|
+
const argumentos = await Promise.all(expressão.argumentos.map(a => a.aceitar(this)));
|
|
306
|
+
return `${função}(${argumentos.join(', ')})`;
|
|
307
|
+
}
|
|
308
|
+
visitarExpressaoIsto() {
|
|
309
|
+
return Promise.resolve('isto');
|
|
310
|
+
}
|
|
311
|
+
async visitarExpressaoSuper() {
|
|
312
|
+
return 'super()';
|
|
313
|
+
}
|
|
314
|
+
async visitarExpressaoVetor(expressão) {
|
|
315
|
+
const valores = await Promise.all(expressão.valores.map(v => v.aceitar(this)));
|
|
316
|
+
return `[${valores.join(', ')}]`;
|
|
317
|
+
}
|
|
318
|
+
async visitarExpressaoDicionario(expressão) {
|
|
319
|
+
const pares = await Promise.all(expressão.chaves.map(async (chave, i) => {
|
|
320
|
+
const k = await chave.aceitar(this);
|
|
321
|
+
const v = await expressão.valores[i].aceitar(this);
|
|
322
|
+
return `${k}: ${v}`;
|
|
323
|
+
}));
|
|
324
|
+
return `{${pares.join(', ')}}`;
|
|
325
|
+
}
|
|
326
|
+
async visitarExpressaoAcessoIndiceVariavel(expressão) {
|
|
327
|
+
const entidade = await expressão.entidadeChamada.aceitar(this);
|
|
328
|
+
const índice = await expressão.indice.aceitar(this);
|
|
329
|
+
return `${entidade}[${índice}]`;
|
|
330
|
+
}
|
|
331
|
+
async visitarExpressaoAtribuicaoPorIndice(expressão) {
|
|
332
|
+
const objeto = await expressão.objeto.aceitar(this);
|
|
333
|
+
const índice = await expressão.indice.aceitar(this);
|
|
334
|
+
const valor = await expressão.valor.aceitar(this);
|
|
335
|
+
return `${objeto}[${índice}] = ${valor}`;
|
|
336
|
+
}
|
|
337
|
+
async visitarExpressaoAcessoMetodoOuPropriedade(expressão) {
|
|
338
|
+
const objeto = await expressão.objeto.aceitar(this);
|
|
339
|
+
return `${objeto}.${expressão.simbolo.lexema}`;
|
|
340
|
+
}
|
|
341
|
+
async visitarExpressaoDefinirValor(expressão) {
|
|
342
|
+
const objeto = await expressão.objeto.aceitar(this);
|
|
343
|
+
const valor = await expressão.valor.aceitar(this);
|
|
344
|
+
return `${objeto}.${expressão.nome.lexema} = ${valor}`;
|
|
345
|
+
}
|
|
346
|
+
async visitarExpressaoFuncaoConstruto(expressão) {
|
|
347
|
+
const parâmetros = expressão.parametros.map(p => {
|
|
348
|
+
const tipo = p.tipoDado ? `: ${p.tipoDado}` : '';
|
|
349
|
+
return p.nome.lexema + tipo;
|
|
350
|
+
}).join(', ');
|
|
351
|
+
let funçãoStr = `função(${parâmetros || ''}):\n`;
|
|
352
|
+
this.aumentarIndentação();
|
|
353
|
+
for (const instrução of expressão.corpo) {
|
|
354
|
+
const linha = await instrução.aceitar(this);
|
|
355
|
+
if (linha) { // Only add if it returns something
|
|
356
|
+
funçãoStr += this.indentar() + linha;
|
|
357
|
+
if (!linha.endsWith('\n'))
|
|
358
|
+
funçãoStr += '\n';
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
this.diminuirIndentação();
|
|
362
|
+
return funçãoStr.trimEnd();
|
|
363
|
+
}
|
|
364
|
+
async visitarExpressaoLeia(expressão) {
|
|
365
|
+
const argumentos = await Promise.all(expressão.argumentos.map(a => a.aceitar(this)));
|
|
366
|
+
return argumentos.length > 0 ? `input(${argumentos.join(', ')})` : 'input()';
|
|
367
|
+
}
|
|
368
|
+
async visitarExpressaoTipoDe(expressão) {
|
|
369
|
+
const valor = await expressão.valor.aceitar(this);
|
|
370
|
+
return `type(${valor})`;
|
|
371
|
+
}
|
|
372
|
+
mapearOperador(tipo) {
|
|
373
|
+
const mapa = {
|
|
374
|
+
[pitugues_1.default.ADICAO]: '+',
|
|
375
|
+
[pitugues_1.default.SUBTRACAO]: '-',
|
|
376
|
+
[pitugues_1.default.MULTIPLICACAO]: '*',
|
|
377
|
+
[pitugues_1.default.DIVISAO]: '/',
|
|
378
|
+
[pitugues_1.default.MODULO]: '%',
|
|
379
|
+
[pitugues_1.default.MAIOR]: '>',
|
|
380
|
+
[pitugues_1.default.MAIOR_IGUAL]: '>=',
|
|
381
|
+
[pitugues_1.default.MENOR]: '<',
|
|
382
|
+
[pitugues_1.default.MENOR_IGUAL]: '<=',
|
|
383
|
+
[pitugues_1.default.IGUAL_IGUAL]: '==',
|
|
384
|
+
[pitugues_1.default.DIFERENTE]: '!=',
|
|
385
|
+
};
|
|
386
|
+
return mapa[tipo] || String(tipo);
|
|
387
|
+
}
|
|
388
|
+
async formatar(declarações) {
|
|
389
|
+
this.códigoFormatado = '';
|
|
390
|
+
this.nívelIndentação = 0;
|
|
391
|
+
for (const declaração of declarações) {
|
|
392
|
+
await declaração.aceitar(this);
|
|
393
|
+
}
|
|
394
|
+
return this.códigoFormatado.trimEnd() + '\n';
|
|
232
395
|
}
|
|
233
396
|
}
|
|
234
397
|
exports.FormatadorPitugues = FormatadorPitugues;
|