hpp-lang 0.6.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.
Files changed (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +29 -0
  3. package/dist/ast.d.ts +89 -0
  4. package/dist/ast.d.ts.map +1 -0
  5. package/dist/ast.js +2 -0
  6. package/dist/ast.js.map +1 -0
  7. package/dist/capabilities.d.ts +75 -0
  8. package/dist/capabilities.d.ts.map +1 -0
  9. package/dist/capabilities.js +181 -0
  10. package/dist/capabilities.js.map +1 -0
  11. package/dist/errors.d.ts +21 -0
  12. package/dist/errors.d.ts.map +1 -0
  13. package/dist/errors.js +27 -0
  14. package/dist/errors.js.map +1 -0
  15. package/dist/examples.d.ts +9 -0
  16. package/dist/examples.d.ts.map +1 -0
  17. package/dist/examples.js +780 -0
  18. package/dist/examples.js.map +1 -0
  19. package/dist/extensions/line/index.d.ts +45 -0
  20. package/dist/extensions/line/index.d.ts.map +1 -0
  21. package/dist/extensions/line/index.js +99 -0
  22. package/dist/extensions/line/index.js.map +1 -0
  23. package/dist/extensions/maze/index.d.ts +37 -0
  24. package/dist/extensions/maze/index.d.ts.map +1 -0
  25. package/dist/extensions/maze/index.js +43 -0
  26. package/dist/extensions/maze/index.js.map +1 -0
  27. package/dist/extensions/soccer/index.d.ts +8 -0
  28. package/dist/extensions/soccer/index.d.ts.map +1 -0
  29. package/dist/extensions/soccer/index.js +93 -0
  30. package/dist/extensions/soccer/index.js.map +1 -0
  31. package/dist/hardware.d.ts +44 -0
  32. package/dist/hardware.d.ts.map +1 -0
  33. package/dist/hardware.js +2 -0
  34. package/dist/hardware.js.map +1 -0
  35. package/dist/index.d.ts +59 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +69 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/interpreter.d.ts +88 -0
  40. package/dist/interpreter.d.ts.map +1 -0
  41. package/dist/interpreter.js +795 -0
  42. package/dist/interpreter.js.map +1 -0
  43. package/dist/lexer.d.ts +21 -0
  44. package/dist/lexer.d.ts.map +1 -0
  45. package/dist/lexer.js +175 -0
  46. package/dist/lexer.js.map +1 -0
  47. package/dist/parser.d.ts +60 -0
  48. package/dist/parser.d.ts.map +1 -0
  49. package/dist/parser.js +569 -0
  50. package/dist/parser.js.map +1 -0
  51. package/dist/robotics/actions.d.ts +13 -0
  52. package/dist/robotics/actions.d.ts.map +1 -0
  53. package/dist/robotics/actions.js +38 -0
  54. package/dist/robotics/actions.js.map +1 -0
  55. package/dist/robotics/contracts.d.ts +88 -0
  56. package/dist/robotics/contracts.d.ts.map +1 -0
  57. package/dist/robotics/contracts.js +31 -0
  58. package/dist/robotics/contracts.js.map +1 -0
  59. package/dist/robotics/index.d.ts +21 -0
  60. package/dist/robotics/index.d.ts.map +1 -0
  61. package/dist/robotics/index.js +19 -0
  62. package/dist/robotics/index.js.map +1 -0
  63. package/dist/robotics/motion.d.ts +139 -0
  64. package/dist/robotics/motion.d.ts.map +1 -0
  65. package/dist/robotics/motion.js +248 -0
  66. package/dist/robotics/motion.js.map +1 -0
  67. package/dist/robotics/sensors.d.ts +15 -0
  68. package/dist/robotics/sensors.d.ts.map +1 -0
  69. package/dist/robotics/sensors.js +12 -0
  70. package/dist/robotics/sensors.js.map +1 -0
  71. package/dist/robotics/snapshot.d.ts +12 -0
  72. package/dist/robotics/snapshot.d.ts.map +1 -0
  73. package/dist/robotics/snapshot.js +9 -0
  74. package/dist/robotics/snapshot.js.map +1 -0
  75. package/dist/robotics/types.d.ts +12 -0
  76. package/dist/robotics/types.d.ts.map +1 -0
  77. package/dist/robotics/types.js +9 -0
  78. package/dist/robotics/types.js.map +1 -0
  79. package/dist/runtime.d.ts +81 -0
  80. package/dist/runtime.d.ts.map +1 -0
  81. package/dist/runtime.js +150 -0
  82. package/dist/runtime.js.map +1 -0
  83. package/dist/tokens.d.ts +33 -0
  84. package/dist/tokens.d.ts.map +1 -0
  85. package/dist/tokens.js +97 -0
  86. package/dist/tokens.js.map +1 -0
  87. package/dist/version.d.ts +14 -0
  88. package/dist/version.d.ts.map +1 -0
  89. package/dist/version.js +6 -0
  90. package/dist/version.js.map +1 -0
  91. package/package.json +49 -0
package/dist/parser.js ADDED
@@ -0,0 +1,569 @@
1
+ /** Parser descendente recursivo (mensagens em PT, com linha). */
2
+ export class Parser {
3
+ constructor(tokens) {
4
+ Object.defineProperty(this, "tokens", {
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true,
8
+ value: tokens
9
+ });
10
+ Object.defineProperty(this, "pos", {
11
+ enumerable: true,
12
+ configurable: true,
13
+ writable: true,
14
+ value: 0
15
+ });
16
+ Object.defineProperty(this, "errors", {
17
+ enumerable: true,
18
+ configurable: true,
19
+ writable: true,
20
+ value: []
21
+ });
22
+ }
23
+ parse() {
24
+ const body = this.parseBlock(new Set());
25
+ this.expectEOF();
26
+ return body;
27
+ }
28
+ // ---- utilidades ----
29
+ peek() {
30
+ return this.tokens[this.pos] ?? this.tokens[this.tokens.length - 1];
31
+ }
32
+ next() {
33
+ const t = this.peek();
34
+ if (t.type !== 'EOF')
35
+ this.pos++;
36
+ return t;
37
+ }
38
+ err(t, message) {
39
+ this.errors.push({ line: t.line, col: t.col, message });
40
+ }
41
+ skipBreaks() {
42
+ while (this.peek().type === 'NEWLINE' || (this.peek().type === 'PUNCT' && this.peek().value === ';')) {
43
+ this.next();
44
+ }
45
+ }
46
+ isKw(kind) {
47
+ const t = this.peek();
48
+ return t.type === 'KEYWORD' && t.keyword === kind;
49
+ }
50
+ /** `SE x = 1`: = sozinho é atribuição — em condição, sugerir ==. */
51
+ hintEquals(t) {
52
+ const n = this.peek();
53
+ if (n.type === 'OP' && n.value === '=') {
54
+ this.err(n, 'Para comparar use == (ex.: SE x == 1). O = sozinho guarda valor: x = 1.');
55
+ }
56
+ }
57
+ expectEOF() {
58
+ this.skipBreaks();
59
+ if (this.peek().type !== 'EOF') {
60
+ this.err(this.peek(), `Não entendi "${this.peek().value}" aqui — faltou FIM/END antes?`);
61
+ }
62
+ }
63
+ /** Bloco até FIM, SENAO ou fim do programa. */
64
+ parseBlock(stoppers) {
65
+ const out = [];
66
+ for (;;) {
67
+ this.skipBreaks();
68
+ const t = this.peek();
69
+ if (t.type === 'EOF')
70
+ break;
71
+ if (t.type === 'KEYWORD' && stoppers.has(t.keyword ?? ''))
72
+ break;
73
+ const s = this.parseStmt();
74
+ if (s)
75
+ out.push(s);
76
+ else
77
+ this.recover();
78
+ }
79
+ return out;
80
+ }
81
+ /** Pula até o próximo separador após erro (continua achando mais erros). */
82
+ recover() {
83
+ let guard = 0;
84
+ while (this.peek().type !== 'EOF' && this.peek().type !== 'NEWLINE' && guard++ < 50) {
85
+ this.next();
86
+ }
87
+ }
88
+ parseStmt() {
89
+ const t = this.peek();
90
+ if (t.type === 'KEYWORD') {
91
+ switch (t.keyword) {
92
+ case 'IF':
93
+ case 'WHEN':
94
+ return this.parseIf();
95
+ case 'WHILE':
96
+ return this.parseWhile();
97
+ case 'REPEAT':
98
+ return this.parseRepeat();
99
+ case 'FOR':
100
+ return this.parseFor();
101
+ case 'FUNCTION':
102
+ return this.parseFunc();
103
+ case 'RETURN':
104
+ return this.parseReturn();
105
+ case 'ALWAYS':
106
+ return this.parseAlways();
107
+ default:
108
+ this.err(t, `"${t.value}" não pode começar uma frase aqui.`);
109
+ return null;
110
+ }
111
+ }
112
+ if (t.type === 'ACTION')
113
+ return this.parseAction();
114
+ if (t.type === 'IDENT')
115
+ return this.parseAssignOrCall();
116
+ if (t.type === 'EOF')
117
+ return null;
118
+ this.err(t, `Não entendi "${t.value}" — frase deve começar com ação (ANDAR, CHUTAR…), SE, ENQUANTO ou nome.`);
119
+ return null;
120
+ }
121
+ parseIf() {
122
+ const t = this.next(); // SE/QUANDO
123
+ const cond = this.parseExpr();
124
+ if (!cond)
125
+ return null;
126
+ this.hintEquals(t);
127
+ if (this.isKw('THEN'))
128
+ this.next(); // ENTÃO opcional
129
+ const then = this.parseBlock(new Set(['ELSE', 'END']));
130
+ let otherwise = [];
131
+ if (this.isKw('ELSE')) {
132
+ const elseTok = this.next();
133
+ const chained = this.parseElseTail(elseTok);
134
+ if (chained === null)
135
+ return null;
136
+ otherwise = chained;
137
+ }
138
+ if (!this.isKw('END')) {
139
+ this.err(this.peek(), 'Faltou FIM/END para fechar o SE.');
140
+ return null;
141
+ }
142
+ this.next();
143
+ return { kind: 'if', cond, then, otherwise, line: t.line };
144
+ }
145
+ /**
146
+ * Ramo do SENAO. Se o próximo SE/QUANDO está na MESMA linha do SENAO,
147
+ * encadeia como else-if sem FIM próprio (um FIM só fecha a cadeia).
148
+ * Caso contrário, comportamento clássico (SE aninhado com FIM próprio).
149
+ */
150
+ parseElseTail(elseTok) {
151
+ const nxt = this.peek();
152
+ if (nxt.type === 'KEYWORD' && (nxt.keyword === 'IF' || nxt.keyword === 'WHEN')) {
153
+ if (nxt.line === elseTok.line) {
154
+ const chained = this.parseIfChain();
155
+ if (!chained)
156
+ return null;
157
+ return [chained];
158
+ }
159
+ const nested = this.parseIf();
160
+ if (!nested)
161
+ return null;
162
+ return [nested];
163
+ }
164
+ return this.parseBlock(new Set(['END']));
165
+ }
166
+ /**
167
+ * SE encadeado (else-if): como parseIf, mas NÃO consome o FIM final —
168
+ * o FIM único de fechamento pertence ao SE externo da cadeia.
169
+ */
170
+ parseIfChain() {
171
+ const t = this.next(); // SE/QUANDO (mesma linha do SENAO)
172
+ const cond = this.parseExpr();
173
+ if (!cond)
174
+ return null;
175
+ if (this.isKw('THEN'))
176
+ this.next(); // ENTÃO opcional
177
+ const then = this.parseBlock(new Set(['ELSE', 'END']));
178
+ let otherwise = [];
179
+ if (this.isKw('ELSE')) {
180
+ const elseTok = this.next();
181
+ const tail = this.parseElseTail(elseTok);
182
+ if (!tail)
183
+ return null;
184
+ otherwise = tail;
185
+ }
186
+ return { kind: 'if', cond, then, otherwise, line: t.line };
187
+ }
188
+ parseWhile() {
189
+ const t = this.next();
190
+ const cond = this.parseExpr();
191
+ if (!cond)
192
+ return null;
193
+ this.hintEquals(t);
194
+ if (this.isKw('DO'))
195
+ this.next(); // FAÇA opcional
196
+ const body = this.parseBlock(new Set(['END']));
197
+ if (!this.isKw('END')) {
198
+ this.err(this.peek(), 'Faltou FIM/END para fechar o ENQUANTO.');
199
+ return null;
200
+ }
201
+ this.next();
202
+ return { kind: 'while', cond, body, line: t.line };
203
+ }
204
+ parseRepeat() {
205
+ const t = this.next(); // REPETIR
206
+ const count = this.parseExpr();
207
+ if (!count)
208
+ return null;
209
+ if (this.isKw('TIMES'))
210
+ this.next();
211
+ else {
212
+ this.err(this.peek(), 'Depois de REPETIR número vem VEZES. Ex.: REPETIR 3 VEZES … FIM');
213
+ return null;
214
+ }
215
+ const body = this.parseBlock(new Set(['END']));
216
+ if (!this.isKw('END')) {
217
+ this.err(this.peek(), 'Faltou FIM/END para fechar o REPETIR.');
218
+ return null;
219
+ }
220
+ this.next();
221
+ return { kind: 'repeat', count, body, line: t.line };
222
+ }
223
+ parseFor() {
224
+ const t = this.next(); // PARA
225
+ const name = this.peek();
226
+ if (name.type !== 'IDENT') {
227
+ this.err(name, 'PARA precisa de um nome. Ex.: PARA i DE 1 ATE 5 … FIM');
228
+ return null;
229
+ }
230
+ this.next();
231
+ if (!this.isKw('FROM')) {
232
+ this.err(this.peek(), 'Faltou DE. Ex.: PARA i DE 1 ATE 5 … FIM');
233
+ return null;
234
+ }
235
+ this.next();
236
+ const from = this.parseExpr();
237
+ if (!from)
238
+ return null;
239
+ if (!this.isKw('TO')) {
240
+ this.err(this.peek(), 'Faltou ATE. Ex.: PARA i DE 1 ATE 5 … FIM');
241
+ return null;
242
+ }
243
+ this.next();
244
+ const to = this.parseExpr();
245
+ if (!to)
246
+ return null;
247
+ let step = null;
248
+ if (this.isKw('STEP')) {
249
+ this.next();
250
+ step = this.parseExpr();
251
+ if (!step)
252
+ return null;
253
+ }
254
+ const body = this.parseBlock(new Set(['END']));
255
+ if (!this.isKw('END')) {
256
+ this.err(this.peek(), 'Faltou FIM/END para fechar o PARA.');
257
+ return null;
258
+ }
259
+ this.next();
260
+ return { kind: 'for', name: name.value, from, to, step, body, line: t.line };
261
+ }
262
+ parseFunc() {
263
+ const t = this.next(); // FUNÇÃO
264
+ const name = this.peek();
265
+ if (name.type !== 'IDENT') {
266
+ this.err(name, 'FUNCAO precisa de um nome. Ex.: FUNCAO onda() … FIM');
267
+ return null;
268
+ }
269
+ this.next();
270
+ const params = [];
271
+ const open = this.peek();
272
+ if (open.type === 'PUNCT' && open.value === '(') {
273
+ this.next();
274
+ for (;;) {
275
+ const p = this.peek();
276
+ if (p.type === 'PUNCT' && p.value === ')') {
277
+ this.next();
278
+ break;
279
+ }
280
+ if (p.type !== 'IDENT') {
281
+ this.err(p, 'Nome de entrada inválido na FUNCAO.');
282
+ return null;
283
+ }
284
+ params.push(p.value);
285
+ this.next();
286
+ const sep = this.peek();
287
+ if (sep.type === 'PUNCT' && sep.value === ',')
288
+ this.next();
289
+ else if (sep.type === 'PUNCT' && sep.value === ')')
290
+ continue;
291
+ else {
292
+ this.err(sep, 'Faltou vírgula ou ) na FUNCAO.');
293
+ return null;
294
+ }
295
+ }
296
+ }
297
+ const body = this.parseBlock(new Set(['END']));
298
+ if (!this.isKw('END')) {
299
+ this.err(this.peek(), 'Faltou FIM/END para fechar a FUNCAO.');
300
+ return null;
301
+ }
302
+ this.next();
303
+ return { kind: 'func', name: name.value, params, body, line: t.line };
304
+ }
305
+ parseReturn() {
306
+ const t = this.next();
307
+ // RETORNAR sozinho ou com valor (se a próxima linha/frase começa, é vazio).
308
+ // TRUE/FALSE/NOT iniciam expressão — `RETORNAR VERDADEIRO` devolve true.
309
+ const n = this.peek();
310
+ if (n.type === 'NEWLINE' ||
311
+ n.type === 'EOF' ||
312
+ (n.type === 'PUNCT' && n.value === ';') ||
313
+ (n.type === 'KEYWORD' && n.keyword !== 'TRUE' && n.keyword !== 'FALSE' && n.keyword !== 'NOT')) {
314
+ return { kind: 'return', expr: null, line: t.line };
315
+ }
316
+ const expr = this.parseExpr();
317
+ if (!expr)
318
+ return null;
319
+ return { kind: 'return', expr, line: t.line };
320
+ }
321
+ parseAlways() {
322
+ const t = this.next(); // SEMPRE
323
+ const body = this.parseBlock(new Set(['END']));
324
+ if (!this.isKw('END')) {
325
+ this.err(this.peek(), 'Faltou FIM/END para fechar o SEMPRE.');
326
+ return null;
327
+ }
328
+ this.next();
329
+ return { kind: 'always', body, line: t.line };
330
+ }
331
+ parseAction() {
332
+ const t = this.next();
333
+ const spec = t.action;
334
+ if (!spec)
335
+ return null;
336
+ const args = [];
337
+ for (let a = 0; a < spec.args; a++) {
338
+ // `ANDAR_POR 0.5, 2` / `MOTORES -0.5, 0.5`: vírgula é separadora.
339
+ // Também aceita sem vírgula (`MOTOR 1 0.5`), como sempre fez o H++.
340
+ if (a > 0 && this.peek().type === 'PUNCT' && this.peek().value === ',')
341
+ this.next();
342
+ const e = this.parseExpr();
343
+ if (!e) {
344
+ const ex = spec.args === 2 ? '0.5, 2' : '0.5';
345
+ this.err(this.peek(), `"${t.value}" precisa de ${spec.args} valor(es). Ex.: ${t.value} ${ex}`);
346
+ return null;
347
+ }
348
+ args.push(e);
349
+ }
350
+ return { kind: 'action', name: spec.name, args, line: t.line };
351
+ }
352
+ parseAssignOrCall() {
353
+ const name = this.next();
354
+ const after = this.peek();
355
+ // nome = valor
356
+ if (after.type === 'OP' && after.value === '=') {
357
+ this.next();
358
+ const expr = this.parseExpr();
359
+ if (!expr) {
360
+ this.err(this.peek(), `Faltou o valor depois de "${name.value} =".`);
361
+ return null;
362
+ }
363
+ return { kind: 'assign', name: name.value, expr, line: name.line };
364
+ }
365
+ // chamada funcao(args) como frase
366
+ if (after.type === 'PUNCT' && after.value === '(') {
367
+ const call = this.parseCall(name);
368
+ if (!call)
369
+ return null;
370
+ return { kind: 'expr', expr: call, line: name.line };
371
+ }
372
+ this.err(after, `Depois de "${name.value}" eu esperava = ou (. Ex.: ${name.value} = 1`);
373
+ return null;
374
+ }
375
+ parseCall(name) {
376
+ this.next(); // (
377
+ const args = [];
378
+ const first = this.peek();
379
+ if (first.type === 'PUNCT' && first.value === ')') {
380
+ this.next();
381
+ return { kind: 'call', name: name.value, args, line: name.line };
382
+ }
383
+ for (;;) {
384
+ const e = this.parseExpr();
385
+ if (!e)
386
+ return null;
387
+ args.push(e);
388
+ const sep = this.peek();
389
+ if (sep.type === 'PUNCT' && sep.value === ',') {
390
+ this.next();
391
+ continue;
392
+ }
393
+ if (sep.type === 'PUNCT' && sep.value === ')') {
394
+ this.next();
395
+ break;
396
+ }
397
+ this.err(sep, 'Faltou vírgula ou ) na chamada.');
398
+ return null;
399
+ }
400
+ return { kind: 'call', name: name.value, args, line: name.line };
401
+ }
402
+ // ---- expressões (precedência) ----
403
+ parseExpr() {
404
+ return this.parseOr();
405
+ }
406
+ parseOr() {
407
+ let left = this.parseAnd();
408
+ if (!left)
409
+ return null;
410
+ while (this.isKw('OR')) {
411
+ const t = this.next();
412
+ const right = this.parseAnd();
413
+ if (!right)
414
+ return null;
415
+ left = { kind: 'binary', op: 'OR', left, right, line: t.line };
416
+ }
417
+ return left;
418
+ }
419
+ parseAnd() {
420
+ let left = this.parseNot();
421
+ if (!left)
422
+ return null;
423
+ while (this.isKw('AND')) {
424
+ const t = this.next();
425
+ const right = this.parseNot();
426
+ if (!right)
427
+ return null;
428
+ left = { kind: 'binary', op: 'AND', left, right, line: t.line };
429
+ }
430
+ return left;
431
+ }
432
+ parseNot() {
433
+ if (this.isKw('NOT')) {
434
+ const t = this.next();
435
+ const e = this.parseNot();
436
+ if (!e)
437
+ return null;
438
+ return { kind: 'unary', op: 'NOT', expr: e, line: t.line };
439
+ }
440
+ return this.parseComp();
441
+ }
442
+ parseComp() {
443
+ const left = this.parseAdd();
444
+ if (!left)
445
+ return null;
446
+ const t = this.peek();
447
+ if (t.type === 'OP' && ['==', '!=', '<', '<=', '>', '>='].includes(t.value)) {
448
+ this.next();
449
+ const right = this.parseAdd();
450
+ if (!right) {
451
+ this.err(this.peek(), 'Faltou o valor depois da comparação.');
452
+ return null;
453
+ }
454
+ return { kind: 'binary', op: t.value, left, right, line: t.line };
455
+ }
456
+ return left;
457
+ }
458
+ parseAdd() {
459
+ let left = this.parseMul();
460
+ if (!left)
461
+ return null;
462
+ for (;;) {
463
+ const t = this.peek();
464
+ if (t.type === 'OP' && (t.value === '+' || t.value === '-')) {
465
+ this.next();
466
+ const right = this.parseMul();
467
+ if (!right) {
468
+ this.err(this.peek(), 'Faltou número depois do sinal.');
469
+ return null;
470
+ }
471
+ left = { kind: 'binary', op: t.value, left, right, line: t.line };
472
+ continue;
473
+ }
474
+ return left;
475
+ }
476
+ }
477
+ parseMul() {
478
+ let left = this.parseUnary();
479
+ if (!left)
480
+ return null;
481
+ for (;;) {
482
+ const t = this.peek();
483
+ if (t.type === 'OP' && (t.value === '*' || t.value === '/' || t.value === '%')) {
484
+ this.next();
485
+ const right = this.parseUnary();
486
+ if (!right) {
487
+ this.err(this.peek(), 'Faltou número depois do sinal.');
488
+ return null;
489
+ }
490
+ left = { kind: 'binary', op: t.value, left, right, line: t.line };
491
+ continue;
492
+ }
493
+ return left;
494
+ }
495
+ }
496
+ parseUnary() {
497
+ const t = this.peek();
498
+ if (t.type === 'OP' && t.value === '-') {
499
+ this.next();
500
+ const e = this.parseUnary();
501
+ if (!e)
502
+ return null;
503
+ return { kind: 'unary', op: '-', expr: e, line: t.line };
504
+ }
505
+ if (this.isKw('NOT')) {
506
+ this.next();
507
+ const e = this.parseUnary();
508
+ if (!e)
509
+ return null;
510
+ return { kind: 'unary', op: 'NOT', expr: e, line: t.line };
511
+ }
512
+ return this.parsePower();
513
+ }
514
+ parsePower() {
515
+ const base = this.parsePrimary();
516
+ if (!base)
517
+ return null;
518
+ const t = this.peek();
519
+ if (t.type === 'OP' && t.value === '^') {
520
+ this.next();
521
+ const exp = this.parseUnary();
522
+ if (!exp) {
523
+ this.err(this.peek(), 'Faltou número depois de ^.');
524
+ return null;
525
+ }
526
+ return { kind: 'binary', op: '^', left: base, right: exp, line: t.line };
527
+ }
528
+ return base;
529
+ }
530
+ parsePrimary() {
531
+ const t = this.peek();
532
+ if (t.type === 'NUMBER') {
533
+ this.next();
534
+ return { kind: 'num', value: t.numValue ?? 0, line: t.line };
535
+ }
536
+ if (t.type === 'STRING') {
537
+ this.next();
538
+ return { kind: 'str', value: t.value, line: t.line };
539
+ }
540
+ if (t.type === 'KEYWORD' && (t.keyword === 'TRUE' || t.keyword === 'FALSE')) {
541
+ this.next();
542
+ return { kind: 'bool', value: t.keyword === 'TRUE', line: t.line };
543
+ }
544
+ if (t.type === 'IDENT') {
545
+ this.next();
546
+ const after = this.peek();
547
+ if (after.type === 'PUNCT' && after.value === '(') {
548
+ return this.parseCall(t);
549
+ }
550
+ return { kind: 'var', name: t.value, line: t.line };
551
+ }
552
+ if (t.type === 'PUNCT' && t.value === '(') {
553
+ this.next();
554
+ const e = this.parseExpr();
555
+ if (!e)
556
+ return null;
557
+ const close = this.peek();
558
+ if (close.type !== 'PUNCT' || close.value !== ')') {
559
+ this.err(close, 'Faltou ) para fechar a conta.');
560
+ return null;
561
+ }
562
+ this.next();
563
+ return e;
564
+ }
565
+ this.err(t, `Esperava número, nome ou (conta), mas achei "${t.value}".`);
566
+ return null;
567
+ }
568
+ }
569
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AASA,iEAAiE;AACjE,MAAM,OAAO,MAAM;IAIjB,YAAoB,MAAe;QAAvB;;;;mBAAQ,MAAM;WAAS;QAH3B;;;;mBAAM,CAAC;WAAC;QAChB;;;;mBAAuB,EAAE;WAAC;IAEY,CAAC;IAEvC,KAAK;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uBAAuB;IAEf,IAAI;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtE,CAAC;IAEO,IAAI;QACV,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK;YAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QACjC,OAAO,CAAC,CAAC;IACX,CAAC;IAEO,GAAG,CAAC,CAAQ,EAAE,OAAe;QACnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC;IAEO,UAAU;QAChB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,GAAG,CAAC,EAAE,CAAC;YACrG,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAEO,IAAI,CAAC,IAAiB;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,OAAO,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC;IACpD,CAAC;IAED,oEAAoE;IAC5D,UAAU,CAAC,CAAQ;QACzB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,yEAAyE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,gBAAgB,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,gCAAgC,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IAED,+CAA+C;IACvC,UAAU,CAAC,QAAqB;QACtC,MAAM,GAAG,GAAW,EAAE,CAAC;QACvB,SAAS,CAAC;YACR,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK;gBAAE,MAAM;YAC5B,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;gBAAE,MAAM;YACjE,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;gBACd,IAAI,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,4EAA4E;IACpE,OAAO;QACb,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;YACpF,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAEO,SAAS;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACzB,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;gBAClB,KAAK,IAAI,CAAC;gBACV,KAAK,MAAM;oBACT,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;gBACxB,KAAK,OAAO;oBACV,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC3B,KAAK,QAAQ;oBACX,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC5B,KAAK,KAAK;oBACR,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACzB,KAAK,UAAU;oBACb,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC1B,KAAK,QAAQ;oBACX,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC5B,KAAK,QAAQ;oBACX,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC5B;oBACE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,oCAAoC,CAAC,CAAC;oBAC7D,OAAO,IAAI,CAAC;YAChB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;QACnD,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACxD,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,KAAK,yEAAyE,CAAC,CAAC;QAC9G,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,OAAO;QACb,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,YAAY;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,iBAAiB;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACvD,IAAI,SAAS,GAAW,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,OAAO,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAClC,SAAS,GAAG,OAAO,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,kCAAkC,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,CAAC;IAED;;;;OAIG;IACK,aAAa,CAAC,OAAc;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,OAAO,KAAK,IAAI,IAAI,GAAG,CAAC,OAAO,KAAK,MAAM,CAAC,EAAE,CAAC;YAC/E,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpC,IAAI,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC;gBAC1B,OAAO,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YACzB,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACK,YAAY;QAClB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,mCAAmC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,iBAAiB;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACvD,IAAI,SAAS,GAAW,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YACvB,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,CAAC;IAEO,UAAU;QAChB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,gBAAgB;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,wCAAwC,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,CAAC;IAEO,WAAW;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,IAAI,CAAC,IAAI,EAAE,CAAC;aAC/B,CAAC;YACJ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,gEAAgE,CAAC,CAAC;YACxF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,uCAAuC,CAAC,CAAC;YAC/D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACvD,CAAC;IAEO,QAAQ;QACd,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,uDAAuD,CAAC,CAAC;YACxE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,yCAAyC,CAAC,CAAC;YACjE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,0CAA0C,CAAC,CAAC;YAClE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACrB,IAAI,IAAI,GAAgB,IAAI,CAAC;QAC7B,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;QACzB,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,oCAAoC,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/E,CAAC;IAEO,SAAS;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,qDAAqD,CAAC,CAAC;YACtE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;YAChD,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,SAAS,CAAC;gBACR,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBACtB,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;oBAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;oBACZ,MAAM;gBACR,CAAC;gBACD,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBACvB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,qCAAqC,CAAC,CAAC;oBACnD,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACrB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBACxB,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,KAAK,KAAK,GAAG;oBAAE,IAAI,CAAC,IAAI,EAAE,CAAC;qBACtD,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,KAAK,KAAK,GAAG;oBAAE,SAAS;qBACxD,CAAC;oBACJ,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,gCAAgC,CAAC,CAAC;oBAChD,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,sCAAsC,CAAC,CAAC;YAC9D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxE,CAAC;IAEO,WAAW;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,4EAA4E;QAC5E,yEAAyE;QACzE,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IACE,CAAC,CAAC,IAAI,KAAK,SAAS;YACpB,CAAC,CAAC,IAAI,KAAK,KAAK;YAChB,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC;YACvC,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,EAC9F,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACtD,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,CAAC;IAEO,WAAW;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,sCAAsC,CAAC,CAAC;YAC9D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,CAAC;IAEO,WAAW;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC;QACtB,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,MAAM,IAAI,GAAW,EAAE,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,kEAAkE;YAClE,oEAAoE;YACpE,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,GAAG;gBAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YACpF,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC,EAAE,CAAC;gBACP,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC9C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,KAAK,gBAAgB,IAAI,CAAC,IAAI,oBAAoB,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC/F,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACf,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjE,CAAC;IAEO,iBAAiB;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,eAAe;QACf,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;YAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,6BAA6B,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC;gBACrE,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACrE,CAAC;QACD,kCAAkC;QAClC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;YAClD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YACvB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACvD,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,cAAc,IAAI,CAAC,KAAK,8BAA8B,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC;QACxF,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,SAAS,CAAC,IAAW;QAC3B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI;QACjB,MAAM,IAAI,GAAW,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;YAClD,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACnE,CAAC;QACD,SAAS,CAAC;YACR,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACb,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;gBAC9C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,SAAS;YACX,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;gBAC9C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,MAAM;YACR,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,iCAAiC,CAAC,CAAC;YACjD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACnE,CAAC;IAED,qCAAqC;IAE7B,SAAS;QACf,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAEO,OAAO;QACb,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YACxB,IAAI,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACjE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,QAAQ;QACd,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YACxB,IAAI,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAClE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,QAAQ;QACd,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YACpB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7D,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC;IAEO,SAAS;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5E,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,sCAAsC,CAAC,CAAC;gBAC9D,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACpE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,QAAQ;QACd,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,SAAS,CAAC;YACR,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC5D,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,gCAAgC,CAAC,CAAC;oBACxD,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,IAAI,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAClE,SAAS;YACX,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,QAAQ;QACd,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,SAAS,CAAC;YACR,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC/E,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,gCAAgC,CAAC,CAAC;oBACxD,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,IAAI,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAClE,SAAS;YACX,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,UAAU;QAChB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC5B,IAAI,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YACpB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3D,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC5B,IAAI,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YACpB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7D,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IAC3B,CAAC;IAEO,UAAU;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC9B,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,4BAA4B,CAAC,CAAC;gBACpD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3E,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,YAAY;QAClB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,CAAC;YAC5E,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,KAAK,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1B,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;gBAClD,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;YAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YACpB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1B,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;gBAClD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,+BAA+B,CAAC,CAAC;gBACjD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gDAAgD,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * H++ Robotics — ações (atuadores).
3
+ *
4
+ * Nomes canônicos de ação: o programa H++ usa verbos PT/EN (`ANDAR`/`DRIVE`),
5
+ * o lexer resolve para um destes canônicos e o interpretador despacha para o
6
+ * `Hardware` do adapter. Domínios podem adicionar verbos próprios via
7
+ * `ExtensionDescriptor.verbs` sem tocar a gramática.
8
+ */
9
+ export type { ActionName, ActionSpec } from '../tokens.js';
10
+ /** Ações canônicas executáveis por qualquer hardware H++. */
11
+ export declare const CANONICAL_ACTIONS: readonly ["drive", "reverse", "stop", "turn", "turnLeft", "turnRight", "driveFor", "reverseFor", "turnFor", "stopFor", "wait", "driveMeters", "reverseMeters", "turnDegrees", "motor", "motorLeft", "motorRight", "motors", "curve", "moveLateral", "moveXY", "kick", "aimBall", "aimGoal", "radioSend", "dribble"];
12
+ export type CanonicalAction = (typeof CANONICAL_ACTIONS)[number];
13
+ //# sourceMappingURL=actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/robotics/actions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI3D,6DAA6D;AAC7D,eAAO,MAAM,iBAAiB,qTA2BpB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * H++ Robotics — ações (atuadores).
3
+ *
4
+ * Nomes canônicos de ação: o programa H++ usa verbos PT/EN (`ANDAR`/`DRIVE`),
5
+ * o lexer resolve para um destes canônicos e o interpretador despacha para o
6
+ * `Hardware` do adapter. Domínios podem adicionar verbos próprios via
7
+ * `ExtensionDescriptor.verbs` sem tocar a gramática.
8
+ */
9
+ /** Ações canônicas executáveis por qualquer hardware H++. */
10
+ export const CANONICAL_ACTIONS = [
11
+ 'drive',
12
+ 'reverse',
13
+ 'stop',
14
+ 'turn',
15
+ 'turnLeft',
16
+ 'turnRight',
17
+ 'driveFor',
18
+ 'reverseFor',
19
+ 'turnFor',
20
+ 'stopFor',
21
+ 'wait',
22
+ 'driveMeters',
23
+ 'reverseMeters',
24
+ 'turnDegrees',
25
+ 'motor',
26
+ 'motorLeft',
27
+ 'motorRight',
28
+ 'motors',
29
+ 'curve',
30
+ 'moveLateral',
31
+ 'moveXY',
32
+ 'kick',
33
+ 'aimBall',
34
+ 'aimGoal',
35
+ 'radioSend',
36
+ 'dribble'
37
+ ];
38
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/robotics/actions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,6DAA6D;AAC7D,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,OAAO;IACP,SAAS;IACT,MAAM;IACN,MAAM;IACN,UAAU;IACV,WAAW;IACX,UAAU;IACV,YAAY;IACZ,SAAS;IACT,SAAS;IACT,MAAM;IACN,aAAa;IACb,eAAe;IACf,aAAa;IACb,OAAO;IACP,WAAW;IACX,YAAY;IACZ,QAAQ;IACR,OAAO;IACP,aAAa;IACb,QAAQ;IACR,MAAM;IACN,SAAS;IACT,SAAS;IACT,WAAW;IACX,SAAS;CACD,CAAC"}