cobolx-2 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (284) hide show
  1. package/.github/pull_request_template.md +9 -0
  2. package/.github/workflows/ci.yml +18 -0
  3. package/.vscode/launch.json +19 -0
  4. package/.vscode/tasks.json +14 -0
  5. package/CHANGELOG.md +16 -0
  6. package/CONTRIBUTING.md +23 -0
  7. package/CargoX.lock +2 -0
  8. package/LICENSE +21 -0
  9. package/README.md +164 -0
  10. package/api-demo/CargoX.lock +1 -0
  11. package/api-demo/README.md +3 -0
  12. package/api-demo/benchmarks/arith.cbx +6 -0
  13. package/api-demo/cobolx.toml +6 -0
  14. package/api-demo/docs-output/index.html +1 -0
  15. package/api-demo/generated/LEGACYDEMO.cbx +5 -0
  16. package/api-demo/generated/client-types.ts +2 -0
  17. package/api-demo/generated/deploy.json +12 -0
  18. package/api-demo/generated/flowchart.mmd +4 -0
  19. package/api-demo/migrations/20260411215238_init.sql +1 -0
  20. package/api-demo/src/main.cbx +5 -0
  21. package/api-demo/tests/smoke.cbx +6 -0
  22. package/benchmarks/arithmetic.cbx +6 -0
  23. package/cargox/package.json +11 -0
  24. package/cargox/src/index.d.ts +4 -0
  25. package/cargox/src/index.js +5 -0
  26. package/cargox/src/index.js.map +1 -0
  27. package/cargox/src/index.ts +4 -0
  28. package/cargox/src/lockfile/index.d.ts +1 -0
  29. package/cargox/src/lockfile/index.js +9 -0
  30. package/cargox/src/lockfile/index.js.map +1 -0
  31. package/cargox/src/lockfile/index.ts +9 -0
  32. package/cargox/src/manifest.d.ts +10 -0
  33. package/cargox/src/manifest.js +49 -0
  34. package/cargox/src/manifest.js.map +1 -0
  35. package/cargox/src/manifest.ts +58 -0
  36. package/cargox/src/registry/index.d.ts +4 -0
  37. package/cargox/src/registry/index.js +13 -0
  38. package/cargox/src/registry/index.js.map +1 -0
  39. package/cargox/src/registry/index.ts +13 -0
  40. package/cargox/src/resolver/index.d.ts +5 -0
  41. package/cargox/src/resolver/index.js +4 -0
  42. package/cargox/src/resolver/index.js.map +1 -0
  43. package/cargox/src/resolver/index.ts +8 -0
  44. package/cargox/tsconfig.json +7 -0
  45. package/cli/cobolx-cli/package.json +23 -0
  46. package/cli/cobolx-cli/src/commands/add.ts +18 -0
  47. package/cli/cobolx-cli/src/commands/bench.ts +47 -0
  48. package/cli/cobolx-cli/src/commands/build.ts +74 -0
  49. package/cli/cobolx-cli/src/commands/check.ts +24 -0
  50. package/cli/cobolx-cli/src/commands/debug.ts +15 -0
  51. package/cli/cobolx-cli/src/commands/debug_rewind.ts +16 -0
  52. package/cli/cobolx-cli/src/commands/deploy.ts +18 -0
  53. package/cli/cobolx-cli/src/commands/dev.ts +24 -0
  54. package/cli/cobolx-cli/src/commands/doc.ts +19 -0
  55. package/cli/cobolx-cli/src/commands/fmt.ts +14 -0
  56. package/cli/cobolx-cli/src/commands/fuzz.ts +24 -0
  57. package/cli/cobolx-cli/src/commands/generate.ts +38 -0
  58. package/cli/cobolx-cli/src/commands/install.ts +25 -0
  59. package/cli/cobolx-cli/src/commands/legacy.ts +17 -0
  60. package/cli/cobolx-cli/src/commands/lint.ts +17 -0
  61. package/cli/cobolx-cli/src/commands/migrate.ts +27 -0
  62. package/cli/cobolx-cli/src/commands/new.ts +20 -0
  63. package/cli/cobolx-cli/src/commands/profile.ts +8 -0
  64. package/cli/cobolx-cli/src/commands/publish.ts +16 -0
  65. package/cli/cobolx-cli/src/commands/repl.ts +30 -0
  66. package/cli/cobolx-cli/src/commands/run.ts +22 -0
  67. package/cli/cobolx-cli/src/commands/task.ts +27 -0
  68. package/cli/cobolx-cli/src/commands/test.ts +44 -0
  69. package/cli/cobolx-cli/src/commands/update.ts +30 -0
  70. package/cli/cobolx-cli/src/commands/visualize.ts +25 -0
  71. package/cli/cobolx-cli/src/index.ts +101 -0
  72. package/cli/cobolx-cli/src/project.ts +74 -0
  73. package/cli/cobolx-cli/tsconfig.json +7 -0
  74. package/cobolx.toml +7 -0
  75. package/compiler/package.json +14 -0
  76. package/compiler/src/ast/types.d.ts +87 -0
  77. package/compiler/src/ast/types.js +2 -0
  78. package/compiler/src/ast/types.js.map +1 -0
  79. package/compiler/src/ast/types.ts +329 -0
  80. package/compiler/src/backend/custom.d.ts +8 -0
  81. package/compiler/src/backend/custom.js +12 -0
  82. package/compiler/src/backend/custom.js.map +1 -0
  83. package/compiler/src/backend/custom.ts +21 -0
  84. package/compiler/src/borrow_checker/checker.d.ts +3 -0
  85. package/compiler/src/borrow_checker/checker.js +82 -0
  86. package/compiler/src/borrow_checker/checker.js.map +1 -0
  87. package/compiler/src/borrow_checker/checker.ts +100 -0
  88. package/compiler/src/codegen/javascript.d.ts +2 -0
  89. package/compiler/src/codegen/javascript.js +89 -0
  90. package/compiler/src/codegen/javascript.js.map +1 -0
  91. package/compiler/src/codegen/javascript.ts +175 -0
  92. package/compiler/src/const_eval/evaluator.ts +58 -0
  93. package/compiler/src/diagnostics.d.ts +11 -0
  94. package/compiler/src/diagnostics.js +14 -0
  95. package/compiler/src/diagnostics.js.map +1 -0
  96. package/compiler/src/diagnostics.ts +20 -0
  97. package/compiler/src/hir/lower.d.ts +7 -0
  98. package/compiler/src/hir/lower.js +44 -0
  99. package/compiler/src/hir/lower.js.map +1 -0
  100. package/compiler/src/hir/lower.ts +60 -0
  101. package/compiler/src/hir/types.d.ts +21 -0
  102. package/compiler/src/hir/types.js +2 -0
  103. package/compiler/src/hir/types.js.map +1 -0
  104. package/compiler/src/hir/types.ts +26 -0
  105. package/compiler/src/index.d.ts +22 -0
  106. package/compiler/src/index.js +84 -0
  107. package/compiler/src/index.js.map +1 -0
  108. package/compiler/src/index.ts +122 -0
  109. package/compiler/src/lexer/lexer.d.ts +21 -0
  110. package/compiler/src/lexer/lexer.js +207 -0
  111. package/compiler/src/lexer/lexer.js.map +1 -0
  112. package/compiler/src/lexer/lexer.ts +274 -0
  113. package/compiler/src/lexer/tokens.d.ts +8 -0
  114. package/compiler/src/lexer/tokens.js +18 -0
  115. package/compiler/src/lexer/tokens.js.map +1 -0
  116. package/compiler/src/lexer/tokens.ts +126 -0
  117. package/compiler/src/macros/expand.ts +75 -0
  118. package/compiler/src/main.ts +4 -0
  119. package/compiler/src/mir/lower.d.ts +3 -0
  120. package/compiler/src/mir/lower.js +10 -0
  121. package/compiler/src/mir/lower.js.map +1 -0
  122. package/compiler/src/mir/lower.ts +12 -0
  123. package/compiler/src/mir/types.d.ts +13 -0
  124. package/compiler/src/mir/types.js +2 -0
  125. package/compiler/src/mir/types.js.map +1 -0
  126. package/compiler/src/mir/types.ts +16 -0
  127. package/compiler/src/optimizer/constantFold.d.ts +2 -0
  128. package/compiler/src/optimizer/constantFold.js +61 -0
  129. package/compiler/src/optimizer/constantFold.js.map +1 -0
  130. package/compiler/src/optimizer/constantFold.ts +109 -0
  131. package/compiler/src/parser/parser.d.ts +33 -0
  132. package/compiler/src/parser/parser.js +323 -0
  133. package/compiler/src/parser/parser.js.map +1 -0
  134. package/compiler/src/parser/parser.ts +710 -0
  135. package/compiler/src/plugins/api.ts +8 -0
  136. package/compiler/src/plugins/loader.ts +21 -0
  137. package/compiler/src/semantic/analyzer.d.ts +12 -0
  138. package/compiler/src/semantic/analyzer.js +144 -0
  139. package/compiler/src/semantic/analyzer.js.map +1 -0
  140. package/compiler/src/semantic/analyzer.ts +277 -0
  141. package/compiler/src/type_system/checker.d.ts +7 -0
  142. package/compiler/src/type_system/checker.js +84 -0
  143. package/compiler/src/type_system/checker.js.map +1 -0
  144. package/compiler/src/type_system/checker.ts +108 -0
  145. package/compiler/tsconfig.json +7 -0
  146. package/debugger/package.json +11 -0
  147. package/debugger/src/index.d.ts +1 -0
  148. package/debugger/src/index.js +9 -0
  149. package/debugger/src/index.js.map +1 -0
  150. package/debugger/src/index.ts +9 -0
  151. package/debugger/tsconfig.json +7 -0
  152. package/docs/CHANGELOG.md +11 -0
  153. package/docs/CONTRIBUTING.md +15 -0
  154. package/docs/LICENSE +21 -0
  155. package/docs/architecture.md +29 -0
  156. package/docs/cli.md +58 -0
  157. package/docs/language-spec.md +49 -0
  158. package/docs/packages.md +19 -0
  159. package/docs/platform-systems.md +31 -0
  160. package/docs/release-validation.md +22 -0
  161. package/docs/runtime.md +10 -0
  162. package/docs/tooling.md +17 -0
  163. package/docs/vscode-extension.md +40 -0
  164. package/enterprise-demo/CargoX.lock +2 -0
  165. package/enterprise-demo/README.md +3 -0
  166. package/enterprise-demo/benchmarks/arith.cbx +6 -0
  167. package/enterprise-demo/cobolx.toml +7 -0
  168. package/enterprise-demo/src/main.cbx +5 -0
  169. package/enterprise-demo/tests/smoke.cbx +6 -0
  170. package/examples/README.md +20 -0
  171. package/examples/actors-and-flags.md +8 -0
  172. package/examples/api-server/README.md +9 -0
  173. package/examples/api-server/cobolx.toml +6 -0
  174. package/examples/api-server/src/main.cbx +8 -0
  175. package/examples/debug-replay.md +7 -0
  176. package/examples/debugging-demo/README.md +3 -0
  177. package/examples/debugging-demo/cobolx.toml +6 -0
  178. package/examples/debugging-demo/src/main.cbx +7 -0
  179. package/examples/distributed-service.md +12 -0
  180. package/examples/distributed-system/README.md +3 -0
  181. package/examples/distributed-system/cobolx.toml +6 -0
  182. package/examples/distributed-system/generated/deploy.json +12 -0
  183. package/examples/distributed-system/src/main.cbx +6 -0
  184. package/examples/event-driven.md +5 -0
  185. package/examples/event-system/README.md +3 -0
  186. package/examples/event-system/cobolx.toml +6 -0
  187. package/examples/event-system/src/main.cbx +11 -0
  188. package/examples/functions.cbx +10 -0
  189. package/examples/functions.mjs +12 -0
  190. package/examples/hello.cbx +5 -0
  191. package/examples/hello.mjs +7 -0
  192. package/examples/legacy-sample.cob +5 -0
  193. package/examples/parallel-processing/README.md +3 -0
  194. package/examples/parallel-processing/cobolx.toml +6 -0
  195. package/examples/parallel-processing/src/main.cbx +6 -0
  196. package/examples/parallel-processing.md +8 -0
  197. package/examples/platform-features.cbx +32 -0
  198. package/examples/platform-features.mjs +35 -0
  199. package/examples/service.cbx +10 -0
  200. package/examples/workflow-engine/README.md +3 -0
  201. package/examples/workflow-engine/cobolx.toml +6 -0
  202. package/examples/workflow-engine/generated/flowchart.mmd +8 -0
  203. package/examples/workflow-engine/src/main.cbx +13 -0
  204. package/examples/workflow-engine.md +5 -0
  205. package/formatter/package.json +14 -0
  206. package/formatter/src/index.d.ts +1 -0
  207. package/formatter/src/index.js +59 -0
  208. package/formatter/src/index.js.map +1 -0
  209. package/formatter/src/index.ts +103 -0
  210. package/formatter/tsconfig.json +7 -0
  211. package/generated/LEGACYDEMO.cbx +5 -0
  212. package/install.ps1 +4 -0
  213. package/install.sh +5 -0
  214. package/linter/package.json +14 -0
  215. package/linter/src/index.d.ts +2 -0
  216. package/linter/src/index.js +18 -0
  217. package/linter/src/index.js.map +1 -0
  218. package/linter/src/index.ts +19 -0
  219. package/linter/tsconfig.json +7 -0
  220. package/lsp/server/package.json +16 -0
  221. package/lsp/server/src/index.ts +168 -0
  222. package/lsp/server/tsconfig.json +7 -0
  223. package/package.json +30 -0
  224. package/profiler/package.json +11 -0
  225. package/profiler/src/index.d.ts +5 -0
  226. package/profiler/src/index.js +11 -0
  227. package/profiler/src/index.js.map +1 -0
  228. package/profiler/src/index.ts +11 -0
  229. package/profiler/tsconfig.json +7 -0
  230. package/release.json +10 -0
  231. package/runtime/package.json +14 -0
  232. package/runtime/src/actors/index.ts +27 -0
  233. package/runtime/src/async/futures.ts +11 -0
  234. package/runtime/src/code_as_data/index.ts +5 -0
  235. package/runtime/src/config/index.ts +17 -0
  236. package/runtime/src/distributed/index.ts +13 -0
  237. package/runtime/src/events/index.ts +21 -0
  238. package/runtime/src/feature_flags/index.ts +9 -0
  239. package/runtime/src/gc_or_arc/index.ts +1 -0
  240. package/runtime/src/healing/index.ts +26 -0
  241. package/runtime/src/index.ts +20 -0
  242. package/runtime/src/intents/index.ts +9 -0
  243. package/runtime/src/iterators/index.ts +23 -0
  244. package/runtime/src/memory/arc.ts +22 -0
  245. package/runtime/src/observability/index.ts +23 -0
  246. package/runtime/src/repl/context.ts +7 -0
  247. package/runtime/src/scheduler/taskScheduler.ts +11 -0
  248. package/runtime/src/security/capabilities.ts +15 -0
  249. package/runtime/src/security/secrets.ts +13 -0
  250. package/runtime/src/state/versioned.ts +31 -0
  251. package/runtime/src/std_hooks/audit.ts +23 -0
  252. package/runtime/src/time_travel/index.ts +54 -0
  253. package/runtime/src/workflows/index.ts +35 -0
  254. package/runtime/tsconfig.json +7 -0
  255. package/sample-payroll/README.md +3 -0
  256. package/sample-payroll/cobolx.toml +3 -0
  257. package/sample-payroll/src/main.cbx +5 -0
  258. package/stdlib/business/index.js +15 -0
  259. package/stdlib/core/README.md +8 -0
  260. package/stdlib/core/runtime.js +191 -0
  261. package/stdlib/crypto/index.js +5 -0
  262. package/stdlib/datetime/index.js +3 -0
  263. package/stdlib/fs/index.js +9 -0
  264. package/stdlib/http/index.js +7 -0
  265. package/stdlib/io/index.js +1 -0
  266. package/stdlib/json/index.js +7 -0
  267. package/stdlib/net/index.js +4 -0
  268. package/tests/macros.cbx +10 -0
  269. package/tests/pattern_match.cbx +16 -0
  270. package/tests/smoke.cbx +7 -0
  271. package/tests/validate-release.mjs +54 -0
  272. package/tsconfig.base.json +24 -0
  273. package/vscode-extension/LICENSE +21 -0
  274. package/vscode-extension/README.md +47 -0
  275. package/vscode-extension/cobolx-1.2.0.vsix +0 -0
  276. package/vscode-extension/icon.png +0 -0
  277. package/vscode-extension/icon.svg +15 -0
  278. package/vscode-extension/language-configuration.json +17 -0
  279. package/vscode-extension/package.json +148 -0
  280. package/vscode-extension/snippets/cobolx.code-snippets +49 -0
  281. package/vscode-extension/src/extension.ts +283 -0
  282. package/vscode-extension/syntaxes/cobolx.tmLanguage.json +75 -0
  283. package/vscode-extension/tests/test.cbl +3 -0
  284. package/vscode-extension/tsconfig.json +7 -0
