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,44 @@
1
+ import { inferProgramTypes } from "../type_system/checker.js";
2
+ function collectMutatedParams(params, statements) {
3
+ const mutated = new Set();
4
+ for (const statement of statements) {
5
+ switch (statement.kind) {
6
+ case "SetStatement":
7
+ case "InputStatement":
8
+ if (params.includes(statement.name)) {
9
+ mutated.add(statement.name);
10
+ }
11
+ break;
12
+ case "IfStatement":
13
+ for (const name of collectMutatedParams(params, statement.thenBranch)) {
14
+ mutated.add(name);
15
+ }
16
+ for (const name of collectMutatedParams(params, statement.elseBranch)) {
17
+ mutated.add(name);
18
+ }
19
+ break;
20
+ }
21
+ }
22
+ return [...mutated];
23
+ }
24
+ function lowerFunction(program) {
25
+ return program.functions.map((fn) => ({
26
+ name: fn.name,
27
+ params: [...fn.params],
28
+ mutatedParams: collectMutatedParams(fn.params, fn.body),
29
+ body: fn.body.map((statement) => ({ statement }))
30
+ }));
31
+ }
32
+ export function lowerToHIR(program) {
33
+ const typeInfo = inferProgramTypes(program);
34
+ return {
35
+ diagnostics: typeInfo.diagnostics,
36
+ hir: {
37
+ program,
38
+ functions: lowerFunction(program),
39
+ body: program.body.map((statement) => ({ statement })),
40
+ symbolTypes: typeInfo.symbolTypes
41
+ }
42
+ };
43
+ }
44
+ //# sourceMappingURL=lower.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lower.js","sourceRoot":"","sources":["lower.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,SAAS,oBAAoB,CAAC,MAAgB,EAAE,UAA2B;IACzE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;YACvB,KAAK,cAAc,CAAC;YACpB,KAAK,gBAAgB;gBACnB,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC9B,CAAC;gBACD,MAAM;YACR,KAAK,aAAa;gBAChB,KAAK,MAAM,IAAI,IAAI,oBAAoB,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;oBACtE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;gBACD,KAAK,MAAM,IAAI,IAAI,oBAAoB,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;oBACtE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;gBACD,MAAM;QACV,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,aAAa,CAAC,OAAoB;IACzC,OAAO,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACpC,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;QACtB,aAAa,EAAE,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC;QACvD,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;KAClD,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAoB;IAC7C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO;QACL,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,GAAG,EAAE;YACH,OAAO;YACP,SAAS,EAAE,aAAa,CAAC,OAAO,CAAC;YACjC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YACtD,WAAW,EAAE,QAAQ,CAAC,WAAW;SAClC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,60 @@
1
+ import type { ProgramNode, StatementNode } from "../ast/types.js";
2
+ import type { Diagnostic } from "../diagnostics.js";
3
+ import type { HIRFunction, HIRProgram } from "./types.js";
4
+ import { inferProgramTypes } from "../type_system/checker.js";
5
+
6
+ function collectMutatedParams(params: string[], statements: StatementNode[]): string[] {
7
+ const mutated = new Set<string>();
8
+ for (const statement of statements) {
9
+ switch (statement.kind) {
10
+ case "LetStatement":
11
+ break;
12
+ case "SetStatement":
13
+ case "InputStatement":
14
+ if (params.includes(statement.name)) {
15
+ mutated.add(statement.name);
16
+ }
17
+ break;
18
+ case "IfStatement":
19
+ for (const name of collectMutatedParams(params, statement.thenBranch)) {
20
+ mutated.add(name);
21
+ }
22
+ for (const name of collectMutatedParams(params, statement.elseBranch)) {
23
+ mutated.add(name);
24
+ }
25
+ break;
26
+ case "MatchStatement":
27
+ for (const arm of statement.arms) {
28
+ for (const name of collectMutatedParams(params, arm.body)) mutated.add(name);
29
+ }
30
+ break;
31
+ case "UnsafeBlock":
32
+ case "BlockStatement":
33
+ for (const name of collectMutatedParams(params, statement.body)) mutated.add(name);
34
+ break;
35
+ }
36
+ }
37
+ return [...mutated];
38
+ }
39
+
40
+ function lowerFunction(program: ProgramNode): HIRFunction[] {
41
+ return program.functions.map((fn) => ({
42
+ name: fn.signature.name,
43
+ params: fn.signature.params.map((param) => param.name),
44
+ mutatedParams: collectMutatedParams(fn.signature.params.map((param) => param.name), fn.body),
45
+ body: fn.body.map((statement) => ({ statement }))
46
+ }));
47
+ }
48
+
49
+ export function lowerToHIR(program: ProgramNode): { hir: HIRProgram; diagnostics: Diagnostic[] } {
50
+ const typeInfo = inferProgramTypes(program);
51
+ return {
52
+ diagnostics: typeInfo.diagnostics,
53
+ hir: {
54
+ program,
55
+ functions: lowerFunction(program),
56
+ body: program.body.map((statement) => ({ statement })),
57
+ symbolTypes: typeInfo.symbolTypes
58
+ }
59
+ };
60
+ }
@@ -0,0 +1,21 @@
1
+ import type { ExpressionNode, ProgramNode, StatementNode } from "../ast/types.js";
2
+ export type CobolxType = "number" | "string" | "boolean" | "unknown" | "void";
3
+ export interface HIRExpression {
4
+ expression: ExpressionNode;
5
+ inferredType: CobolxType;
6
+ }
7
+ export interface HIRStatement {
8
+ statement: StatementNode;
9
+ }
10
+ export interface HIRFunction {
11
+ name: string;
12
+ params: string[];
13
+ mutatedParams: string[];
14
+ body: HIRStatement[];
15
+ }
16
+ export interface HIRProgram {
17
+ program: ProgramNode;
18
+ functions: HIRFunction[];
19
+ body: HIRStatement[];
20
+ symbolTypes: Record<string, CobolxType>;
21
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import type { ExpressionNode, ProgramNode, StatementNode } from "../ast/types.js";
2
+
3
+ export type CobolxType = "number" | "string" | "boolean" | "unknown" | "void" | "enum" | "array";
4
+
5
+ export interface HIRExpression {
6
+ expression: ExpressionNode;
7
+ inferredType: CobolxType;
8
+ }
9
+
10
+ export interface HIRStatement {
11
+ statement: StatementNode;
12
+ }
13
+
14
+ export interface HIRFunction {
15
+ name: string;
16
+ params: string[];
17
+ mutatedParams: string[];
18
+ body: HIRStatement[];
19
+ }
20
+
21
+ export interface HIRProgram {
22
+ program: ProgramNode;
23
+ functions: HIRFunction[];
24
+ body: HIRStatement[];
25
+ symbolTypes: Record<string, CobolxType>;
26
+ }
@@ -0,0 +1,22 @@
1
+ import type { ProgramNode } from "./ast/types.js";
2
+ import type { Diagnostic } from "./diagnostics.js";
3
+ import type { HIRProgram } from "./hir/types.js";
4
+ import type { MIRProgram } from "./mir/types.js";
5
+ export interface CompileResult {
6
+ program: ProgramNode;
7
+ diagnostics: Diagnostic[];
8
+ output?: string;
9
+ hir?: HIRProgram;
10
+ mir?: MIRProgram;
11
+ }
12
+ export declare function parseSource(source: string): ProgramNode;
13
+ export declare function analyzeSource(source: string): CompileResult;
14
+ export declare function compileSource(source: string, outputFilePath: string, stdlibDir: string): CompileResult;
15
+ export declare function compileFile(inputPath: string, outputPath: string, stdlibDir: string): Diagnostic[];
16
+ export declare function checkFile(inputPath: string): Diagnostic[];
17
+ export declare function printDiagnostics(filePath: string, diagnostics: Diagnostic[]): void;
18
+ export declare function compilerStdlibDir(): string;
19
+ export declare function runCompilerCli(argv: string[]): number;
20
+ export { CobolxError, formatDiagnostic } from "./diagnostics.js";
21
+ export type { Diagnostic } from "./diagnostics.js";
22
+ export type { ExpressionNode, ProgramNode, StatementNode } from "./ast/types.js";
@@ -0,0 +1,84 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { CobolxError, formatDiagnostic } from "./diagnostics.js";
5
+ import { Lexer } from "./lexer/lexer.js";
6
+ import { Parser } from "./parser/parser.js";
7
+ import { emitCustomBackend } from "./backend/custom.js";
8
+ import { runBorrowChecker } from "./borrow_checker/checker.js";
9
+ import { lowerToHIR } from "./hir/lower.js";
10
+ import { SemanticAnalyzer } from "./semantic/analyzer.js";
11
+ import { lowerToMIR } from "./mir/lower.js";
12
+ import { optimizeMIR } from "./optimizer/constantFold.js";
13
+ export function parseSource(source) {
14
+ const lexer = new Lexer(source);
15
+ const tokens = lexer.tokenize();
16
+ const parser = new Parser(tokens);
17
+ return parser.parseProgram();
18
+ }
19
+ export function analyzeSource(source) {
20
+ const program = parseSource(source);
21
+ const semanticDiagnostics = new SemanticAnalyzer().analyze(program);
22
+ const hirResult = lowerToHIR(program);
23
+ const borrowDiagnostics = runBorrowChecker(hirResult.hir);
24
+ const diagnostics = [...semanticDiagnostics, ...hirResult.diagnostics, ...borrowDiagnostics];
25
+ const mir = optimizeMIR(lowerToMIR(hirResult.hir));
26
+ return { program, diagnostics, hir: hirResult.hir, mir };
27
+ }
28
+ export function compileSource(source, outputFilePath, stdlibDir) {
29
+ const analyzed = analyzeSource(source);
30
+ if (analyzed.diagnostics.some((diagnostic) => diagnostic.severity === "error")) {
31
+ return analyzed;
32
+ }
33
+ const backend = emitCustomBackend(analyzed.program, analyzed.mir, outputFilePath, stdlibDir);
34
+ return {
35
+ ...analyzed,
36
+ output: backend.code
37
+ };
38
+ }
39
+ export function compileFile(inputPath, outputPath, stdlibDir) {
40
+ const source = fs.readFileSync(inputPath, "utf8");
41
+ const result = compileSource(source, outputPath, stdlibDir);
42
+ if (result.diagnostics.length > 0 || !result.output) {
43
+ return result.diagnostics;
44
+ }
45
+ fs.mkdirSync(path.dirname(outputPath), { recursive: true });
46
+ fs.writeFileSync(outputPath, result.output, "utf8");
47
+ return [];
48
+ }
49
+ export function checkFile(inputPath) {
50
+ const source = fs.readFileSync(inputPath, "utf8");
51
+ return analyzeSource(source).diagnostics;
52
+ }
53
+ export function printDiagnostics(filePath, diagnostics) {
54
+ for (const diagnostic of diagnostics) {
55
+ console.error(formatDiagnostic(filePath, diagnostic));
56
+ }
57
+ }
58
+ export function compilerStdlibDir() {
59
+ return path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../..", "stdlib/core");
60
+ }
61
+ export function runCompilerCli(argv) {
62
+ const [inputPath, outputPath] = argv;
63
+ if (!inputPath || !outputPath) {
64
+ console.error("Usage: cobolxc <input.cbx> <output.js>");
65
+ return 1;
66
+ }
67
+ try {
68
+ const diagnostics = compileFile(path.resolve(inputPath), path.resolve(outputPath), compilerStdlibDir());
69
+ if (diagnostics.length > 0) {
70
+ printDiagnostics(inputPath, diagnostics);
71
+ return 1;
72
+ }
73
+ return 0;
74
+ }
75
+ catch (error) {
76
+ if (error instanceof CobolxError) {
77
+ console.error(formatDiagnostic(inputPath, error.diagnostic));
78
+ return 1;
79
+ }
80
+ throw error;
81
+ }
82
+ }
83
+ export { CobolxError, formatDiagnostic } from "./diagnostics.js";
84
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAY1D,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC,YAAY,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,mBAAmB,GAAG,IAAI,gBAAgB,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,CAAC,GAAG,mBAAmB,EAAE,GAAG,SAAS,CAAC,WAAW,EAAE,GAAG,iBAAiB,CAAC,CAAC;IAC7F,MAAM,GAAG,GAAG,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,cAAsB,EAAE,SAAiB;IACrF,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,KAAK,OAAO,CAAC,EAAE,CAAC;QAC/E,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAI,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;IAC9F,OAAO;QACL,GAAG,QAAQ;QACX,MAAM,EAAE,OAAO,CAAC,IAAI;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,SAAiB,EAAE,UAAkB,EAAE,SAAiB;IAClF,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAC5D,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACpD,OAAO,MAAM,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,SAAiB;IACzC,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAClD,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,WAAyB;IAC1E,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAc;IAC3C,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC;IACrC,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACxD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACxG,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YACzC,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;YAC7D,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,122 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import type { ProgramNode } from "./ast/types.js";
5
+ import type { Diagnostic } from "./diagnostics.js";
6
+ import { CobolxError, formatDiagnostic } from "./diagnostics.js";
7
+ import { Lexer } from "./lexer/lexer.js";
8
+ import { Parser } from "./parser/parser.js";
9
+ import { emitCustomBackend } from "./backend/custom.js";
10
+ import { runBorrowChecker } from "./borrow_checker/checker.js";
11
+ import { evaluateConstDeclarations } from "./const_eval/evaluator.js";
12
+ import { lowerToHIR } from "./hir/lower.js";
13
+ import { expandMacros } from "./macros/expand.js";
14
+ import { applyCompilerPlugins } from "./plugins/loader.js";
15
+ import { SemanticAnalyzer } from "./semantic/analyzer.js";
16
+ import { lowerToMIR } from "./mir/lower.js";
17
+ import { optimizeMIR } from "./optimizer/constantFold.js";
18
+ import type { HIRProgram } from "./hir/types.js";
19
+ import type { MIRProgram } from "./mir/types.js";
20
+
21
+ export interface CompileResult {
22
+ program: ProgramNode;
23
+ diagnostics: Diagnostic[];
24
+ output?: string;
25
+ hir?: HIRProgram;
26
+ mir?: MIRProgram;
27
+ }
28
+
29
+ export function parseSource(source: string): ProgramNode {
30
+ const lexer = new Lexer(source);
31
+ const tokens = lexer.tokenize();
32
+ const parser = new Parser(tokens);
33
+ return parser.parseProgram();
34
+ }
35
+
36
+ export function analyzeSource(source: string): CompileResult {
37
+ const program = expandMacros(evaluateConstDeclarations(parseSource(source)));
38
+ return analyzeProgram(program);
39
+ }
40
+
41
+ function analyzeProgram(program: ProgramNode): CompileResult {
42
+ const semanticDiagnostics = new SemanticAnalyzer().analyze(program);
43
+ const hirResult = lowerToHIR(program);
44
+ const borrowDiagnostics = runBorrowChecker(hirResult.hir);
45
+ const diagnostics = [...semanticDiagnostics, ...hirResult.diagnostics, ...borrowDiagnostics];
46
+ const mir = optimizeMIR(lowerToMIR(hirResult.hir));
47
+ return { program, diagnostics, hir: hirResult.hir, mir };
48
+ }
49
+
50
+ export function compileSource(source: string, outputFilePath: string, stdlibDir: string): CompileResult {
51
+ const analyzed = analyzeProgram(expandMacros(evaluateConstDeclarations(parseSource(source))));
52
+ if (analyzed.diagnostics.some((diagnostic) => diagnostic.severity === "error")) {
53
+ return analyzed;
54
+ }
55
+ const backend = emitCustomBackend(analyzed.program, analyzed.mir!, outputFilePath, stdlibDir);
56
+ return {
57
+ ...analyzed,
58
+ output: backend.code
59
+ };
60
+ }
61
+
62
+ export function compileFile(inputPath: string, outputPath: string, stdlibDir: string): Diagnostic[] {
63
+ const source = fs.readFileSync(inputPath, "utf8");
64
+ const parsed = expandMacros(evaluateConstDeclarations(parseSource(source)));
65
+ const pluginResult = applyCompilerPlugins(parsed, path.dirname(inputPath));
66
+ const result = analyzeProgram(pluginResult.program);
67
+ result.diagnostics.unshift(...pluginResult.diagnostics);
68
+ const hasErrors = result.diagnostics.some((diagnostic) => diagnostic.severity === "error");
69
+ if (!hasErrors) {
70
+ const backend = emitCustomBackend(result.program, result.mir!, outputPath, stdlibDir);
71
+ result.output = backend.code;
72
+ }
73
+ if (hasErrors || !result.output) {
74
+ return result.diagnostics;
75
+ }
76
+
77
+ fs.mkdirSync(path.dirname(outputPath), { recursive: true });
78
+ fs.writeFileSync(outputPath, result.output, "utf8");
79
+ return result.diagnostics;
80
+ }
81
+
82
+ export function checkFile(inputPath: string): Diagnostic[] {
83
+ const source = fs.readFileSync(inputPath, "utf8");
84
+ return analyzeSource(source).diagnostics;
85
+ }
86
+
87
+ export function printDiagnostics(filePath: string, diagnostics: Diagnostic[]): void {
88
+ for (const diagnostic of diagnostics) {
89
+ console.error(formatDiagnostic(filePath, diagnostic));
90
+ }
91
+ }
92
+
93
+ export function compilerStdlibDir(): string {
94
+ return path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../..", "stdlib/core");
95
+ }
96
+
97
+ export function runCompilerCli(argv: string[]): number {
98
+ const [inputPath, outputPath] = argv;
99
+ if (!inputPath || !outputPath) {
100
+ console.error("Usage: cobolxc <input.cbx> <output.js>");
101
+ return 1;
102
+ }
103
+
104
+ try {
105
+ const diagnostics = compileFile(path.resolve(inputPath), path.resolve(outputPath), compilerStdlibDir());
106
+ if (diagnostics.length > 0) {
107
+ printDiagnostics(inputPath, diagnostics);
108
+ return 1;
109
+ }
110
+ return 0;
111
+ } catch (error) {
112
+ if (error instanceof CobolxError) {
113
+ console.error(formatDiagnostic(inputPath, error.diagnostic));
114
+ return 1;
115
+ }
116
+ throw error;
117
+ }
118
+ }
119
+
120
+ export { CobolxError, formatDiagnostic } from "./diagnostics.js";
121
+ export type { Diagnostic } from "./diagnostics.js";
122
+ export type { ExpressionNode, PatternNode, ProgramNode, StatementNode } from "./ast/types.js";
@@ -0,0 +1,21 @@
1
+ import type { Token } from "./tokens.js";
2
+ export declare class Lexer {
3
+ private readonly source;
4
+ private index;
5
+ private location;
6
+ constructor(source: string);
7
+ tokenize(): Token[];
8
+ private newlineToken;
9
+ private consumeComment;
10
+ private identifier;
11
+ private number;
12
+ private string;
13
+ private symbol;
14
+ private advance;
15
+ private peek;
16
+ private peekNext;
17
+ private isAtEnd;
18
+ private isAlpha;
19
+ private isDigit;
20
+ private isAlphaNumeric;
21
+ }
@@ -0,0 +1,207 @@
1
+ import { CobolxError } from "../diagnostics.js";
2
+ import { KEYWORDS } from "./tokens.js";
3
+ function cloneLocation(location) {
4
+ return { ...location };
5
+ }
6
+ export class Lexer {
7
+ source;
8
+ index = 0;
9
+ location = { line: 1, column: 1, offset: 0 };
10
+ constructor(source) {
11
+ this.source = source;
12
+ }
13
+ tokenize() {
14
+ const tokens = [];
15
+ while (!this.isAtEnd()) {
16
+ const char = this.peek();
17
+ if (char === " " || char === "\t" || char === "\r") {
18
+ this.advance();
19
+ continue;
20
+ }
21
+ if (char === "\n") {
22
+ tokens.push(this.newlineToken());
23
+ continue;
24
+ }
25
+ if (char === "*" && this.peekNext() === ">") {
26
+ this.consumeComment();
27
+ continue;
28
+ }
29
+ if (this.isAlpha(char)) {
30
+ tokens.push(this.identifier());
31
+ continue;
32
+ }
33
+ if (this.isDigit(char)) {
34
+ tokens.push(this.number());
35
+ continue;
36
+ }
37
+ if (char === "\"") {
38
+ tokens.push(this.string());
39
+ continue;
40
+ }
41
+ tokens.push(this.symbol());
42
+ }
43
+ const eofRange = {
44
+ start: cloneLocation(this.location),
45
+ end: cloneLocation(this.location)
46
+ };
47
+ tokens.push({ type: "EOF", lexeme: "", range: eofRange });
48
+ return tokens;
49
+ }
50
+ newlineToken() {
51
+ const start = cloneLocation(this.location);
52
+ const lexeme = this.advance();
53
+ return {
54
+ type: "NEWLINE",
55
+ lexeme,
56
+ range: { start, end: cloneLocation(this.location) }
57
+ };
58
+ }
59
+ consumeComment() {
60
+ while (!this.isAtEnd() && this.peek() !== "\n") {
61
+ this.advance();
62
+ }
63
+ }
64
+ identifier() {
65
+ const start = cloneLocation(this.location);
66
+ let value = "";
67
+ while (!this.isAtEnd() && (this.isAlphaNumeric(this.peek()) || this.peek() === "-")) {
68
+ value += this.advance();
69
+ }
70
+ const upper = value.toUpperCase();
71
+ const type = KEYWORDS[upper] ?? "IDENTIFIER";
72
+ const lexeme = type === "IDENTIFIER" ? value : upper;
73
+ return {
74
+ type,
75
+ lexeme,
76
+ range: { start, end: cloneLocation(this.location) }
77
+ };
78
+ }
79
+ number() {
80
+ const start = cloneLocation(this.location);
81
+ let value = "";
82
+ while (!this.isAtEnd() && this.isDigit(this.peek())) {
83
+ value += this.advance();
84
+ }
85
+ if (!this.isAtEnd() && this.peek() === "." && this.isDigit(this.peekNext())) {
86
+ value += this.advance();
87
+ while (!this.isAtEnd() && this.isDigit(this.peek())) {
88
+ value += this.advance();
89
+ }
90
+ }
91
+ return {
92
+ type: "NUMBER",
93
+ lexeme: value,
94
+ range: { start, end: cloneLocation(this.location) }
95
+ };
96
+ }
97
+ string() {
98
+ const start = cloneLocation(this.location);
99
+ this.advance();
100
+ let value = "";
101
+ while (!this.isAtEnd() && this.peek() !== "\"") {
102
+ if (this.peek() === "\n") {
103
+ throw new CobolxError({
104
+ message: "Unterminated string literal",
105
+ range: { start, end: cloneLocation(this.location) },
106
+ severity: "error"
107
+ });
108
+ }
109
+ value += this.advance();
110
+ }
111
+ if (this.isAtEnd()) {
112
+ throw new CobolxError({
113
+ message: "Unterminated string literal",
114
+ range: { start, end: cloneLocation(this.location) },
115
+ severity: "error"
116
+ });
117
+ }
118
+ this.advance();
119
+ return {
120
+ type: "STRING",
121
+ lexeme: value,
122
+ range: { start, end: cloneLocation(this.location) }
123
+ };
124
+ }
125
+ symbol() {
126
+ const start = cloneLocation(this.location);
127
+ const char = this.advance();
128
+ const emit = (type, lexeme) => ({
129
+ type,
130
+ lexeme,
131
+ range: { start, end: cloneLocation(this.location) }
132
+ });
133
+ switch (char) {
134
+ case "+":
135
+ return emit("PLUS", char);
136
+ case "-":
137
+ return emit("MINUS", char);
138
+ case "*":
139
+ return emit("STAR", char);
140
+ case "/":
141
+ return emit("SLASH", char);
142
+ case "(":
143
+ return emit("LPAREN", char);
144
+ case ")":
145
+ return emit("RPAREN", char);
146
+ case ",":
147
+ return emit("COMMA", char);
148
+ case "=":
149
+ return emit("ASSIGN", char);
150
+ case "!":
151
+ if (this.peek() === "=") {
152
+ this.advance();
153
+ return emit("NOT_EQUAL", "!=");
154
+ }
155
+ break;
156
+ case "<":
157
+ if (this.peek() === "=") {
158
+ this.advance();
159
+ return emit("LESS_EQUAL", "<=");
160
+ }
161
+ return emit("LESS", char);
162
+ case ">":
163
+ if (this.peek() === "=") {
164
+ this.advance();
165
+ return emit("GREATER_EQUAL", ">=");
166
+ }
167
+ return emit("GREATER", char);
168
+ }
169
+ throw new CobolxError({
170
+ message: `Unexpected character '${char}'`,
171
+ range: { start, end: cloneLocation(this.location) },
172
+ severity: "error"
173
+ });
174
+ }
175
+ advance() {
176
+ const char = this.source[this.index] ?? "\0";
177
+ this.index += 1;
178
+ this.location.offset += 1;
179
+ if (char === "\n") {
180
+ this.location.line += 1;
181
+ this.location.column = 1;
182
+ }
183
+ else {
184
+ this.location.column += 1;
185
+ }
186
+ return char;
187
+ }
188
+ peek() {
189
+ return this.source[this.index] ?? "\0";
190
+ }
191
+ peekNext() {
192
+ return this.source[this.index + 1] ?? "\0";
193
+ }
194
+ isAtEnd() {
195
+ return this.index >= this.source.length;
196
+ }
197
+ isAlpha(char) {
198
+ return /[A-Za-z_]/.test(char);
199
+ }
200
+ isDigit(char) {
201
+ return /[0-9]/.test(char);
202
+ }
203
+ isAlphaNumeric(char) {
204
+ return this.isAlpha(char) || this.isDigit(char);
205
+ }
206
+ }
207
+ //# sourceMappingURL=lexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.js","sourceRoot":"","sources":["lexer.ts"],"names":[],"mappings":"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"}