atcoder-gui 1.0.0 → 1.1.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 (105) hide show
  1. package/README.md +7 -0
  2. package/dist/analyzer/analyzer.d.ts +16 -0
  3. package/dist/analyzer/analyzer.d.ts.map +1 -0
  4. package/dist/analyzer/analyzer.js +379 -0
  5. package/dist/analyzer/analyzer.js.map +1 -0
  6. package/dist/analyzer/html-parser.d.ts +24 -0
  7. package/dist/analyzer/html-parser.d.ts.map +1 -0
  8. package/dist/analyzer/html-parser.js +214 -0
  9. package/dist/analyzer/html-parser.js.map +1 -0
  10. package/dist/analyzer/index.d.ts +7 -0
  11. package/dist/analyzer/index.d.ts.map +1 -0
  12. package/dist/analyzer/index.js +7 -0
  13. package/dist/analyzer/index.js.map +1 -0
  14. package/dist/analyzer/lexer.d.ts +14 -0
  15. package/dist/analyzer/lexer.d.ts.map +1 -0
  16. package/dist/analyzer/lexer.js +133 -0
  17. package/dist/analyzer/lexer.js.map +1 -0
  18. package/dist/analyzer/match.d.ts +7 -0
  19. package/dist/analyzer/match.d.ts.map +1 -0
  20. package/dist/analyzer/match.js +133 -0
  21. package/dist/analyzer/match.js.map +1 -0
  22. package/dist/analyzer/parser.d.ts +20 -0
  23. package/dist/analyzer/parser.d.ts.map +1 -0
  24. package/dist/analyzer/parser.js +135 -0
  25. package/dist/analyzer/parser.js.map +1 -0
  26. package/dist/analyzer/types.d.ts +54 -0
  27. package/dist/analyzer/types.d.ts.map +1 -0
  28. package/dist/analyzer/types.js +10 -0
  29. package/dist/analyzer/types.js.map +1 -0
  30. package/dist/analyzer/typing.d.ts +10 -0
  31. package/dist/analyzer/typing.d.ts.map +1 -0
  32. package/dist/analyzer/typing.js +246 -0
  33. package/dist/analyzer/typing.js.map +1 -0
  34. package/dist/browser.d.ts +12 -0
  35. package/dist/browser.d.ts.map +1 -1
  36. package/dist/browser.js +26 -1
  37. package/dist/browser.js.map +1 -1
  38. package/dist/build.d.ts +7 -0
  39. package/dist/build.d.ts.map +1 -0
  40. package/dist/build.js +40 -0
  41. package/dist/build.js.map +1 -0
  42. package/dist/config.d.ts +10 -2
  43. package/dist/config.d.ts.map +1 -1
  44. package/dist/config.js +31 -18
  45. package/dist/config.js.map +1 -1
  46. package/dist/config.json5 +16 -1
  47. package/dist/gen.d.ts +6 -12
  48. package/dist/gen.d.ts.map +1 -1
  49. package/dist/gen.js +153 -66
  50. package/dist/gen.js.map +1 -1
  51. package/dist/generator/checker.d.ts +2 -0
  52. package/dist/generator/checker.d.ts.map +1 -0
  53. package/dist/generator/checker.js +64 -0
  54. package/dist/generator/checker.js.map +1 -0
  55. package/dist/generator/cplusplus.d.ts +14 -0
  56. package/dist/generator/cplusplus.d.ts.map +1 -0
  57. package/dist/generator/cplusplus.js +43 -0
  58. package/dist/generator/cplusplus.js.map +1 -0
  59. package/dist/generator/fetcher.d.ts +2 -0
  60. package/dist/generator/fetcher.d.ts.map +1 -0
  61. package/dist/generator/fetcher.js +39 -0
  62. package/dist/generator/fetcher.js.map +1 -0
  63. package/dist/generator/pipeline.d.ts +25 -0
  64. package/dist/generator/pipeline.d.ts.map +1 -0
  65. package/dist/generator/pipeline.js +85 -0
  66. package/dist/generator/pipeline.js.map +1 -0
  67. package/dist/generator/python.d.ts +14 -0
  68. package/dist/generator/python.d.ts.map +1 -0
  69. package/dist/generator/python.js +41 -0
  70. package/dist/generator/python.js.map +1 -0
  71. package/dist/generator/types.d.ts +79 -0
  72. package/dist/generator/types.d.ts.map +1 -0
  73. package/dist/generator/types.js +2 -0
  74. package/dist/generator/types.js.map +1 -0
  75. package/dist/generator/universal.d.ts +35 -0
  76. package/dist/generator/universal.d.ts.map +1 -0
  77. package/dist/generator/universal.js +524 -0
  78. package/dist/generator/universal.js.map +1 -0
  79. package/dist/generator/variable-extractor.d.ts +16 -0
  80. package/dist/generator/variable-extractor.d.ts.map +1 -0
  81. package/dist/generator/variable-extractor.js +103 -0
  82. package/dist/generator/variable-extractor.js.map +1 -0
  83. package/dist/main.d.ts +3 -1
  84. package/dist/main.d.ts.map +1 -1
  85. package/dist/main.js +99 -100
  86. package/dist/main.js.map +1 -1
  87. package/dist/submit.d.ts +1 -1
  88. package/dist/submit.d.ts.map +1 -1
  89. package/dist/submit.js +17 -17
  90. package/dist/submit.js.map +1 -1
  91. package/dist/test.d.ts +10 -0
  92. package/dist/test.d.ts.map +1 -0
  93. package/dist/test.js +127 -0
  94. package/dist/test.js.map +1 -0
  95. package/dist/tests/batch_check.d.ts +2 -0
  96. package/dist/tests/batch_check.d.ts.map +1 -0
  97. package/dist/tests/batch_check.js +46 -0
  98. package/dist/tests/batch_check.js.map +1 -0
  99. package/dist/types.d.ts +2 -0
  100. package/dist/types.d.ts.map +1 -1
  101. package/dist/utils.d.ts +12 -0
  102. package/dist/utils.d.ts.map +1 -1
  103. package/dist/utils.js +32 -0
  104. package/dist/utils.js.map +1 -1
  105. package/package.json +21 -4
