@designliquido/lincones-sqlite 0.0.3 → 0.0.4
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/execucao.d.ts +1 -1
- package/execucao.js +52 -52
- package/execucao.js.map +1 -1
- package/fontes/avaliador-sintatico/avaliador-sintatico.d.ts +6 -15
- package/fontes/avaliador-sintatico/avaliador-sintatico.js +42 -261
- package/fontes/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/fontes/avaliador-sintatico/index.d.ts +1 -2
- package/fontes/avaliador-sintatico/index.js +5 -20
- package/fontes/avaliador-sintatico/index.js.map +1 -1
- package/fontes/comum/fontes/avaliador-sintatico/avaliador-sintatico-base.d.ts +36 -0
- package/{comum/fontes/avaliador-sintatico/avaliador-sintatico.js → fontes/comum/fontes/avaliador-sintatico/avaliador-sintatico-base.js} +444 -353
- package/fontes/comum/fontes/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -0
- package/fontes/comum/fontes/avaliador-sintatico/avaliador-sintatico.d.ts +7 -0
- package/fontes/comum/fontes/avaliador-sintatico/avaliador-sintatico.js +12 -0
- package/fontes/comum/fontes/avaliador-sintatico/avaliador-sintatico.js.map +1 -0
- package/{comum → fontes/comum}/fontes/avaliador-sintatico/erro-avaliador-sintatico.d.ts +5 -5
- package/{comum → fontes/comum}/fontes/avaliador-sintatico/erro-avaliador-sintatico.js +11 -11
- package/fontes/comum/fontes/avaliador-sintatico/erro-avaliador-sintatico.js.map +1 -0
- package/fontes/comum/fontes/avaliador-sintatico/index.d.ts +3 -0
- package/{comum → fontes/comum}/fontes/avaliador-sintatico/index.js +19 -22
- package/fontes/comum/fontes/avaliador-sintatico/index.js.map +1 -0
- package/fontes/comum/fontes/comandos/alterar.d.ts +8 -0
- package/fontes/comum/fontes/comandos/alterar.js +14 -0
- package/fontes/comum/fontes/comandos/alterar.js.map +1 -0
- package/{comum → fontes/comum}/fontes/comandos/atualizar.d.ts +14 -14
- package/{comum → fontes/comum}/fontes/comandos/atualizar.js +13 -13
- package/fontes/comum/fontes/comandos/atualizar.js.map +1 -0
- package/{comum → fontes/comum}/fontes/comandos/comando.d.ts +6 -6
- package/{comum → fontes/comum}/fontes/comandos/comando.js +13 -13
- package/fontes/comum/fontes/comandos/comando.js.map +1 -0
- package/fontes/comum/fontes/comandos/criar.d.ts +8 -0
- package/{comum → fontes/comum}/fontes/comandos/criar.js +12 -12
- package/fontes/comum/fontes/comandos/criar.js.map +1 -0
- package/fontes/comum/fontes/comandos/excluir-entidade.d.ts +6 -0
- package/fontes/comum/fontes/comandos/excluir-entidade.js +13 -0
- package/fontes/comum/fontes/comandos/excluir-entidade.js.map +1 -0
- package/{comum → fontes/comum}/fontes/comandos/excluir.d.ts +6 -6
- package/{comum → fontes/comum}/fontes/comandos/excluir.js +12 -12
- package/fontes/comum/fontes/comandos/excluir.js.map +1 -0
- package/{comum → fontes/comum}/fontes/comandos/index.d.ts +8 -7
- package/{comum → fontes/comum}/fontes/comandos/index.js +24 -23
- package/fontes/comum/fontes/comandos/index.js.map +1 -0
- package/{comum → fontes/comum}/fontes/comandos/inserir.d.ts +8 -8
- package/{comum → fontes/comum}/fontes/comandos/inserir.js +13 -13
- package/fontes/comum/fontes/comandos/inserir.js.map +1 -0
- package/{comum → fontes/comum}/fontes/comandos/selecionar.d.ts +9 -9
- package/{comum → fontes/comum}/fontes/comandos/selecionar.js +14 -14
- package/fontes/comum/fontes/comandos/selecionar.js.map +1 -0
- package/{comum → fontes/comum}/fontes/construtos/coluna.d.ts +11 -11
- package/{comum → fontes/comum}/fontes/construtos/coluna.js +19 -15
- package/fontes/comum/fontes/construtos/coluna.js.map +1 -0
- package/{comum → fontes/comum}/fontes/construtos/condicao.d.ts +6 -6
- package/{comum → fontes/comum}/fontes/construtos/condicao.js +11 -11
- package/fontes/comum/fontes/construtos/condicao.js.map +1 -0
- package/{comum → fontes/comum}/fontes/construtos/index.d.ts +2 -1
- package/{comum → fontes/comum}/fontes/construtos/index.js +18 -17
- package/fontes/comum/fontes/construtos/index.js.map +1 -0
- package/fontes/comum/fontes/construtos/operacao-alteracao-tabela.d.ts +7 -0
- package/fontes/comum/fontes/construtos/operacao-alteracao-tabela.js +15 -0
- package/fontes/comum/fontes/construtos/operacao-alteracao-tabela.js.map +1 -0
- package/fontes/comum/fontes/construtos/restricao.d.ts +13 -0
- package/fontes/comum/fontes/construtos/restricao.js +19 -0
- package/fontes/comum/fontes/construtos/restricao.js.map +1 -0
- package/{comum → fontes/comum}/fontes/interfaces/avaliador-sintatico-interface.d.ts +14 -14
- package/{comum → fontes/comum}/fontes/interfaces/avaliador-sintatico-interface.js +2 -2
- package/fontes/comum/fontes/interfaces/avaliador-sintatico-interface.js.map +1 -0
- package/fontes/comum/fontes/interfaces/index.d.ts +3 -0
- package/fontes/comum/fontes/interfaces/index.js +20 -0
- package/fontes/comum/fontes/interfaces/index.js.map +1 -0
- package/fontes/comum/fontes/interfaces/lincones-interface.d.ts +3 -0
- package/{comum → fontes/comum}/fontes/interfaces/lincones-interface.js +2 -2
- package/fontes/comum/fontes/interfaces/lincones-interface.js.map +1 -0
- package/{comum → fontes/comum}/fontes/interfaces/retornos/index.d.ts +16 -16
- package/{comum → fontes/comum}/fontes/interfaces/retornos/index.js +2 -2
- package/fontes/comum/fontes/interfaces/retornos/index.js.map +1 -0
- package/{comum → fontes/comum}/fontes/interfaces/simbolo-interface.d.ts +6 -6
- package/{comum → fontes/comum}/fontes/interfaces/simbolo-interface.js +2 -2
- package/fontes/comum/fontes/interfaces/simbolo-interface.js.map +1 -0
- package/fontes/comum/fontes/lexador/index.d.ts +1 -0
- package/{comum/fontes/interfaces → fontes/comum/fontes/lexador}/index.js +17 -17
- package/fontes/comum/fontes/lexador/index.js.map +1 -0
- package/{comum/fontes/lexador/index.d.ts → fontes/comum/fontes/lexador/lexador.d.ts} +26 -26
- package/{comum/fontes/lexador/index.js → fontes/comum/fontes/lexador/lexador.js} +220 -220
- package/fontes/comum/fontes/lexador/lexador.js.map +1 -0
- package/{comum → fontes/comum}/fontes/lexador/simbolo.d.ts +9 -9
- package/{comum → fontes/comum}/fontes/lexador/simbolo.js +15 -15
- package/fontes/comum/fontes/lexador/simbolo.js.map +1 -0
- package/{comum → fontes/comum}/fontes/palavras-reservadas.d.ts +51 -40
- package/{comum → fontes/comum}/fontes/palavras-reservadas.js +56 -45
- package/fontes/comum/fontes/palavras-reservadas.js.map +1 -0
- package/{comum → fontes/comum}/fontes/tipos-de-simbolos.d.ts +57 -52
- package/{comum → fontes/comum}/fontes/tipos-de-simbolos.js +58 -53
- package/fontes/comum/fontes/tipos-de-simbolos.js.map +1 -0
- package/fontes/comum/fontes/tradutor/index.d.ts +32 -0
- package/{comum → fontes/comum}/fontes/tradutor/index.js +238 -183
- package/fontes/comum/fontes/tradutor/index.js.map +1 -0
- package/fontes/comum/index.d.ts +8 -0
- package/fontes/comum/index.js +25 -0
- package/fontes/comum/index.js.map +1 -0
- package/{comum → fontes/comum}/jest.config.d.ts +3 -3
- package/{comum → fontes/comum}/jest.config.js +11 -11
- package/fontes/comum/jest.config.js.map +1 -0
- package/{comum/execucao.d.ts → fontes/comum/testes/avaliador-sintatico.test.d.ts} +1 -1
- package/fontes/comum/testes/avaliador-sintatico.test.js +86 -0
- package/fontes/comum/testes/avaliador-sintatico.test.js.map +1 -0
- package/fontes/comum/testes/lexador.test.d.ts +1 -0
- package/fontes/comum/testes/lexador.test.js +83 -0
- package/fontes/comum/testes/lexador.test.js.map +1 -0
- package/fontes/comum/testes/tradutor.test.d.ts +1 -0
- package/fontes/comum/testes/tradutor.test.js +133 -0
- package/fontes/comum/testes/tradutor.test.js.map +1 -0
- package/fontes/infraestrutura/cliente-sqlite.d.ts +10 -10
- package/fontes/infraestrutura/cliente-sqlite.js +71 -71
- package/fontes/infraestrutura/cliente-sqlite.js.map +1 -1
- package/fontes/infraestrutura/index.d.ts +2 -2
- package/fontes/infraestrutura/index.js +18 -18
- package/fontes/infraestrutura/retorno-comando.d.ts +8 -8
- package/fontes/infraestrutura/retorno-comando.js +28 -28
- package/fontes/infraestrutura/retorno-comando.js.map +1 -1
- package/fontes/lincones-sqlite.d.ts +13 -13
- package/fontes/lincones-sqlite.js +28 -28
- package/fontes/lincones-sqlite.js.map +1 -1
- package/fontes/palavras-reservadas.d.ts +26 -26
- package/fontes/palavras-reservadas.js +31 -31
- package/fontes/palavras-reservadas.js.map +1 -1
- package/fontes/tradutor/index.d.ts +21 -19
- package/fontes/tradutor/index.js +152 -149
- package/fontes/tradutor/index.js.map +1 -1
- package/index.d.ts +1 -1
- package/index.js +17 -17
- package/package.json +12 -12
- package/comum/execucao.js +0 -40
- package/comum/execucao.js.map +0 -1
- package/comum/fontes/avaliador-sintatico/avaliador-sintatico-base.d.ts +0 -15
- package/comum/fontes/avaliador-sintatico/avaliador-sintatico-base.js +0 -46
- package/comum/fontes/avaliador-sintatico/avaliador-sintatico-base.js.map +0 -1
- package/comum/fontes/avaliador-sintatico/avaliador-sintatico.d.ts +0 -16
- package/comum/fontes/avaliador-sintatico/avaliador-sintatico.js.map +0 -1
- package/comum/fontes/avaliador-sintatico/erro-avaliador-sintatico.js.map +0 -1
- package/comum/fontes/avaliador-sintatico/index.d.ts +0 -3
- package/comum/fontes/avaliador-sintatico/index.js.map +0 -1
- package/comum/fontes/comandos/alterar.d.ts +0 -13
- package/comum/fontes/comandos/alterar.js +0 -19
- package/comum/fontes/comandos/alterar.js.map +0 -1
- package/comum/fontes/comandos/atualizar.js.map +0 -1
- package/comum/fontes/comandos/comando.js.map +0 -1
- package/comum/fontes/comandos/criar.d.ts +0 -7
- package/comum/fontes/comandos/criar.js.map +0 -1
- package/comum/fontes/comandos/excluir.js.map +0 -1
- package/comum/fontes/comandos/index.js.map +0 -1
- package/comum/fontes/comandos/inserir.js.map +0 -1
- package/comum/fontes/comandos/selecionar.js.map +0 -1
- package/comum/fontes/construtos/coluna.js.map +0 -1
- package/comum/fontes/construtos/condicao.js.map +0 -1
- package/comum/fontes/construtos/index.js.map +0 -1
- package/comum/fontes/interfaces/avaliador-sintatico-interface.js.map +0 -1
- package/comum/fontes/interfaces/index.d.ts +0 -3
- package/comum/fontes/interfaces/index.js.map +0 -1
- package/comum/fontes/interfaces/lincones-interface.d.ts +0 -3
- package/comum/fontes/interfaces/lincones-interface.js.map +0 -1
- package/comum/fontes/interfaces/retornos/index.js.map +0 -1
- package/comum/fontes/interfaces/simbolo-interface.js.map +0 -1
- package/comum/fontes/lexador/index.js.map +0 -1
- package/comum/fontes/lexador/simbolo.js.map +0 -1
- package/comum/fontes/lincones.d.ts +0 -10
- package/comum/fontes/lincones.js +0 -21
- package/comum/fontes/lincones.js.map +0 -1
- package/comum/fontes/palavras-reservadas.js.map +0 -1
- package/comum/fontes/tipos-de-simbolos.js.map +0 -1
- package/comum/fontes/tradutor/index.d.ts +0 -20
- package/comum/fontes/tradutor/index.js.map +0 -1
- package/comum/index.d.ts +0 -1
- package/comum/index.js +0 -6
- package/comum/index.js.map +0 -1
- package/comum/jest.config.js.map +0 -1
- package/fontes/lexador/index.d.ts +0 -26
- package/fontes/lexador/index.js +0 -220
- package/fontes/lexador/index.js.map +0 -1
|
@@ -1,353 +1,444 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
this.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
case tipos_de_simbolos_1.default.
|
|
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
|
-
tipos_de_simbolos_1.default.
|
|
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
|
-
this.
|
|
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
|
-
this.
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
const
|
|
233
|
-
//
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
tipos_de_simbolos_1.default.
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
this.
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
//
|
|
313
|
-
const
|
|
314
|
-
|
|
315
|
-
this.
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AvaliadorSintaticoBase = void 0;
|
|
7
|
+
const comandos_1 = require("../comandos");
|
|
8
|
+
const erro_avaliador_sintatico_1 = require("./erro-avaliador-sintatico");
|
|
9
|
+
const coluna_1 = require("../construtos/coluna");
|
|
10
|
+
const construtos_1 = require("../construtos");
|
|
11
|
+
const tipos_de_simbolos_1 = __importDefault(require("../tipos-de-simbolos"));
|
|
12
|
+
const operacao_alteracao_tabela_1 = require("../construtos/operacao-alteracao-tabela");
|
|
13
|
+
const restricao_1 = require("../construtos/restricao");
|
|
14
|
+
class AvaliadorSintaticoBase {
|
|
15
|
+
consumir(tipo, mensagemDeErro) {
|
|
16
|
+
if (this.verificarTipoSimboloAtual(tipo))
|
|
17
|
+
return this.avancarEDevolverAnterior();
|
|
18
|
+
throw this.erro(this.simbolos[this.atual], mensagemDeErro);
|
|
19
|
+
}
|
|
20
|
+
estaNoFinal() {
|
|
21
|
+
return this.atual === this.simbolos.length;
|
|
22
|
+
}
|
|
23
|
+
verificarTipoSimboloAtual(tipo) {
|
|
24
|
+
if (this.estaNoFinal())
|
|
25
|
+
return false;
|
|
26
|
+
return this.simbolos[this.atual].tipo === tipo;
|
|
27
|
+
}
|
|
28
|
+
verificaSeLexemaSimboloAtual(lexama) {
|
|
29
|
+
if (this.estaNoFinal())
|
|
30
|
+
return false;
|
|
31
|
+
return this.simbolos[this.atual].lexema === lexama;
|
|
32
|
+
}
|
|
33
|
+
avancarEDevolverAnterior() {
|
|
34
|
+
if (!this.estaNoFinal())
|
|
35
|
+
this.atual++;
|
|
36
|
+
return this.simbolos[this.atual - 1];
|
|
37
|
+
}
|
|
38
|
+
erro(simbolo, mensagemDeErro) {
|
|
39
|
+
const excecao = new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(simbolo, mensagemDeErro);
|
|
40
|
+
this.erros.push(excecao);
|
|
41
|
+
return excecao;
|
|
42
|
+
}
|
|
43
|
+
verificarSeSimboloAtualEIgualA(...argumentos) {
|
|
44
|
+
for (let i = 0; i < argumentos.length; i++) {
|
|
45
|
+
const tipoAtual = argumentos[i];
|
|
46
|
+
if (this.verificarTipoSimboloAtual(tipoAtual)) {
|
|
47
|
+
this.avancarEDevolverAnterior();
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
avancar() {
|
|
54
|
+
if (!this.estaNoFinal()) {
|
|
55
|
+
this.atual++;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
logicaManipulacaoColuna(simboloOperacao) {
|
|
59
|
+
const simboloNomeDaColuna = this.consumir(tipos_de_simbolos_1.default.IDENTIFICADOR, 'Esperado identificador de nome de tabela após palavra reservada "TABELA".');
|
|
60
|
+
switch (simboloOperacao.tipo) {
|
|
61
|
+
case tipos_de_simbolos_1.default.ADICIONAR:
|
|
62
|
+
case tipos_de_simbolos_1.default.ALTERAR:
|
|
63
|
+
return this.logicaAdicionarOuAlterarColuna(simboloNomeDaColuna);
|
|
64
|
+
case tipos_de_simbolos_1.default.EXCLUIR:
|
|
65
|
+
break;
|
|
66
|
+
case tipos_de_simbolos_1.default.RENOMEAR:
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
logicaManipulacaoRestricao(simboloNomeTabela, simboloOperacao) {
|
|
72
|
+
const simboloNomeDaRestricao = this.consumir(tipos_de_simbolos_1.default.IDENTIFICADOR, 'Esperado identificador de nome de restrição após palavra reservada "RESTRIÇÃO".');
|
|
73
|
+
switch (simboloOperacao.tipo) {
|
|
74
|
+
case tipos_de_simbolos_1.default.ADICIONAR:
|
|
75
|
+
case tipos_de_simbolos_1.default.ALTERAR:
|
|
76
|
+
return this.logicaAdicionarOuAlterarRestricao(simboloNomeTabela, simboloNomeDaRestricao);
|
|
77
|
+
case tipos_de_simbolos_1.default.EXCLUIR:
|
|
78
|
+
break;
|
|
79
|
+
case tipos_de_simbolos_1.default.RENOMEAR:
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
logicaAdicionarOuAlterarColuna(simboloNomeDaColuna) {
|
|
85
|
+
// Tipo de dados
|
|
86
|
+
const simboloTipoElemento = this.avancarEDevolverAnterior();
|
|
87
|
+
let tamanhoElemento = null;
|
|
88
|
+
if (![
|
|
89
|
+
tipos_de_simbolos_1.default.INTEIRO,
|
|
90
|
+
tipos_de_simbolos_1.default.LOGICO,
|
|
91
|
+
tipos_de_simbolos_1.default.TEXTO
|
|
92
|
+
].includes(simboloTipoElemento.tipo)) {
|
|
93
|
+
throw this.erro(simboloTipoElemento, `Tipo de coluna inválido para operação de adição ou alteração de coluna. Tipos válidos: inteiro, lógico ou texto. Obtido: ${simboloTipoElemento.tipo}.`);
|
|
94
|
+
}
|
|
95
|
+
if (simboloTipoElemento.tipo === tipos_de_simbolos_1.default.TEXTO) {
|
|
96
|
+
if (this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.PARENTESE_ESQUERDO)) {
|
|
97
|
+
tamanhoElemento = this.consumir(tipos_de_simbolos_1.default.NUMERO, 'Esperado tamanho de texto de coluna em comando de criação de tabela.');
|
|
98
|
+
this.consumir(tipos_de_simbolos_1.default.PARENTESE_DIREITO, 'Esperado parêntese direito após declaração de tamanho de coluna em comando de criação de tabela.');
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Nulo/Não Nulo
|
|
102
|
+
let nulo = true;
|
|
103
|
+
if (this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.NAO, tipos_de_simbolos_1.default.NULO)) {
|
|
104
|
+
const simboloAnterior = this.simbolos[this.atual - 1];
|
|
105
|
+
switch (simboloAnterior.tipo) {
|
|
106
|
+
case tipos_de_simbolos_1.default.NAO:
|
|
107
|
+
this.consumir(tipos_de_simbolos_1.default.NULO, 'Esperado palavra reservada "NULO" após palavra reservada "NÃO" em declaração de coluna em comando de criação de tabela.');
|
|
108
|
+
nulo = false;
|
|
109
|
+
break;
|
|
110
|
+
case tipos_de_simbolos_1.default.NULO:
|
|
111
|
+
default:
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Chave primária?
|
|
116
|
+
let chavePrimaria = false;
|
|
117
|
+
let autoIncremento = false;
|
|
118
|
+
if (this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.CHAVE)) {
|
|
119
|
+
switch (this.simbolos[this.atual].tipo) {
|
|
120
|
+
case tipos_de_simbolos_1.default.PRIMARIA:
|
|
121
|
+
chavePrimaria = true;
|
|
122
|
+
this.avancar();
|
|
123
|
+
if (this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.AUTO)) {
|
|
124
|
+
this.consumir(tipos_de_simbolos_1.default.INCREMENTO, 'Esperado palavra reservada "INCREMENTO" após palavra reservada "AUTO" em declaração de coluna em comando de criação de tabela.');
|
|
125
|
+
autoIncremento = true;
|
|
126
|
+
}
|
|
127
|
+
break;
|
|
128
|
+
default:
|
|
129
|
+
throw this.erro(this.simbolos[this.atual], 'Esperado palavra reservada "PRIMARIA" após palavra reservada "CHAVE" na definição de coluna em comando de criação de tabela.');
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return new coluna_1.Coluna(simboloNomeDaColuna.lexema, simboloTipoElemento.lexema, tamanhoElemento ? tamanhoElemento : undefined, nulo, chavePrimaria, false, false);
|
|
133
|
+
}
|
|
134
|
+
logicaAdicionarOuAlterarRestricao(simboloNomeDaTabela, simboloNomeDaRestricao) {
|
|
135
|
+
// Tipo de restrição
|
|
136
|
+
const simboloTipoRestricao = this.avancarEDevolverAnterior();
|
|
137
|
+
switch (simboloTipoRestricao.tipo) {
|
|
138
|
+
case tipos_de_simbolos_1.default.CHAVE:
|
|
139
|
+
return this.logicaRestricaoChave(simboloNomeDaTabela, simboloNomeDaRestricao);
|
|
140
|
+
case tipos_de_simbolos_1.default.UNICA:
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
logicaRestricaoChave(simboloNomeDaTabela, simboloNomeDaRestricao) {
|
|
146
|
+
const simboloTipoChave = this.avancarEDevolverAnterior();
|
|
147
|
+
switch (simboloTipoChave.tipo) {
|
|
148
|
+
case tipos_de_simbolos_1.default.PRIMARIA:
|
|
149
|
+
break;
|
|
150
|
+
case tipos_de_simbolos_1.default.ESTRANGEIRA:
|
|
151
|
+
this.consumir(tipos_de_simbolos_1.default.PARENTESE_ESQUERDO, 'Esperado abertura de parêntese após palavra reservada "ESTRANGEIRA".');
|
|
152
|
+
const nomeColunaChave = this.consumir(tipos_de_simbolos_1.default.IDENTIFICADOR, 'Esperado nome de coluna para restrição do tipo chave estrangeira.');
|
|
153
|
+
this.consumir(tipos_de_simbolos_1.default.PARENTESE_DIREITO, 'Esperado fechamento de parêntese após nome de coluna para restrição do tipo chave estrangeira.');
|
|
154
|
+
this.consumir(tipos_de_simbolos_1.default.REFERENCIA, 'Esperado palavra reservada "REFERENCIA" após definição de coluna para restrição do tipo chave estrangeira.');
|
|
155
|
+
const nomeTabelaReferenciada = this.consumir(tipos_de_simbolos_1.default.IDENTIFICADOR, 'Esperado nome da tabela referenciada por restrição do tipo chave estrangeira.');
|
|
156
|
+
this.consumir(tipos_de_simbolos_1.default.PARENTESE_ESQUERDO, 'Esperado abertura de parêntese após palavra reservada "REFERENCIA".');
|
|
157
|
+
const nomeColunaReferenciada = this.consumir(tipos_de_simbolos_1.default.IDENTIFICADOR, 'Esperado nome de coluna referenciada para restrição do tipo chave estrangeira.');
|
|
158
|
+
this.consumir(tipos_de_simbolos_1.default.PARENTESE_DIREITO, 'Esperado fechamento de parêntese após nome de coluna referenciada para restrição do tipo chave estrangeira.');
|
|
159
|
+
this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.PONTO_VIRGULA);
|
|
160
|
+
return new restricao_1.Restricao(simboloNomeDaRestricao.lexema, "CHAVE_ESTRANGEIRA", simboloNomeDaTabela.lexema, [nomeColunaChave.lexema], nomeTabelaReferenciada.lexema, [nomeColunaReferenciada.lexema]);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
//https://pgdocptbr.sourceforge.io/pg80/ddl-alter.html
|
|
164
|
+
//ALTER TABLE produtos ADD COLUMN descricao text => alterar tabela produtos adicionar coluna descricao texto(50)
|
|
165
|
+
//ALTER TABLE produtos DROP COLUMN descricao;
|
|
166
|
+
//ALTER TABLE produtos RENAME COLUMN cod_prod TO cod_produto;
|
|
167
|
+
//ALTER TABLE produtos RENAME TO equipamentos;
|
|
168
|
+
comandoAlterar() {
|
|
169
|
+
const simboloAlterar = this.consumir(tipos_de_simbolos_1.default.ALTERAR, 'Esperado palavra reservada "ALTERAR".');
|
|
170
|
+
if (!this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.TABELA, tipos_de_simbolos_1.default.VISAO)) {
|
|
171
|
+
throw this.erro(this.simbolos[this.atual], 'Esperado palavra reservada "TABELA" ou "VISÃO".');
|
|
172
|
+
}
|
|
173
|
+
const simboloTipoEntidade = this.simbolos[this.atual - 1];
|
|
174
|
+
const nomeDaTabela = this.consumir(tipos_de_simbolos_1.default.IDENTIFICADOR, 'Esperado identificador de nome de tabela após palavra reservada "IDENTIFICADOR".');
|
|
175
|
+
const operacoes = [];
|
|
176
|
+
while (this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.ADICIONAR, tipos_de_simbolos_1.default.ALTERAR, tipos_de_simbolos_1.default.EXCLUIR, tipos_de_simbolos_1.default.RENOMEAR)) {
|
|
177
|
+
const simboloOperacao = this.simbolos[this.atual - 1];
|
|
178
|
+
let elemento;
|
|
179
|
+
switch (this.simbolos[this.atual].tipo) {
|
|
180
|
+
case tipos_de_simbolos_1.default.COLUNA:
|
|
181
|
+
this.avancar();
|
|
182
|
+
elemento = this.logicaManipulacaoColuna(simboloOperacao);
|
|
183
|
+
break;
|
|
184
|
+
case tipos_de_simbolos_1.default.RESTRICAO:
|
|
185
|
+
this.avancar();
|
|
186
|
+
elemento = this.logicaManipulacaoRestricao(nomeDaTabela, simboloOperacao);
|
|
187
|
+
break;
|
|
188
|
+
default:
|
|
189
|
+
throw this.erro(this.simbolos[this.atual], `Tipo de elemento de tabela ou visão inválido para operação "${simboloOperacao.lexema}": ${this.simbolos[this.atual].lexema}.`);
|
|
190
|
+
}
|
|
191
|
+
operacoes.push(new operacao_alteracao_tabela_1.OperacaoAlteracaoTabela(simboloOperacao.lexema, elemento));
|
|
192
|
+
}
|
|
193
|
+
if (operacoes.length <= 0) {
|
|
194
|
+
throw this.erro(this.simbolos[this.atual - 1], `Esperado pelo menos uma operação em um comando de alteração de tabela.`);
|
|
195
|
+
}
|
|
196
|
+
return new comandos_1.Alterar(simboloAlterar.linha, nomeDaTabela.lexema, simboloTipoEntidade.lexema, operacoes);
|
|
197
|
+
}
|
|
198
|
+
comandoAtualizar() {
|
|
199
|
+
// Essa linha nunca deve retornar erro.
|
|
200
|
+
const simboloAtualizar = this.consumir(tipos_de_simbolos_1.default.ATUALIZAR, 'Esperado palavra reservada "ATUALIZAR".');
|
|
201
|
+
const nomeDaTabela = this.consumir(tipos_de_simbolos_1.default.IDENTIFICADOR, 'Esperado identificador de nome de tabela após palavra reservada "ATUALIZAR".');
|
|
202
|
+
this.consumir(tipos_de_simbolos_1.default.DEFINIR, 'Esperado palavra reservada "DEFINIR". após palavra reservada "ATUALIZAR".');
|
|
203
|
+
// Relação de colunas para atualização
|
|
204
|
+
const colunasAtualizacao = [];
|
|
205
|
+
do {
|
|
206
|
+
const esquerda = this.consumir(tipos_de_simbolos_1.default.IDENTIFICADOR, `Esperado nome de coluna ou literal em descrição de atualização.`);
|
|
207
|
+
this.consumir(tipos_de_simbolos_1.default.IGUAL, 'Esperado operador válido após identificador em descrição de atualização.');
|
|
208
|
+
if (![
|
|
209
|
+
tipos_de_simbolos_1.default.IDENTIFICADOR,
|
|
210
|
+
tipos_de_simbolos_1.default.NUMERO,
|
|
211
|
+
tipos_de_simbolos_1.default.TEXTO,
|
|
212
|
+
tipos_de_simbolos_1.default.VERDADEIRO,
|
|
213
|
+
tipos_de_simbolos_1.default.FALSO
|
|
214
|
+
].includes(this.simbolos[this.atual].tipo)) {
|
|
215
|
+
throw this.erro(this.simbolos[this.atual], `Esperado operador válido após identificador em descrição de atualização.`);
|
|
216
|
+
}
|
|
217
|
+
const direita = this.simbolos[this.atual];
|
|
218
|
+
this.avancar();
|
|
219
|
+
colunasAtualizacao.push({
|
|
220
|
+
esquerda,
|
|
221
|
+
direita
|
|
222
|
+
});
|
|
223
|
+
} while (this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.VIRGULA));
|
|
224
|
+
// Condições
|
|
225
|
+
const condicoes = this.logicaComumCondicoes('seleção');
|
|
226
|
+
// Ponto-e-vírgula opcional
|
|
227
|
+
this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.PONTO_VIRGULA);
|
|
228
|
+
return new comandos_1.Atualizar(simboloAtualizar.linha, nomeDaTabela.lexema, colunasAtualizacao, condicoes);
|
|
229
|
+
}
|
|
230
|
+
comandoCriacaoColuna() {
|
|
231
|
+
// Nome
|
|
232
|
+
const nomeDaColuna = this.consumir(tipos_de_simbolos_1.default.IDENTIFICADOR, 'Esperado identificador de nome de coluna em comando de criação de tabela.');
|
|
233
|
+
// Tipo de dados
|
|
234
|
+
let tipoColuna = null;
|
|
235
|
+
let tamanhoColuna = null;
|
|
236
|
+
switch (this.simbolos[this.atual].tipo) {
|
|
237
|
+
case tipos_de_simbolos_1.default.INTEIRO:
|
|
238
|
+
tipoColuna = tipos_de_simbolos_1.default.INTEIRO;
|
|
239
|
+
this.avancar();
|
|
240
|
+
break;
|
|
241
|
+
case tipos_de_simbolos_1.default.LOGICO:
|
|
242
|
+
tipoColuna = tipos_de_simbolos_1.default.LOGICO;
|
|
243
|
+
this.avancar();
|
|
244
|
+
break;
|
|
245
|
+
case tipos_de_simbolos_1.default.TEXTO:
|
|
246
|
+
tipoColuna = tipos_de_simbolos_1.default.TEXTO;
|
|
247
|
+
this.avancar();
|
|
248
|
+
if (this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.PARENTESE_ESQUERDO)) {
|
|
249
|
+
tamanhoColuna = this.consumir(tipos_de_simbolos_1.default.NUMERO, 'Esperado tamanho de texto de coluna em comando de criação de tabela.');
|
|
250
|
+
this.consumir(tipos_de_simbolos_1.default.PARENTESE_DIREITO, 'Esperado parêntese direito após declaração de tamanho de coluna em comando de criação de tabela.');
|
|
251
|
+
}
|
|
252
|
+
break;
|
|
253
|
+
default:
|
|
254
|
+
throw this.erro(this.simbolos[this.atual], 'Esperado tipo de dados válido na definição de coluna em comando de criação de tabela.');
|
|
255
|
+
}
|
|
256
|
+
// Nulo/Não Nulo
|
|
257
|
+
let nulo = true;
|
|
258
|
+
if (this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.NAO, tipos_de_simbolos_1.default.NULO)) {
|
|
259
|
+
const simboloAnterior = this.simbolos[this.atual - 1];
|
|
260
|
+
switch (simboloAnterior.tipo) {
|
|
261
|
+
case tipos_de_simbolos_1.default.NAO:
|
|
262
|
+
this.consumir(tipos_de_simbolos_1.default.NULO, 'Esperado palavra reservada "NULO" após palavra reservada "NÃO" em declaração de coluna em comando de criação de tabela.');
|
|
263
|
+
nulo = false;
|
|
264
|
+
break;
|
|
265
|
+
case tipos_de_simbolos_1.default.NULO:
|
|
266
|
+
default:
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
// Chave primária?
|
|
271
|
+
let chavePrimaria = false;
|
|
272
|
+
let autoIncremento = false;
|
|
273
|
+
if (this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.CHAVE)) {
|
|
274
|
+
switch (this.simbolos[this.atual].tipo) {
|
|
275
|
+
case tipos_de_simbolos_1.default.PRIMARIA:
|
|
276
|
+
chavePrimaria = true;
|
|
277
|
+
this.avancar();
|
|
278
|
+
if (this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.AUTO)) {
|
|
279
|
+
this.consumir(tipos_de_simbolos_1.default.INCREMENTO, 'Esperado palavra reservada "INCREMENTO" após palavra reservada "AUTO" em declaração de coluna em comando de criação de tabela.');
|
|
280
|
+
autoIncremento = true;
|
|
281
|
+
}
|
|
282
|
+
break;
|
|
283
|
+
default:
|
|
284
|
+
throw this.erro(this.simbolos[this.atual], 'Esperado palavra reservada "PRIMARIA" após palavra reservada "CHAVE" na definição de coluna em comando de criação de tabela.');
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return new coluna_1.Coluna(nomeDaColuna.lexema, tipoColuna, tamanhoColuna, nulo, chavePrimaria, false, autoIncremento);
|
|
288
|
+
}
|
|
289
|
+
comandoCriar() {
|
|
290
|
+
// Essa linha nunca deve retornar erro.
|
|
291
|
+
this.consumir(tipos_de_simbolos_1.default.CRIAR, 'Esperado palavra reservada "CRIAR".');
|
|
292
|
+
switch (this.simbolos[this.atual].tipo) {
|
|
293
|
+
case 'TABELA':
|
|
294
|
+
default:
|
|
295
|
+
return this.comandoCriarTabela();
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
comandoCriarTabela() {
|
|
299
|
+
// Essa linha nunca deve retornar erro.
|
|
300
|
+
const simboloTabela = this.consumir(tipos_de_simbolos_1.default.TABELA, 'Esperado palavra reservada "TABELA".');
|
|
301
|
+
const nomeDaTabela = this.consumir(tipos_de_simbolos_1.default.IDENTIFICADOR, 'Esperado identificador de nome de tabela após palavra reservada "TABELA".');
|
|
302
|
+
this.consumir(tipos_de_simbolos_1.default.PARENTESE_ESQUERDO, 'Esperado abertura de parênteses após nome da tabela');
|
|
303
|
+
const colunas = [];
|
|
304
|
+
do {
|
|
305
|
+
colunas.push(this.comandoCriacaoColuna());
|
|
306
|
+
} while (this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.VIRGULA));
|
|
307
|
+
this.consumir(tipos_de_simbolos_1.default.PARENTESE_DIREITO, 'Esperado fechamento de parênteses após nome da tabela');
|
|
308
|
+
this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.PONTO_VIRGULA);
|
|
309
|
+
return new comandos_1.Criar(simboloTabela.linha, nomeDaTabela.lexema, colunas);
|
|
310
|
+
}
|
|
311
|
+
comandoExcluir() {
|
|
312
|
+
// Essa linha nunca deve retornar erro.
|
|
313
|
+
const simboloExcluir = this.consumir(tipos_de_simbolos_1.default.EXCLUIR, 'Esperado palavra reservada "EXCLUIR".');
|
|
314
|
+
const nomeDaTabela = this.consumir(tipos_de_simbolos_1.default.IDENTIFICADOR, 'Esperado identificador de nome de tabela após palavra reservada "TABELA".');
|
|
315
|
+
const condicoes = this.logicaComumCondicoes('exclusão');
|
|
316
|
+
this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.PONTO_VIRGULA);
|
|
317
|
+
return new comandos_1.Excluir(simboloExcluir.linha, nomeDaTabela.lexema, condicoes);
|
|
318
|
+
}
|
|
319
|
+
comandoInserir() {
|
|
320
|
+
// Essa linha nunca deve retornar erro.
|
|
321
|
+
const simboloInserir = this.consumir(tipos_de_simbolos_1.default.INSERIR, 'Esperado palavra reservada "INSERIR".');
|
|
322
|
+
this.consumir(tipos_de_simbolos_1.default.EM, 'Esperado palavra reservada "EM" após palavra reservada "INSERIR".');
|
|
323
|
+
const nomeDaTabela = this.consumir(tipos_de_simbolos_1.default.IDENTIFICADOR, 'Esperado identificador de nome de tabela após palavra reservada "EM" em declaração "INSERIR".');
|
|
324
|
+
// Colunas
|
|
325
|
+
this.consumir(tipos_de_simbolos_1.default.PARENTESE_ESQUERDO, 'Esperado abertura de parênteses após identificador de nome de tabela em comando "INSERIR".');
|
|
326
|
+
const colunas = [];
|
|
327
|
+
do {
|
|
328
|
+
const nomeDaColuna = this.consumir(tipos_de_simbolos_1.default.IDENTIFICADOR, 'Esperado identificador de nome de coluna após identificador de nome de tabela em comando "INSERIR".');
|
|
329
|
+
colunas.push(nomeDaColuna.lexema);
|
|
330
|
+
} while (this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.VIRGULA));
|
|
331
|
+
this.consumir(tipos_de_simbolos_1.default.PARENTESE_DIREITO, 'Esperado fechamento de parênteses após declaração de colunas em comando "INSERIR".');
|
|
332
|
+
this.consumir(tipos_de_simbolos_1.default.VALORES, 'Esperado palavra reservada "VALORES" após primeiro fechamento de parênteses em comando "INSERIR".');
|
|
333
|
+
this.consumir(tipos_de_simbolos_1.default.PARENTESE_ESQUERDO, 'Esperado abertura de parênteses após palavra reservada "VALORES" em comando "INSERIR".');
|
|
334
|
+
// Valores
|
|
335
|
+
const valores = [];
|
|
336
|
+
do {
|
|
337
|
+
if (![
|
|
338
|
+
tipos_de_simbolos_1.default.IDENTIFICADOR,
|
|
339
|
+
tipos_de_simbolos_1.default.FALSO,
|
|
340
|
+
tipos_de_simbolos_1.default.NUMERO,
|
|
341
|
+
tipos_de_simbolos_1.default.TEXTO,
|
|
342
|
+
tipos_de_simbolos_1.default.VERDADEIRO
|
|
343
|
+
].includes(this.simbolos[this.atual].tipo)) {
|
|
344
|
+
throw this.erro(this.simbolos[this.atual], `Esperado valor válido para inserção em comando "INSERIR".`);
|
|
345
|
+
}
|
|
346
|
+
valores.push(this.simbolos[this.atual]);
|
|
347
|
+
this.avancar();
|
|
348
|
+
} while (this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.VIRGULA));
|
|
349
|
+
this.consumir(tipos_de_simbolos_1.default.PARENTESE_DIREITO, 'Esperado fechamento de parênteses após declaração de valores em comando "INSERIR".');
|
|
350
|
+
if (valores.length !== colunas.length) {
|
|
351
|
+
throw this.erro(simboloInserir, 'Número de colunas não correspondente ao número de valores em comando "INSERIR".');
|
|
352
|
+
}
|
|
353
|
+
return new comandos_1.Inserir(simboloInserir.linha, nomeDaTabela.lexema, colunas, valores);
|
|
354
|
+
}
|
|
355
|
+
logicaComumCondicoes(operacao) {
|
|
356
|
+
const condicoes = [];
|
|
357
|
+
if (this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.ONDE)) {
|
|
358
|
+
do {
|
|
359
|
+
const esquerda = this.consumir(tipos_de_simbolos_1.default.IDENTIFICADOR, `Esperado nome de coluna ou literal em condição de ${operacao}.`);
|
|
360
|
+
if (![
|
|
361
|
+
tipos_de_simbolos_1.default.IGUAL,
|
|
362
|
+
tipos_de_simbolos_1.default.MAIOR,
|
|
363
|
+
tipos_de_simbolos_1.default.MAIOR_IGUAL,
|
|
364
|
+
tipos_de_simbolos_1.default.MENOR,
|
|
365
|
+
tipos_de_simbolos_1.default.MENOR_IGUAL
|
|
366
|
+
].includes(this.simbolos[this.atual].tipo)) {
|
|
367
|
+
throw this.erro(this.simbolos[this.atual], `Esperado operador válido após identificador em condição de ${operacao}.`);
|
|
368
|
+
}
|
|
369
|
+
const operador = this.simbolos[this.atual].tipo;
|
|
370
|
+
this.avancar();
|
|
371
|
+
if (![
|
|
372
|
+
tipos_de_simbolos_1.default.IDENTIFICADOR,
|
|
373
|
+
tipos_de_simbolos_1.default.NUMERO,
|
|
374
|
+
tipos_de_simbolos_1.default.TEXTO
|
|
375
|
+
].includes(this.simbolos[this.atual].tipo)) {
|
|
376
|
+
throw this.erro(this.simbolos[this.atual], `Esperado operador válido após identificador em condição de ${operacao}.`);
|
|
377
|
+
}
|
|
378
|
+
const direita = this.simbolos[this.atual];
|
|
379
|
+
this.avancar();
|
|
380
|
+
condicoes.push(new construtos_1.Condicao(esquerda, operador, direita.literal || direita.lexema));
|
|
381
|
+
} while (this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.E));
|
|
382
|
+
}
|
|
383
|
+
return condicoes;
|
|
384
|
+
}
|
|
385
|
+
comandoSelecionar() {
|
|
386
|
+
// Essa linha idealmente nunca deve retornar erro.
|
|
387
|
+
const simboloSelecionar = this.consumir(tipos_de_simbolos_1.default.SELECIONAR, 'Esperado palavra reservada "SELECIONAR".');
|
|
388
|
+
// Colunas
|
|
389
|
+
let tudo = false;
|
|
390
|
+
const colunas = [];
|
|
391
|
+
if (this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.TUDO)) {
|
|
392
|
+
tudo = true;
|
|
393
|
+
}
|
|
394
|
+
else {
|
|
395
|
+
do {
|
|
396
|
+
colunas.push(this.simbolos[this.atual].lexema);
|
|
397
|
+
this.avancar();
|
|
398
|
+
} while (this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.VIRGULA));
|
|
399
|
+
}
|
|
400
|
+
// De
|
|
401
|
+
this.consumir(tipos_de_simbolos_1.default.DE, 'Esperado palavra reservada "de" após definição das colunas em comando de seleção.');
|
|
402
|
+
const nomeTabela = this.consumir(tipos_de_simbolos_1.default.IDENTIFICADOR, 'Esperado nome de coluna ou literal em condição de seleção.');
|
|
403
|
+
// Condições
|
|
404
|
+
const condicoes = this.logicaComumCondicoes('seleção');
|
|
405
|
+
// Ponto-e-vírgula opcional.
|
|
406
|
+
this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.PONTO_VIRGULA);
|
|
407
|
+
return new comandos_1.Selecionar(simboloSelecionar.linha, nomeTabela.lexema, colunas, condicoes, tudo);
|
|
408
|
+
}
|
|
409
|
+
declaracao() {
|
|
410
|
+
switch (this.simbolos[this.atual].tipo) {
|
|
411
|
+
case tipos_de_simbolos_1.default.ALTERAR:
|
|
412
|
+
return this.comandoAlterar();
|
|
413
|
+
case tipos_de_simbolos_1.default.ATUALIZAR:
|
|
414
|
+
return this.comandoAtualizar();
|
|
415
|
+
case tipos_de_simbolos_1.default.CRIAR:
|
|
416
|
+
return this.comandoCriar();
|
|
417
|
+
case tipos_de_simbolos_1.default.EXCLUIR:
|
|
418
|
+
return this.comandoExcluir();
|
|
419
|
+
case tipos_de_simbolos_1.default.INSERIR:
|
|
420
|
+
return this.comandoInserir();
|
|
421
|
+
case tipos_de_simbolos_1.default.SELECIONAR:
|
|
422
|
+
return this.comandoSelecionar();
|
|
423
|
+
default:
|
|
424
|
+
this.avancar();
|
|
425
|
+
return null;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
analisar(retornoLexador) {
|
|
429
|
+
this.erros = [];
|
|
430
|
+
this.atual = 0;
|
|
431
|
+
this.bloco = 0;
|
|
432
|
+
this.simbolos = (retornoLexador === null || retornoLexador === void 0 ? void 0 : retornoLexador.simbolos) || [];
|
|
433
|
+
const declaracoes = [];
|
|
434
|
+
while (!this.estaNoFinal()) {
|
|
435
|
+
declaracoes.push(this.declaracao());
|
|
436
|
+
}
|
|
437
|
+
return {
|
|
438
|
+
comandos: declaracoes,
|
|
439
|
+
erros: this.erros
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
exports.AvaliadorSintaticoBase = AvaliadorSintaticoBase;
|
|
444
|
+
//# sourceMappingURL=avaliador-sintatico-base.js.map
|