@@ -0,0 +1,109 @@
1
+ import type { ExpressionNode, StatementNode } from "../ast/types.js";
2
+ import type { MIRInstruction, MIRProgram } from "../mir/types.js";
3
+ import { CobolxError } from "../diagnostics.js";
4
+
5
+ function foldExpression(expression: ExpressionNode): ExpressionNode {
6
+ switch (expression.kind) {
7
+ case "BinaryExpression": {
8
+ const left = foldExpression(expression.left);
9
+ const right = foldExpression(expression.right);
10
+ if (left.kind === "NumberLiteral" && right.kind === "NumberLiteral") {
11
+ switch (expression.operator) {
12
+ case "+":
13
+ return { ...expression, kind: "NumberLiteral", value: left.value + right.value };
14
+ case "-":
15
+ return { ...expression, kind: "NumberLiteral", value: left.value - right.value };
16
+ case "*":
17
+ return { ...expression, kind: "NumberLiteral", value: left.value * right.value };
18
+ case "/":
19
+ if (right.value === 0) {
20
+ throw new CobolxError({
21
+ message: "Division by zero in constant expression",
22
+ range: expression.range ?? { start: { line: 1, column: 1 }, end: { line: 1, column: 1 } },
23
+ severity: "error",
24
+ });
25
+ }
26
+ return { ...expression, kind: "NumberLiteral", value: left.value / right.value };
27
+ case "%":
28
+ if (right.value === 0) {
29
+ throw new CobolxError({
30
+ message: "Modulo by zero in constant expression",
31
+ range: expression.range ?? { start: { line: 1, column: 1 }, end: { line: 1, column: 1 } },
32
+ severity: "error",
33
+ });
34
+ }
35
+ return { ...expression, kind: "NumberLiteral", value: left.value % right.value };
36
+ }
37
+ }
38
+ return { ...expression, left, right };
39
+ }
40
+ case "UnaryExpression":
41
+ return { ...expression, operand: foldExpression(expression.operand) };
42
+ case "TryExpression":
43
+ return { ...expression, expression: foldExpression(expression.expression) };
44
+ case "CallExpression":
45
+ return { ...expression, callee: foldExpression(expression.callee), args: expression.args.map(foldExpression) };
46
+ case "MacroInvocation":
47
+ return { ...expression, args: expression.args.map(foldExpression) };
48
+ case "MemberExpression":
49
+ return { ...expression, object: foldExpression(expression.object) };
50
+ case "EnumConstructorExpression":
51
+ return { ...expression, fields: expression.fields.map(foldExpression) };
52
+ case "ArrayLiteral":
53
+ return { ...expression, items: expression.items.map(foldExpression) };
54
+ default:
55
+ return expression;
56
+ }
57
+ }
58
+
59
+ function foldStatement(statement: StatementNode): StatementNode {
60
+ switch (statement.kind) {
61
+ case "LetStatement":
62
+ return { ...statement, expression: foldExpression(statement.expression) };
63
+ case "SetStatement":
64
+ return { ...statement, expression: foldExpression(statement.expression) };
65
+ case "DisplayStatement":
66
+ case "ReturnStatement":
67
+ case "ExpressionStatement":
68
+ case "AssertStatement":
69
+ case "SpawnStatement":
70
+ return { ...statement, expression: foldExpression(statement.expression) };
71
+ case "InputStatement":
72
+ return { ...statement, prompt: statement.prompt ? foldExpression(statement.prompt) : undefined };
73
+ case "IfStatement":
74
+ return {
75
+ ...statement,
76
+ condition: foldExpression(statement.condition),
77
+ thenBranch: statement.thenBranch.map(foldStatement),
78
+ elseBranch: statement.elseBranch.map(foldStatement)
79
+ };
80
+ case "MatchStatement":
81
+ return {
82
+ ...statement,
83
+ expression: foldExpression(statement.expression),
84
+ arms: statement.arms.map((arm) => ({ ...arm, body: arm.body.map(foldStatement) }))
85
+ };
86
+ case "UnsafeBlock":
87
+ case "BlockStatement":
88
+ return { ...statement, body: statement.body.map(foldStatement) };
89
+ default:
90
+ return statement;
91
+ }
92
+ }
93
+
94
+ function foldInstruction(instruction: MIRInstruction): MIRInstruction {
95
+ return {
96
+ ...instruction,
97
+ statement: foldStatement(instruction.statement)
98
+ };
99
+ }
100
+
101
+ export function optimizeMIR(mir: MIRProgram): MIRProgram {
102
+ return {
103
+ functions: mir.functions.map((fn) => ({
104
+ ...fn,
105
+ instructions: fn.instructions.map(foldInstruction)
106
+ })),
107
+ body: mir.body.map(foldInstruction)
108
+ };
109
+ }
@@ -0,0 +1,33 @@
1
+ import type { ProgramNode } from "../ast/types.js";
2
+ import type { Token } from "../lexer/tokens.js";
3
+ export declare class Parser {
4
+ private readonly tokens;
5
+ private index;
6
+ constructor(tokens: Token[]);
7
+ parseProgram(): ProgramNode;
8
+ private parseFunction;
9
+ private parseStatementsUntil;
10
+ private parseStatement;
11
+ private parseSetStatement;
12
+ private parseDisplayStatement;
13
+ private parseInputStatement;
14
+ private parseIfStatement;
15
+ private parseReturnStatement;
16
+ private parseExpression;
17
+ private parseComparison;
18
+ private parseTerm;
19
+ private parseFactor;
20
+ private parseUnary;
21
+ private parseCall;
22
+ private parsePrimary;
23
+ private binaryNode;
24
+ private match;
25
+ private consume;
26
+ private skipNewlines;
27
+ private check;
28
+ private checkAny;
29
+ private advance;
30
+ private peek;
31
+ private previous;
32
+ private mergeRanges;
33
+ }
@@ -0,0 +1,323 @@
1
+ import { CobolxError } from "../diagnostics.js";
2
+ export class Parser {
3
+ tokens;
4
+ index = 0;
5
+ constructor(tokens) {
6
+ this.tokens = tokens;
7
+ }
8
+ parseProgram() {
9
+ this.skipNewlines();
10
+ const programToken = this.consume("PROGRAM", "Expected PROGRAM declaration");
11
+ const name = this.consume("IDENTIFIER", "Expected program name");
12
+ this.skipNewlines();
13
+ const functions = [];
14
+ while (this.match("FUNCTION")) {
15
+ functions.push(this.parseFunction());
16
+ this.skipNewlines();
17
+ }
18
+ this.consume("BEGIN", "Expected BEGIN");
19
+ this.skipNewlines();
20
+ const body = this.parseStatementsUntil(["END"]);
21
+ const endToken = this.consume("END", "Expected END");
22
+ this.skipNewlines();
23
+ this.consume("EOF", "Expected end of file");
24
+ return {
25
+ kind: "Program",
26
+ name: name.lexeme,
27
+ functions,
28
+ body,
29
+ range: this.mergeRanges(programToken.range, endToken.range)
30
+ };
31
+ }
32
+ parseFunction() {
33
+ const functionToken = this.previous();
34
+ const name = this.consume("IDENTIFIER", "Expected function name");
35
+ this.consume("LPAREN", "Expected ( after function name");
36
+ const params = [];
37
+ if (!this.check("RPAREN")) {
38
+ do {
39
+ params.push(this.consume("IDENTIFIER", "Expected parameter name").lexeme);
40
+ } while (this.match("COMMA"));
41
+ }
42
+ this.consume("RPAREN", "Expected ) after parameters");
43
+ this.skipNewlines();
44
+ this.consume("BEGIN", "Expected BEGIN after function signature");
45
+ this.skipNewlines();
46
+ const body = this.parseStatementsUntil(["END-FUNCTION"]);
47
+ const endToken = this.consume("END-FUNCTION", "Expected END-FUNCTION");
48
+ return {
49
+ kind: "FunctionDeclaration",
50
+ name: name.lexeme,
51
+ params,
52
+ body,
53
+ range: this.mergeRanges(functionToken.range, endToken.range)
54
+ };
55
+ }
56
+ parseStatementsUntil(stopTokens) {
57
+ const statements = [];
58
+ while (!this.checkAny(stopTokens) && !this.check("EOF")) {
59
+ this.skipNewlines();
60
+ if (this.checkAny(stopTokens) || this.check("EOF")) {
61
+ break;
62
+ }
63
+ statements.push(this.parseStatement());
64
+ this.skipNewlines();
65
+ }
66
+ return statements;
67
+ }
68
+ parseStatement() {
69
+ if (this.match("SET")) {
70
+ return this.parseSetStatement();
71
+ }
72
+ if (this.match("DISPLAY")) {
73
+ return this.parseDisplayStatement();
74
+ }
75
+ if (this.match("INPUT")) {
76
+ return this.parseInputStatement();
77
+ }
78
+ if (this.match("IF")) {
79
+ return this.parseIfStatement();
80
+ }
81
+ if (this.match("RETURN")) {
82
+ return this.parseReturnStatement();
83
+ }
84
+ const expression = this.parseExpression();
85
+ return {
86
+ kind: "ExpressionStatement",
87
+ expression,
88
+ range: expression.range
89
+ };
90
+ }
91
+ parseSetStatement() {
92
+ const start = this.previous().range;
93
+ const name = this.consume("IDENTIFIER", "Expected variable name after SET");
94
+ this.consume("ASSIGN", "Expected = in SET statement");
95
+ const expression = this.parseExpression();
96
+ return {
97
+ kind: "SetStatement",
98
+ name: name.lexeme,
99
+ expression,
100
+ range: this.mergeRanges(start, expression.range)
101
+ };
102
+ }
103
+ parseDisplayStatement() {
104
+ const start = this.previous().range;
105
+ const expression = this.parseExpression();
106
+ return {
107
+ kind: "DisplayStatement",
108
+ expression,
109
+ range: this.mergeRanges(start, expression.range)
110
+ };
111
+ }
112
+ parseInputStatement() {
113
+ const start = this.previous().range;
114
+ const name = this.consume("IDENTIFIER", "Expected variable name after INPUT");
115
+ let prompt;
116
+ if (!this.check("NEWLINE") && !this.check("EOF")) {
117
+ prompt = this.parseExpression();
118
+ }
119
+ return {
120
+ kind: "InputStatement",
121
+ name: name.lexeme,
122
+ prompt,
123
+ range: this.mergeRanges(start, prompt?.range ?? name.range)
124
+ };
125
+ }
126
+ parseIfStatement() {
127
+ const start = this.previous().range;
128
+ const condition = this.parseExpression();
129
+ this.consume("THEN", "Expected THEN after IF condition");
130
+ this.skipNewlines();
131
+ const thenBranch = this.parseStatementsUntil(["ELSE", "END-IF"]);
132
+ let elseBranch = [];
133
+ if (this.match("ELSE")) {
134
+ this.skipNewlines();
135
+ elseBranch = this.parseStatementsUntil(["END-IF"]);
136
+ }
137
+ const endToken = this.consume("END-IF", "Expected END-IF");
138
+ return {
139
+ kind: "IfStatement",
140
+ condition,
141
+ thenBranch,
142
+ elseBranch,
143
+ range: this.mergeRanges(start, endToken.range)
144
+ };
145
+ }
146
+ parseReturnStatement() {
147
+ const start = this.previous().range;
148
+ const expression = this.parseExpression();
149
+ return {
150
+ kind: "ReturnStatement",
151
+ expression,
152
+ range: this.mergeRanges(start, expression.range)
153
+ };
154
+ }
155
+ parseExpression() {
156
+ return this.parseComparison();
157
+ }
158
+ parseComparison() {
159
+ let expression = this.parseTerm();
160
+ while (this.match("LESS", "LESS_EQUAL", "GREATER", "GREATER_EQUAL", "EQUAL", "NOT_EQUAL", "ASSIGN")) {
161
+ const operator = this.previous();
162
+ const mappedOperator = operator.type === "ASSIGN" ? "==" : operator.lexeme;
163
+ const right = this.parseTerm();
164
+ expression = this.binaryNode(expression, mappedOperator, right);
165
+ }
166
+ return expression;
167
+ }
168
+ parseTerm() {
169
+ let expression = this.parseFactor();
170
+ while (this.match("PLUS", "MINUS")) {
171
+ const operator = this.previous();
172
+ const right = this.parseFactor();
173
+ expression = this.binaryNode(expression, operator.lexeme, right);
174
+ }
175
+ return expression;
176
+ }
177
+ parseFactor() {
178
+ let expression = this.parseUnary();
179
+ while (this.match("STAR", "SLASH")) {
180
+ const operator = this.previous();
181
+ const right = this.parseUnary();
182
+ expression = this.binaryNode(expression, operator.lexeme, right);
183
+ }
184
+ return expression;
185
+ }
186
+ parseUnary() {
187
+ if (this.match("MINUS")) {
188
+ const operator = this.previous();
189
+ const operand = this.parseUnary();
190
+ return {
191
+ kind: "UnaryExpression",
192
+ operator: operator.lexeme,
193
+ operand,
194
+ range: this.mergeRanges(operator.range, operand.range)
195
+ };
196
+ }
197
+ return this.parseCall();
198
+ }
199
+ parseCall() {
200
+ let expression = this.parsePrimary();
201
+ while (this.match("LPAREN")) {
202
+ if (expression.kind !== "Identifier") {
203
+ throw new CobolxError({
204
+ message: "Only identifiers can be called as functions",
205
+ range: expression.range,
206
+ severity: "error"
207
+ });
208
+ }
209
+ const args = [];
210
+ if (!this.check("RPAREN")) {
211
+ do {
212
+ args.push(this.parseExpression());
213
+ } while (this.match("COMMA"));
214
+ }
215
+ const close = this.consume("RPAREN", "Expected ) after arguments");
216
+ expression = {
217
+ kind: "CallExpression",
218
+ callee: expression.name,
219
+ args,
220
+ range: this.mergeRanges(expression.range, close.range)
221
+ };
222
+ }
223
+ return expression;
224
+ }
225
+ parsePrimary() {
226
+ if (this.match("NUMBER")) {
227
+ return {
228
+ kind: "NumberLiteral",
229
+ value: Number(this.previous().lexeme),
230
+ range: this.previous().range
231
+ };
232
+ }
233
+ if (this.match("STRING")) {
234
+ return {
235
+ kind: "StringLiteral",
236
+ value: this.previous().lexeme,
237
+ range: this.previous().range
238
+ };
239
+ }
240
+ if (this.match("TRUE", "FALSE")) {
241
+ return {
242
+ kind: "BooleanLiteral",
243
+ value: this.previous().type === "TRUE",
244
+ range: this.previous().range
245
+ };
246
+ }
247
+ if (this.match("IDENTIFIER")) {
248
+ return {
249
+ kind: "Identifier",
250
+ name: this.previous().lexeme,
251
+ range: this.previous().range
252
+ };
253
+ }
254
+ if (this.match("LPAREN")) {
255
+ const expression = this.parseExpression();
256
+ this.consume("RPAREN", "Expected ) after expression");
257
+ return expression;
258
+ }
259
+ throw new CobolxError({
260
+ message: `Unexpected token ${this.peek().type}`,
261
+ range: this.peek().range,
262
+ severity: "error"
263
+ });
264
+ }
265
+ binaryNode(left, operator, right) {
266
+ return {
267
+ kind: "BinaryExpression",
268
+ operator,
269
+ left,
270
+ right,
271
+ range: this.mergeRanges(left.range, right.range)
272
+ };
273
+ }
274
+ match(...types) {
275
+ for (const type of types) {
276
+ if (this.check(type)) {
277
+ this.advance();
278
+ return true;
279
+ }
280
+ }
281
+ return false;
282
+ }
283
+ consume(type, message) {
284
+ if (this.check(type)) {
285
+ return this.advance();
286
+ }
287
+ throw new CobolxError({
288
+ message,
289
+ range: this.peek().range,
290
+ severity: "error"
291
+ });
292
+ }
293
+ skipNewlines() {
294
+ while (this.match("NEWLINE")) {
295
+ continue;
296
+ }
297
+ }
298
+ check(type) {
299
+ return this.peek().type === type;
300
+ }
301
+ checkAny(types) {
302
+ return types.some((type) => this.check(type));
303
+ }
304
+ advance() {
305
+ if (this.index < this.tokens.length) {
306
+ this.index += 1;
307
+ }
308
+ return this.previous();
309
+ }
310
+ peek() {
311
+ return this.tokens[this.index];
312
+ }
313
+ previous() {
314
+ return this.tokens[this.index - 1];
315
+ }
316
+ mergeRanges(start, end) {
317
+ return {
318
+ start: start.start,
319
+ end: end.end
320
+ };
321
+ }
322
+ }
323
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["parser.ts"],"names":[],"mappings":"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"}