@@ -0,0 +1,524 @@
1
+ import { VarType } from "../analyzer/types.js";
2
+ export class UniversalGenerator {
3
+ config;
4
+ indent;
5
+ newline;
6
+ inputtedVariables = new Set();
7
+ constructor(config) {
8
+ this.config = config;
9
+ this.indent = (config.indent_type == "tab" ? "\t" : " ").repeat(config.indent_width);
10
+ this.newline = config.newline == "crlf" ? "\r\n" : "\n";
11
+ }
12
+ generate(format, variables, multipleCases, queryCases, yesStr, noStr, mod, returnType = "void", multipleColumns, multipleRows, variableArray) {
13
+ let queryLoopVar = undefined;
14
+ if (queryCases) {
15
+ // Heuristic: Find variable named Q or q
16
+ const qVar = variables.find((v) => v.name.toUpperCase() === "Q");
17
+ if (qVar) {
18
+ queryLoopVar = qVar.name;
19
+ }
20
+ else {
21
+ // Fallback: Check for last scalar integer, but favor Q if missing
22
+ const lastScalar = [...variables]
23
+ .reverse()
24
+ .find((v) => v.dims === 0 && (v.type === "int" || v.type === "index_int"));
25
+ if (lastScalar && lastScalar.name.toUpperCase() !== "N" && lastScalar.name.toUpperCase() !== "M") {
26
+ // Use last scalar if it doesn't look like N or M (usually loop bounds for setup)
27
+ queryLoopVar = lastScalar.name;
28
+ }
29
+ else {
30
+ // Default fallback if no suitable variable found (e.g. Q was in unparsed block)
31
+ queryLoopVar = "Q";
32
+ }
33
+ }
34
+ }
35
+ // Filter out query variables from declarations and arguments
36
+ const declarableVariables = variables.filter((v) => v.type !== VarType.Query);
37
+ const declaredVariables = new Set();
38
+ this.inputtedVariables.clear();
39
+ // Input Reading (and interleaved declaration)
40
+ const inputLines = this.generateInput(format.children, declarableVariables, declaredVariables, queryLoopVar);
41
+ const inputPart = inputLines.map((line) => this.indent + line).join(this.newline);
42
+ return {
43
+ prediction_success: true,
44
+ mod: mod,
45
+ return_type: returnType,
46
+ yes_str: yesStr,
47
+ no_str: noStr,
48
+ formal_arguments: this.generateFormalArguments(declarableVariables),
49
+ actual_arguments: this.generateActualArguments(declarableVariables),
50
+ input_part: inputPart,
51
+ multiple_cases: multipleCases,
52
+ multiple_columns: multipleColumns,
53
+ multiple_rows: multipleRows,
54
+ variable_array: variableArray,
55
+ query_cases: queryCases,
56
+ query_loop_var: queryLoopVar,
57
+ tools: {
58
+ version: "1.0.0", // TODO: Get from package.json
59
+ },
60
+ };
61
+ }
62
+ getDependencies(node) {
63
+ const deps = new Set();
64
+ const visit = (n) => {
65
+ if (!n)
66
+ return;
67
+ if (n.type === "ident") {
68
+ deps.add(n.value || n.name);
69
+ }
70
+ else if (n.type === "binop") {
71
+ const bin = n;
72
+ visit(bin.left);
73
+ visit(bin.right);
74
+ }
75
+ else if (n.type === "item") {
76
+ deps.add(n.name);
77
+ }
78
+ };
79
+ visit(node);
80
+ return Array.from(deps);
81
+ }
82
+ areDependenciesMet(variable) {
83
+ for (const indexNode of variable.indices) {
84
+ const deps = this.getDependencies(indexNode);
85
+ for (const dep of deps) {
86
+ if (!this.inputtedVariables.has(dep)) {
87
+ return false;
88
+ }
89
+ }
90
+ }
91
+ return true;
92
+ }
93
+ generateDeclarationGroup(variables) {
94
+ if (variables.length === 0)
95
+ return "";
96
+ const firstVar = variables[0];
97
+ const typeKey = this.mapVarType(firstVar.type);
98
+ const defaultValue = this.config.default[typeKey] || "";
99
+ let template = "";
100
+ if (firstVar.dims === 0) {
101
+ template = this.config.declare[typeKey];
102
+ }
103
+ else if (firstVar.dims === 1) {
104
+ template = this.config.declare_and_allocate.seq;
105
+ }
106
+ else if (firstVar.dims === 2) {
107
+ template = this.config.declare_and_allocate["2d_seq"];
108
+ }
109
+ const namePlaceholder = "{name}";
110
+ const placeholderIndex = template.indexOf(namePlaceholder);
111
+ if (placeholderIndex === -1) {
112
+ // Fallback if no {name} placeholder
113
+ return variables.map((v) => this.generateDeclaration(v)).join(this.newline);
114
+ }
115
+ const innerType = this.config.type[typeKey];
116
+ const prefix = this.formatString(template.substring(0, placeholderIndex), {
117
+ type: innerType,
118
+ });
119
+ const itemTemplate = template.substring(placeholderIndex);
120
+ const items = variables.map((v) => {
121
+ if (v.dims === 0) {
122
+ return this.formatString(itemTemplate, {
123
+ name: v.name,
124
+ type: innerType,
125
+ default: defaultValue,
126
+ });
127
+ }
128
+ else if (v.dims === 1) {
129
+ const len = this.stringifyNode(v.indices[0]);
130
+ return this.formatString(itemTemplate, {
131
+ name: v.name,
132
+ type: innerType,
133
+ length: len,
134
+ default: defaultValue,
135
+ });
136
+ }
137
+ else if (v.dims === 2) {
138
+ const lenI = this.stringifyNode(v.indices[0]);
139
+ const lenJ = this.stringifyNode(v.indices[1]);
140
+ return this.formatString(itemTemplate, {
141
+ name: v.name,
142
+ type: innerType,
143
+ length_i: lenI,
144
+ length_j: lenJ,
145
+ default: defaultValue,
146
+ });
147
+ }
148
+ return v.name;
149
+ });
150
+ let result = prefix + items.join(", ");
151
+ if (this.config.declare_group && this.config.append_semicolon) {
152
+ result += ";";
153
+ }
154
+ return result;
155
+ }
156
+ generateDeclaration(variable) {
157
+ const typeKey = this.mapVarType(variable.type);
158
+ const defaultValue = this.config.default[typeKey] || "";
159
+ let decl = "";
160
+ const innerType = this.config.type[typeKey];
161
+ if (variable.dims === 0) {
162
+ decl = this.formatString(this.config.declare[typeKey], {
163
+ name: variable.name,
164
+ type: innerType,
165
+ default: defaultValue,
166
+ });
167
+ }
168
+ else if (variable.dims === 1) {
169
+ // For vectors, we use declare_and_allocate if possible, or just declare if length is not known (simplified here)
170
+ // Assuming we know length from indices for now
171
+ const len = this.stringifyNode(variable.indices[0]);
172
+ decl = this.formatString(this.config.declare_and_allocate.seq, {
173
+ name: variable.name,
174
+ type: innerType,
175
+ length: len,
176
+ default: defaultValue,
177
+ });
178
+ }
179
+ else if (variable.dims === 2) {
180
+ const lenI = this.stringifyNode(variable.indices[0]);
181
+ const lenJ = this.stringifyNode(variable.indices[1]);
182
+ decl = this.formatString(this.config.declare_and_allocate["2d_seq"], {
183
+ name: variable.name,
184
+ type: innerType,
185
+ length_i: lenI,
186
+ length_j: lenJ,
187
+ default: defaultValue,
188
+ });
189
+ }
190
+ else {
191
+ decl = `// TODO: declaration for ${variable.name}`;
192
+ }
193
+ if (!this.config.declare_group &&
194
+ this.config.append_semicolon &&
195
+ decl &&
196
+ !decl.startsWith("//") &&
197
+ !decl.endsWith(";")) {
198
+ decl += ";";
199
+ }
200
+ return decl;
201
+ }
202
+ collectVariables(nodes, variables) {
203
+ const vars = new Set();
204
+ const visit = (node) => {
205
+ if (!node)
206
+ return;
207
+ if (node.type === "item") {
208
+ const item = node;
209
+ // Check if this item corresponds to a known variable
210
+ if (variables.some((v) => v.name === item.name)) {
211
+ vars.add(item.name);
212
+ }
213
+ }
214
+ else if (node.type === "loop") {
215
+ const loop = node;
216
+ // Recursively scan loop body
217
+ loop.body.forEach((child) => visit(child));
218
+ }
219
+ // No need to traverse other node types deeply for variable *usage* in input context usually,
220
+ // but 'item' indices might contain variables.
221
+ // However, 'item' node itself is what we are looking for as "being read".
222
+ };
223
+ nodes.forEach((node) => visit(node));
224
+ return Array.from(vars);
225
+ }
226
+ generateInput(nodes, variables, declaredVariables, skipLoopVar) {
227
+ const lines = [];
228
+ for (let i = 0; i < nodes.length; i++) {
229
+ const node = nodes[i];
230
+ if (node.type === "item") {
231
+ const itemNode = node;
232
+ const variable = variables.find((v) => v.name === itemNode.name);
233
+ // Declare if needed
234
+ if (variable && !declaredVariables.has(variable.name)) {
235
+ if (this.config.declare_group) {
236
+ const sameGroupVars = this.findVariablesInSameGroup(variables, declaredVariables, variable);
237
+ lines.push(this.generateDeclarationGroup(sameGroupVars));
238
+ for (const v of sameGroupVars) {
239
+ declaredVariables.add(v.name);
240
+ }
241
+ }
242
+ else {
243
+ lines.push(this.generateDeclaration(variable));
244
+ declaredVariables.add(variable.name);
245
+ }
246
+ }
247
+ let groupedInput = "";
248
+ if (this.config.input_separator && this.config.declare_group) {
249
+ const parts = this.getInputTemplateParts(itemNode, variables);
250
+ if (parts) {
251
+ const group = [itemNode];
252
+ for (let j = i + 1; j < nodes.length; j++) {
253
+ const nextNode = nodes[j];
254
+ if (nextNode.type !== "item")
255
+ break;
256
+ const nextItemNode = nextNode;
257
+ const nextParts = this.getInputTemplateParts(nextItemNode, variables);
258
+ if (!nextParts || nextParts.prefix !== parts.prefix || nextParts.suffix !== parts.suffix)
259
+ break;
260
+ // Also ensure it doesn't need declaration (or it's already declared)
261
+ const nextVariable = variables.find((v) => v.name === nextItemNode.name);
262
+ if (nextVariable && !declaredVariables.has(nextVariable.name)) {
263
+ // If we need to declare it, we check if it belongs to the same group as the current var
264
+ // But simplified: we only group if it's already declared or being declared now.
265
+ // Actually, the current loop handles declaration for current item.
266
+ // If the next item needs declaration, it might not be in the same declaration group.
267
+ // To be safe, let's only group if the next variable doesn't need a new declaration line.
268
+ // (i.e. it was already declared, or it will be part of the same declaration group as a previous one)
269
+ // However, findVariablesInSameGroup is used for declaration grouping.
270
+ // Let's check if the next variable IS already declared or will be.
271
+ // Wait, if it's not in declaredVariables, it will be handled by the next iteration of the outer loop.
272
+ // So we should only consume it here if we can handle its declaration too.
273
+ break;
274
+ }
275
+ group.push(nextItemNode);
276
+ }
277
+ if (group.length > 1) {
278
+ const accesses = group.map((n) => this.generateItemAccess(n, variables));
279
+ groupedInput = parts.prefix + accesses.join(this.config.input_separator) + parts.suffix;
280
+ i += group.length - 1;
281
+ for (const n of group) {
282
+ const v = variables.find((var_) => var_.name === n.name);
283
+ if (v)
284
+ this.inputtedVariables.add(v.name);
285
+ }
286
+ }
287
+ }
288
+ }
289
+ if (groupedInput) {
290
+ lines.push(groupedInput);
291
+ }
292
+ else {
293
+ lines.push(this.generateItemInput(itemNode, variables));
294
+ if (variable) {
295
+ this.inputtedVariables.add(variable.name);
296
+ }
297
+ }
298
+ }
299
+ else if (node.type === "loop") {
300
+ const loopNode = node;
301
+ if (skipLoopVar && this.stringifyNode(loopNode.end) === skipLoopVar) {
302
+ continue;
303
+ }
304
+ // Check for variables inside the loop that need declaration
305
+ const varsInLoopNames = this.collectVariables(loopNode.body, variables);
306
+ for (const varName of varsInLoopNames) {
307
+ if (!declaredVariables.has(varName)) {
308
+ const variable = variables.find((v) => v.name === varName);
309
+ if (variable) {
310
+ if (this.config.declare_group) {
311
+ const sameGroupVars = this.findVariablesInSameGroup(variables, declaredVariables, variable);
312
+ lines.push(this.generateDeclarationGroup(sameGroupVars));
313
+ for (const v of sameGroupVars) {
314
+ declaredVariables.add(v.name);
315
+ }
316
+ }
317
+ else {
318
+ lines.push(this.generateDeclaration(variable));
319
+ declaredVariables.add(variable.name);
320
+ }
321
+ }
322
+ }
323
+ }
324
+ lines.push(...this.generateLoopInput(loopNode, variables, declaredVariables));
325
+ }
326
+ }
327
+ return lines;
328
+ }
329
+ findVariablesInSameGroup(allVariables, declaredVariables, currentVar) {
330
+ const group = [currentVar];
331
+ for (const variable of allVariables) {
332
+ if (!declaredVariables.has(variable.name) &&
333
+ !group.some((gv) => gv.name === variable.name) &&
334
+ variable.type === currentVar.type &&
335
+ variable.dims === currentVar.dims &&
336
+ this.areDependenciesMet(variable) &&
337
+ this.areIndicesSame(variable, currentVar)) {
338
+ group.push(variable);
339
+ }
340
+ }
341
+ // Keep the order of variables as they appear in allVariables
342
+ const result = [];
343
+ for (const v of allVariables) {
344
+ if (group.some((gv) => gv.name === v.name)) {
345
+ result.push(v);
346
+ }
347
+ }
348
+ return result;
349
+ }
350
+ areIndicesSame(v1, v2) {
351
+ if (v1.dims !== v2.dims)
352
+ return false;
353
+ for (let i = 0; i < v1.dims; i++) {
354
+ if (this.stringifyNode(v1.indices[i]) !== this.stringifyNode(v2.indices[i])) {
355
+ return false;
356
+ }
357
+ }
358
+ return true;
359
+ }
360
+ generateItemAccess(node, variables) {
361
+ const variable = variables.find((v) => v.name === node.name);
362
+ if (!variable)
363
+ return node.name;
364
+ if (variable.dims === 0) {
365
+ return variable.name;
366
+ }
367
+ else if (variable.dims === 1) {
368
+ return this.formatString(this.config.access.seq, {
369
+ name: variable.name,
370
+ index: this.stringifyNode(node.indices[0]),
371
+ });
372
+ }
373
+ else if (variable.dims === 2) {
374
+ return this.formatString(this.config.access["2d_seq"], {
375
+ name: variable.name,
376
+ index_i: this.stringifyNode(node.indices[0]),
377
+ index_j: this.stringifyNode(node.indices[1]),
378
+ });
379
+ }
380
+ return variable.name;
381
+ }
382
+ getInputTemplateParts(node, variables) {
383
+ const variable = variables.find((v) => v.name === node.name);
384
+ if (!variable || variable.type === VarType.Query)
385
+ return null;
386
+ const typeKey = this.mapVarType(variable.type);
387
+ const template = this.config.input[typeKey];
388
+ if (!template)
389
+ return null;
390
+ const placeholder = "{name}";
391
+ const index = template.indexOf(placeholder);
392
+ if (index === -1)
393
+ return null;
394
+ return {
395
+ prefix: template.substring(0, index),
396
+ suffix: template.substring(index + placeholder.length),
397
+ };
398
+ }
399
+ generateItemInput(node, variables) {
400
+ const parts = this.getInputTemplateParts(node, variables);
401
+ if (!parts) {
402
+ const variable = variables.find((v) => v.name === node.name);
403
+ if (variable && variable.type === VarType.Query)
404
+ return "// TODO";
405
+ return `// Unknown variable ${node.name}`;
406
+ }
407
+ const access = this.generateItemAccess(node, variables);
408
+ return parts.prefix + access + parts.suffix;
409
+ }
410
+ generateLoopInput(node, variables, declaredVariables) {
411
+ const lines = [];
412
+ // Loop header
413
+ // "for(int {loop_var} = 0 ; {loop_var} < {length} ; {loop_var}++){"
414
+ const loopVar = node.variable;
415
+ const length = this.stringifyNode(node.end); // Simplified
416
+ const header = this.formatString(this.config.loop.header, {
417
+ loop_var: loopVar,
418
+ length: length,
419
+ });
420
+ lines.push(header);
421
+ // Body
422
+ const bodyLines = this.generateInput(node.body, variables, declaredVariables);
423
+ lines.push(...bodyLines.map((l) => this.indent + l)); // Add indent
424
+ // Footer
425
+ lines.push(this.config.loop.footer);
426
+ return lines;
427
+ }
428
+ generateFormalArguments(variables) {
429
+ return variables
430
+ .map((v) => {
431
+ const typeKey = this.mapVarType(v.type);
432
+ const innerType = this.config.type[typeKey];
433
+ if (v.dims === 0) {
434
+ return this.formatString(this.config.arg[typeKey], {
435
+ name: v.name,
436
+ type: innerType, // Though scalars don't usually use {type} in template
437
+ });
438
+ }
439
+ else if (v.dims === 1) {
440
+ return this.formatString(this.config.arg.seq, {
441
+ name: v.name,
442
+ type: innerType,
443
+ });
444
+ }
445
+ else if (v.dims === 2) {
446
+ return this.formatString(this.config.arg["2d_seq"], {
447
+ name: v.name,
448
+ type: innerType,
449
+ });
450
+ }
451
+ return "";
452
+ })
453
+ .join(", ");
454
+ }
455
+ generateActualArguments(variables) {
456
+ return variables
457
+ .map((v) => {
458
+ if (v.dims === 0)
459
+ return v.name;
460
+ const key = v.dims === 1 ? "seq" : "2d_seq";
461
+ // Check if actual_arg template exists, otherwise just name
462
+ if (this.config.actual_arg && this.config.actual_arg[key]) {
463
+ return this.formatString(this.config.actual_arg[key], {
464
+ name: v.name,
465
+ });
466
+ }
467
+ return v.name;
468
+ })
469
+ .join(", ");
470
+ }
471
+ mapVarType(type) {
472
+ switch (type) {
473
+ case "int":
474
+ return "int";
475
+ case "index_int":
476
+ return "int"; // treated as int
477
+ case "float":
478
+ return "float";
479
+ case "string":
480
+ return "str";
481
+ case "char":
482
+ return "str"; // Treat char as str for now, or add char to config
483
+ case VarType.Query:
484
+ return "int"; // Fallback to int for vector<long long> declaration
485
+ default:
486
+ return "int";
487
+ }
488
+ }
489
+ // Helper to replace {key} with value
490
+ formatString(template, params) {
491
+ return template.replace(/{(\w+)}/g, (_, key) => params[key] || `{${key}}`);
492
+ }
493
+ stringifyNode(node) {
494
+ if (!node)
495
+ return "";
496
+ switch (node.type) {
497
+ case "ident":
498
+ return node.value || node.name; // TODO: Check Token vs AST structure. FormatTree uses strings? No, ASTNode.
499
+ // FormatNode children are ASTNode. But ASTNode definition in types.ts is minimal.
500
+ // Looking at types.ts:
501
+ // export interface Token { type: TokenType; value?: string | number; ... }
502
+ // export interface ASTNode { type: string; }
503
+ // export interface NumberNode extends ASTNode { type: 'number'; value: number; }
504
+ // export interface BinOpNode { ... left, right, op ... }
505
+ case "item":
506
+ return node.name; // Should not happen in index expression usually, unless variable length
507
+ case "number":
508
+ return String(node.value);
509
+ case "binop": {
510
+ const bin = node;
511
+ return `${this.stringifyNode(bin.left)} ${bin.op} ${this.stringifyNode(bin.right)}`;
512
+ }
513
+ default:
514
+ // Check if it has 'name' (ItemNode acting as variable reference)
515
+ if ("name" in node)
516
+ return node.name;
517
+ // Check if it has 'value' (Token-like)
518
+ if ("value" in node)
519
+ return String(node.value);
520
+ return "";
521
+ }
522
+ }
523
+ }
524
+ //# sourceMappingURL=universal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"universal.js","sourceRoot":"","sources":["../../src/generator/universal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { FormatNode, ASTNode, VarType } from "../analyzer/types.js";
2
+ export interface VariableInfo {
3
+ name: string;
4
+ type: VarType;
5
+ dims: number;
6
+ indices: ASTNode[];
7
+ }
8
+ export declare class VariableExtractor {
9
+ private vars;
10
+ private collapsedVars;
11
+ setCollapsedVars(collapsedVars: Set<string>): void;
12
+ extract(node: FormatNode): void;
13
+ private visit;
14
+ getVariables(types: Record<string, VarType>): VariableInfo[];
15
+ }
16
+ //# sourceMappingURL=variable-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variable-extractor.d.ts","sourceRoot":"","sources":["../../src/generator/variable-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,OAAO,EAGP,OAAO,EACR,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,EAAE,CAAC;CACpB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,IAAI,CAGR;IACJ,OAAO,CAAC,aAAa,CAAqB;IAE1C,gBAAgB,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC;IAI3C,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAI/B,OAAO,CAAC,KAAK;IAyDb,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,EAAE;CAmC7D"}