bonescript-compiler 0.2.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 (146) hide show
  1. package/LICENSE +21 -0
  2. package/dist/algorithm_catalog.d.ts +32 -0
  3. package/dist/algorithm_catalog.js +323 -0
  4. package/dist/algorithm_catalog.js.map +1 -0
  5. package/dist/ast.d.ts +244 -0
  6. package/dist/ast.js +8 -0
  7. package/dist/ast.js.map +1 -0
  8. package/dist/cli.d.ts +4 -0
  9. package/dist/cli.js +605 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/emit_batch.d.ts +7 -0
  12. package/dist/emit_batch.js +133 -0
  13. package/dist/emit_batch.js.map +1 -0
  14. package/dist/emit_capability.d.ts +7 -0
  15. package/dist/emit_capability.js +376 -0
  16. package/dist/emit_capability.js.map +1 -0
  17. package/dist/emit_composition.d.ts +22 -0
  18. package/dist/emit_composition.js +184 -0
  19. package/dist/emit_composition.js.map +1 -0
  20. package/dist/emit_deploy.d.ts +9 -0
  21. package/dist/emit_deploy.js +191 -0
  22. package/dist/emit_deploy.js.map +1 -0
  23. package/dist/emit_events.d.ts +14 -0
  24. package/dist/emit_events.js +305 -0
  25. package/dist/emit_events.js.map +1 -0
  26. package/dist/emit_extras.d.ts +12 -0
  27. package/dist/emit_extras.js +234 -0
  28. package/dist/emit_extras.js.map +1 -0
  29. package/dist/emit_full.d.ts +13 -0
  30. package/dist/emit_full.js +273 -0
  31. package/dist/emit_full.js.map +1 -0
  32. package/dist/emit_maintenance.d.ts +16 -0
  33. package/dist/emit_maintenance.js +442 -0
  34. package/dist/emit_maintenance.js.map +1 -0
  35. package/dist/emit_runtime.d.ts +13 -0
  36. package/dist/emit_runtime.js +691 -0
  37. package/dist/emit_runtime.js.map +1 -0
  38. package/dist/emit_sourcemap.d.ts +29 -0
  39. package/dist/emit_sourcemap.js +123 -0
  40. package/dist/emit_sourcemap.js.map +1 -0
  41. package/dist/emit_tests.d.ts +15 -0
  42. package/dist/emit_tests.js +185 -0
  43. package/dist/emit_tests.js.map +1 -0
  44. package/dist/emit_websocket.d.ts +6 -0
  45. package/dist/emit_websocket.js +223 -0
  46. package/dist/emit_websocket.js.map +1 -0
  47. package/dist/emitter.d.ts +25 -0
  48. package/dist/emitter.js +511 -0
  49. package/dist/emitter.js.map +1 -0
  50. package/dist/extension_manager.d.ts +38 -0
  51. package/dist/extension_manager.js +170 -0
  52. package/dist/extension_manager.js.map +1 -0
  53. package/dist/formatter.d.ts +34 -0
  54. package/dist/formatter.js +317 -0
  55. package/dist/formatter.js.map +1 -0
  56. package/dist/index.d.ts +42 -0
  57. package/dist/index.js +113 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/ir.d.ts +168 -0
  60. package/dist/ir.js +10 -0
  61. package/dist/ir.js.map +1 -0
  62. package/dist/lexer.d.ts +195 -0
  63. package/dist/lexer.js +619 -0
  64. package/dist/lexer.js.map +1 -0
  65. package/dist/lowering.d.ts +25 -0
  66. package/dist/lowering.js +500 -0
  67. package/dist/lowering.js.map +1 -0
  68. package/dist/module_loader.d.ts +25 -0
  69. package/dist/module_loader.js +126 -0
  70. package/dist/module_loader.js.map +1 -0
  71. package/dist/optimizer.d.ts +26 -0
  72. package/dist/optimizer.js +158 -0
  73. package/dist/optimizer.js.map +1 -0
  74. package/dist/parse_decls.d.ts +13 -0
  75. package/dist/parse_decls.js +442 -0
  76. package/dist/parse_decls.js.map +1 -0
  77. package/dist/parse_decls2.d.ts +13 -0
  78. package/dist/parse_decls2.js +295 -0
  79. package/dist/parse_decls2.js.map +1 -0
  80. package/dist/parse_expr.d.ts +7 -0
  81. package/dist/parse_expr.js +197 -0
  82. package/dist/parse_expr.js.map +1 -0
  83. package/dist/parse_types.d.ts +6 -0
  84. package/dist/parse_types.js +51 -0
  85. package/dist/parse_types.js.map +1 -0
  86. package/dist/parser.d.ts +10 -0
  87. package/dist/parser.js +62 -0
  88. package/dist/parser.js.map +1 -0
  89. package/dist/parser_base.d.ts +19 -0
  90. package/dist/parser_base.js +50 -0
  91. package/dist/parser_base.js.map +1 -0
  92. package/dist/parser_recovery.d.ts +26 -0
  93. package/dist/parser_recovery.js +140 -0
  94. package/dist/parser_recovery.js.map +1 -0
  95. package/dist/scaffold.d.ts +13 -0
  96. package/dist/scaffold.js +376 -0
  97. package/dist/scaffold.js.map +1 -0
  98. package/dist/solver.d.ts +26 -0
  99. package/dist/solver.js +281 -0
  100. package/dist/solver.js.map +1 -0
  101. package/dist/typechecker.d.ts +52 -0
  102. package/dist/typechecker.js +534 -0
  103. package/dist/typechecker.js.map +1 -0
  104. package/dist/types.d.ts +38 -0
  105. package/dist/types.js +85 -0
  106. package/dist/types.js.map +1 -0
  107. package/dist/verifier.d.ts +46 -0
  108. package/dist/verifier.js +307 -0
  109. package/dist/verifier.js.map +1 -0
  110. package/package.json +52 -0
  111. package/src/algorithm_catalog.ts +345 -0
  112. package/src/ast.ts +334 -0
  113. package/src/cli.ts +624 -0
  114. package/src/emit_batch.ts +140 -0
  115. package/src/emit_capability.ts +436 -0
  116. package/src/emit_composition.ts +196 -0
  117. package/src/emit_deploy.ts +190 -0
  118. package/src/emit_events.ts +307 -0
  119. package/src/emit_extras.ts +240 -0
  120. package/src/emit_full.ts +309 -0
  121. package/src/emit_maintenance.ts +459 -0
  122. package/src/emit_runtime.ts +731 -0
  123. package/src/emit_sourcemap.ts +140 -0
  124. package/src/emit_tests.ts +205 -0
  125. package/src/emit_websocket.ts +229 -0
  126. package/src/emitter.ts +566 -0
  127. package/src/extension_manager.ts +187 -0
  128. package/src/formatter.ts +297 -0
  129. package/src/index.ts +88 -0
  130. package/src/ir.ts +215 -0
  131. package/src/lexer.ts +630 -0
  132. package/src/lowering.ts +556 -0
  133. package/src/module_loader.ts +114 -0
  134. package/src/optimizer.ts +196 -0
  135. package/src/parse_decls.ts +409 -0
  136. package/src/parse_decls2.ts +244 -0
  137. package/src/parse_expr.ts +197 -0
  138. package/src/parse_types.ts +54 -0
  139. package/src/parser.ts +64 -0
  140. package/src/parser_base.ts +57 -0
  141. package/src/parser_recovery.ts +153 -0
  142. package/src/scaffold.ts +375 -0
  143. package/src/solver.ts +330 -0
  144. package/src/typechecker.ts +591 -0
  145. package/src/types.ts +122 -0
  146. package/src/verifier.ts +348 -0
@@ -0,0 +1,295 @@
1
+ "use strict";
2
+ /**
3
+ * BoneScript Declaration Parsers — Channel, Store, Event, Constraint, Policy, Flow, Import
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.parseExtensionPointDecl = exports.parseImportDecl = exports.parseFlowDecl = exports.parsePolicyDecl = exports.parseConstraintDecl = exports.parseEventDecl = exports.parseStoreDecl = exports.parseChannelDecl = void 0;
7
+ const lexer_1 = require("./lexer");
8
+ const parser_base_1 = require("./parser_base");
9
+ const parse_expr_1 = require("./parse_expr");
10
+ const parse_types_1 = require("./parse_types");
11
+ const parse_decls_1 = require("./parse_decls");
12
+ // ─── Channel ─────────────────────────────────────────────────────────────────
13
+ function parseChannelDecl(s) {
14
+ const loc = s.peek().loc;
15
+ s.expect(lexer_1.TokenKind.KwChannel, "channel");
16
+ const name = s.expect(lexer_1.TokenKind.Identifier, "name").value;
17
+ s.expect(lexer_1.TokenKind.LBrace, "{");
18
+ const node = {
19
+ kind: "ChannelDecl", loc, name,
20
+ transport: null, ordering: null, participants: null,
21
+ persistence: null, filter: null, maxSize: null,
22
+ };
23
+ while (!s.check(lexer_1.TokenKind.RBrace) && !s.check(lexer_1.TokenKind.EOF)) {
24
+ const tok = s.peek();
25
+ switch (tok.kind) {
26
+ case lexer_1.TokenKind.KwTransport:
27
+ s.advance();
28
+ s.expect(lexer_1.TokenKind.Colon, ":");
29
+ node.transport = s.advance().value;
30
+ break;
31
+ case lexer_1.TokenKind.KwOrdering:
32
+ s.advance();
33
+ s.expect(lexer_1.TokenKind.Colon, ":");
34
+ node.ordering = s.advance().value;
35
+ break;
36
+ case lexer_1.TokenKind.KwParticipants:
37
+ s.advance();
38
+ s.expect(lexer_1.TokenKind.Colon, ":");
39
+ node.participants = (0, parse_types_1.parseTypeExpr)(s);
40
+ break;
41
+ case lexer_1.TokenKind.KwPersistence:
42
+ s.advance();
43
+ s.expect(lexer_1.TokenKind.Colon, ":");
44
+ node.persistence = s.advance().value;
45
+ break;
46
+ case lexer_1.TokenKind.KwFilter:
47
+ s.advance();
48
+ s.expect(lexer_1.TokenKind.Colon, ":");
49
+ node.filter = (0, parse_expr_1.parseExpr)(s);
50
+ break;
51
+ case lexer_1.TokenKind.KwMaxSize:
52
+ s.advance();
53
+ s.expect(lexer_1.TokenKind.Colon, ":");
54
+ node.maxSize = parseInt(s.expect(lexer_1.TokenKind.IntLiteral, "n").value, 10);
55
+ break;
56
+ default: throw new parser_base_1.ParseError(`Unexpected in channel: ${tok.kind}`, tok.loc);
57
+ }
58
+ }
59
+ s.expect(lexer_1.TokenKind.RBrace, "}");
60
+ return node;
61
+ }
62
+ exports.parseChannelDecl = parseChannelDecl;
63
+ // ─── Store ───────────────────────────────────────────────────────────────────
64
+ function parseStoreDecl(s) {
65
+ const loc = s.peek().loc;
66
+ s.expect(lexer_1.TokenKind.KwStore, "store");
67
+ const name = s.expect(lexer_1.TokenKind.Identifier, "name").value;
68
+ s.expect(lexer_1.TokenKind.LBrace, "{");
69
+ const node = {
70
+ kind: "StoreDecl", loc, name,
71
+ engine: null, schema: [], retention: null, partition: null, replicas: null,
72
+ };
73
+ while (!s.check(lexer_1.TokenKind.RBrace) && !s.check(lexer_1.TokenKind.EOF)) {
74
+ const tok = s.peek();
75
+ switch (tok.kind) {
76
+ case lexer_1.TokenKind.KwEngine:
77
+ s.advance();
78
+ s.expect(lexer_1.TokenKind.Colon, ":");
79
+ node.engine = s.advance().value;
80
+ break;
81
+ case lexer_1.TokenKind.KwSchema:
82
+ s.advance();
83
+ s.expect(lexer_1.TokenKind.Colon, ":");
84
+ s.expect(lexer_1.TokenKind.LBrace, "{");
85
+ node.schema = (0, parse_decls_1.parseFieldList)(s);
86
+ s.expect(lexer_1.TokenKind.RBrace, "}");
87
+ break;
88
+ case lexer_1.TokenKind.KwRetention:
89
+ s.advance();
90
+ s.expect(lexer_1.TokenKind.Colon, ":");
91
+ node.retention = (0, parse_decls_1.parseDuration)(s);
92
+ break;
93
+ case lexer_1.TokenKind.KwPartition:
94
+ s.advance();
95
+ s.expect(lexer_1.TokenKind.Colon, ":");
96
+ node.partition = s.expect(lexer_1.TokenKind.Identifier, "field").value;
97
+ break;
98
+ case lexer_1.TokenKind.KwReplicas:
99
+ s.advance();
100
+ s.expect(lexer_1.TokenKind.Colon, ":");
101
+ node.replicas = parseInt(s.expect(lexer_1.TokenKind.IntLiteral, "n").value, 10);
102
+ break;
103
+ default: throw new parser_base_1.ParseError(`Unexpected in store: ${tok.kind}`, tok.loc);
104
+ }
105
+ }
106
+ s.expect(lexer_1.TokenKind.RBrace, "}");
107
+ return node;
108
+ }
109
+ exports.parseStoreDecl = parseStoreDecl;
110
+ // ─── Event ───────────────────────────────────────────────────────────────────
111
+ function parseEventDecl(s) {
112
+ const loc = s.peek().loc;
113
+ s.expect(lexer_1.TokenKind.KwEvent, "event");
114
+ const name = s.expect(lexer_1.TokenKind.Identifier, "name").value;
115
+ s.expect(lexer_1.TokenKind.LBrace, "{");
116
+ const node = {
117
+ kind: "EventDecl", loc, name, payload: [], delivery: null, ttl: null,
118
+ };
119
+ while (!s.check(lexer_1.TokenKind.RBrace) && !s.check(lexer_1.TokenKind.EOF)) {
120
+ const tok = s.peek();
121
+ switch (tok.kind) {
122
+ case lexer_1.TokenKind.KwPayload:
123
+ s.advance();
124
+ s.expect(lexer_1.TokenKind.Colon, ":");
125
+ s.expect(lexer_1.TokenKind.LBrace, "{");
126
+ node.payload = (0, parse_decls_1.parseFieldList)(s);
127
+ s.expect(lexer_1.TokenKind.RBrace, "}");
128
+ break;
129
+ case lexer_1.TokenKind.KwDelivery:
130
+ s.advance();
131
+ s.expect(lexer_1.TokenKind.Colon, ":");
132
+ node.delivery = s.advance().value;
133
+ break;
134
+ case lexer_1.TokenKind.KwTtl:
135
+ s.advance();
136
+ s.expect(lexer_1.TokenKind.Colon, ":");
137
+ node.ttl = (0, parse_decls_1.parseDuration)(s);
138
+ break;
139
+ default: throw new parser_base_1.ParseError(`Unexpected in event: ${tok.kind}`, tok.loc);
140
+ }
141
+ }
142
+ s.expect(lexer_1.TokenKind.RBrace, "}");
143
+ return node;
144
+ }
145
+ exports.parseEventDecl = parseEventDecl;
146
+ // ─── Constraint ──────────────────────────────────────────────────────────────
147
+ function parseConstraintDecl(s) {
148
+ const loc = s.peek().loc;
149
+ s.expect(lexer_1.TokenKind.KwConstraint, "constraint");
150
+ const name = s.expect(lexer_1.TokenKind.Identifier, "name").value;
151
+ s.expect(lexer_1.TokenKind.Colon, ":");
152
+ const expr = (0, parse_expr_1.parseExpr)(s);
153
+ return { kind: "ConstraintDecl", loc, name, expr };
154
+ }
155
+ exports.parseConstraintDecl = parseConstraintDecl;
156
+ // ─── Policy ──────────────────────────────────────────────────────────────────
157
+ function parsePolicyDecl(s) {
158
+ const loc = s.peek().loc;
159
+ s.expect(lexer_1.TokenKind.KwPolicy, "policy");
160
+ const name = s.expect(lexer_1.TokenKind.Identifier, "name").value;
161
+ s.expect(lexer_1.TokenKind.LBrace, "{");
162
+ const node = {
163
+ kind: "PolicyDecl", loc, name, rateLimit: null, access: [], audit: null, encryption: null,
164
+ };
165
+ while (!s.check(lexer_1.TokenKind.RBrace) && !s.check(lexer_1.TokenKind.EOF)) {
166
+ const tok = s.peek();
167
+ switch (tok.kind) {
168
+ case lexer_1.TokenKind.KwRateLimit:
169
+ s.advance();
170
+ s.expect(lexer_1.TokenKind.Colon, ":");
171
+ const count = parseInt(s.expect(lexer_1.TokenKind.IntLiteral, "count").value, 10);
172
+ s.expect(lexer_1.TokenKind.KwPer, "per");
173
+ const per = (0, parse_decls_1.parseDuration)(s);
174
+ node.rateLimit = { count, per };
175
+ break;
176
+ case lexer_1.TokenKind.KwAccess:
177
+ s.advance();
178
+ s.expect(lexer_1.TokenKind.Colon, ":");
179
+ s.expect(lexer_1.TokenKind.LBracket, "[");
180
+ node.access = (0, parse_decls_1.parseIdentList)(s);
181
+ s.expect(lexer_1.TokenKind.RBracket, "]");
182
+ break;
183
+ case lexer_1.TokenKind.KwAudit:
184
+ s.advance();
185
+ s.expect(lexer_1.TokenKind.Colon, ":");
186
+ node.audit = s.advance().kind === lexer_1.TokenKind.KwTrue;
187
+ break;
188
+ case lexer_1.TokenKind.KwEncryption:
189
+ s.advance();
190
+ s.expect(lexer_1.TokenKind.Colon, ":");
191
+ node.encryption = s.advance().value;
192
+ break;
193
+ default: throw new parser_base_1.ParseError(`Unexpected in policy: ${tok.kind}`, tok.loc);
194
+ }
195
+ }
196
+ s.expect(lexer_1.TokenKind.RBrace, "}");
197
+ return node;
198
+ }
199
+ exports.parsePolicyDecl = parsePolicyDecl;
200
+ // ─── Flow ────────────────────────────────────────────────────────────────────
201
+ function parseFlowDecl(s) {
202
+ const loc = s.peek().loc;
203
+ s.expect(lexer_1.TokenKind.KwFlow, "flow");
204
+ const name = s.expect(lexer_1.TokenKind.Identifier, "name").value;
205
+ s.expect(lexer_1.TokenKind.LBrace, "{");
206
+ const steps = [];
207
+ while (!s.check(lexer_1.TokenKind.RBrace) && !s.check(lexer_1.TokenKind.EOF)) {
208
+ const sloc = s.peek().loc;
209
+ s.expect(lexer_1.TokenKind.KwStep, "step");
210
+ const stepName = s.expect(lexer_1.TokenKind.Identifier, "step name").value;
211
+ s.expect(lexer_1.TokenKind.Colon, ":");
212
+ const action = parseCallExpr(s);
213
+ let compensate = null;
214
+ if (s.check(lexer_1.TokenKind.KwCompensate)) {
215
+ s.advance();
216
+ s.expect(lexer_1.TokenKind.Colon, ":");
217
+ compensate = parseCallExpr(s);
218
+ }
219
+ steps.push({ kind: "FlowStep", loc: sloc, name: stepName, action, compensate });
220
+ }
221
+ s.expect(lexer_1.TokenKind.RBrace, "}");
222
+ return { kind: "FlowDecl", loc, name, steps };
223
+ }
224
+ exports.parseFlowDecl = parseFlowDecl;
225
+ function parseCallExpr(s) {
226
+ const loc = s.peek().loc;
227
+ const name = s.expect(lexer_1.TokenKind.Identifier, "call name").value;
228
+ s.expect(lexer_1.TokenKind.LParen, "(");
229
+ const args = [];
230
+ if (!s.check(lexer_1.TokenKind.RParen)) {
231
+ do {
232
+ args.push((0, parse_expr_1.parseExpr)(s));
233
+ } while (s.match(lexer_1.TokenKind.Comma));
234
+ }
235
+ s.expect(lexer_1.TokenKind.RParen, ")");
236
+ return { kind: "CallExpr", loc, name, args };
237
+ }
238
+ // ─── Import ──────────────────────────────────────────────────────────────────
239
+ function parseImportDecl(s) {
240
+ const loc = s.peek().loc;
241
+ s.expect(lexer_1.TokenKind.KwImport, "import");
242
+ const name = s.expect(lexer_1.TokenKind.Identifier, "name").value;
243
+ s.expect(lexer_1.TokenKind.KwFrom, "from");
244
+ const from = s.expect(lexer_1.TokenKind.StringLiteral, "path").value;
245
+ return { kind: "ImportDecl", loc, name, from };
246
+ }
247
+ exports.parseImportDecl = parseImportDecl;
248
+ // ─── Extension Point ─────────────────────────────────────────────────────────
249
+ function parseExtensionPointDecl(s) {
250
+ const loc = s.peek().loc;
251
+ s.expect(lexer_1.TokenKind.KwExtensionPoint, "extension_point");
252
+ const name = s.expect(lexer_1.TokenKind.Identifier, "extension point name").value;
253
+ s.expect(lexer_1.TokenKind.LParen, "(");
254
+ const params = [];
255
+ if (!s.check(lexer_1.TokenKind.RParen)) {
256
+ do {
257
+ const ploc = s.peek().loc;
258
+ // Allow keywords as param names
259
+ const pname = s.peek().kind === lexer_1.TokenKind.Identifier ? s.advance().value : s.advance().value;
260
+ s.expect(lexer_1.TokenKind.Colon, ":");
261
+ const ptype = (0, parse_types_1.parseTypeExpr)(s);
262
+ params.push({ kind: "Param", loc: ploc, name: pname, type: ptype });
263
+ } while (s.match(lexer_1.TokenKind.Comma));
264
+ }
265
+ s.expect(lexer_1.TokenKind.RParen, ")");
266
+ let returns = null;
267
+ let stable = false;
268
+ s.expect(lexer_1.TokenKind.LBrace, "{");
269
+ while (!s.check(lexer_1.TokenKind.RBrace) && !s.check(lexer_1.TokenKind.EOF)) {
270
+ const tok = s.peek();
271
+ if (tok.kind === lexer_1.TokenKind.KwReturns) {
272
+ s.advance();
273
+ s.expect(lexer_1.TokenKind.Colon, ":");
274
+ returns = (0, parse_types_1.parseTypeExpr)(s);
275
+ }
276
+ else if (tok.kind === lexer_1.TokenKind.KwStable) {
277
+ s.advance();
278
+ s.expect(lexer_1.TokenKind.Colon, ":");
279
+ stable = s.advance().kind === lexer_1.TokenKind.KwTrue;
280
+ }
281
+ else if (tok.kind === lexer_1.TokenKind.KwLanguage) {
282
+ // language: typescript — consume and ignore (only TS supported)
283
+ s.advance();
284
+ s.expect(lexer_1.TokenKind.Colon, ":");
285
+ s.advance();
286
+ }
287
+ else {
288
+ throw new parser_base_1.ParseError(`Unexpected in extension_point: ${tok.kind}`, tok.loc);
289
+ }
290
+ }
291
+ s.expect(lexer_1.TokenKind.RBrace, "}");
292
+ return { kind: "ExtensionPointDecl", loc, name, params, returns, stable };
293
+ }
294
+ exports.parseExtensionPointDecl = parseExtensionPointDecl;
295
+ //# sourceMappingURL=parse_decls2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse_decls2.js","sourceRoot":"","sources":["../src/parse_decls2.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * BoneScript Expression Parser — Pratt-style precedence climbing.
3
+ */
4
+ import { TokenStream } from "./parser_base";
5
+ import * as AST from "./ast";
6
+ export declare function parseExpr(s: TokenStream): AST.ExprNode;
7
+ export declare function parseExprList(s: TokenStream): AST.ExprNode[];
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ /**
3
+ * BoneScript Expression Parser — Pratt-style precedence climbing.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.parseExprList = exports.parseExpr = void 0;
7
+ const lexer_1 = require("./lexer");
8
+ const parser_base_1 = require("./parser_base");
9
+ function parseExpr(s) {
10
+ return parseLogicalOr(s);
11
+ }
12
+ exports.parseExpr = parseExpr;
13
+ function parseExprList(s) {
14
+ const exprs = [];
15
+ if (s.check(lexer_1.TokenKind.RBracket))
16
+ return exprs;
17
+ do {
18
+ exprs.push(parseExpr(s));
19
+ } while (s.match(lexer_1.TokenKind.Comma));
20
+ return exprs;
21
+ }
22
+ exports.parseExprList = parseExprList;
23
+ function parseLogicalOr(s) {
24
+ let left = parseLogicalAnd(s);
25
+ while (s.check(lexer_1.TokenKind.KwOr)) {
26
+ const loc = s.peek().loc;
27
+ s.advance();
28
+ const right = parseLogicalAnd(s);
29
+ left = { kind: "BinaryExpr", loc, op: "or", left, right };
30
+ }
31
+ return left;
32
+ }
33
+ function parseLogicalAnd(s) {
34
+ let left = parseComparison(s);
35
+ while (s.check(lexer_1.TokenKind.KwAnd)) {
36
+ const loc = s.peek().loc;
37
+ s.advance();
38
+ const right = parseComparison(s);
39
+ left = { kind: "BinaryExpr", loc, op: "and", left, right };
40
+ }
41
+ return left;
42
+ }
43
+ function parseComparison(s) {
44
+ let left = parseAdditive(s);
45
+ const compOps = [
46
+ lexer_1.TokenKind.EqEq, lexer_1.TokenKind.NotEq, lexer_1.TokenKind.LAngle, lexer_1.TokenKind.RAngle,
47
+ lexer_1.TokenKind.LtEq, lexer_1.TokenKind.GtEq, lexer_1.TokenKind.KwIn, lexer_1.TokenKind.KwContains,
48
+ ];
49
+ if (compOps.includes(s.peek().kind)) {
50
+ const loc = s.peek().loc;
51
+ const op = s.advance().value;
52
+ const right = parseAdditive(s);
53
+ // Check for range: expr in expr..expr
54
+ if (op === "in" && s.check(lexer_1.TokenKind.DotDot)) {
55
+ const dotLoc = s.peek().loc;
56
+ s.advance(); // consume ..
57
+ const upper = parseAdditive(s);
58
+ // Desugar "x in low..high" into BinaryExpr with op "in_range"
59
+ const range = { kind: "BinaryExpr", loc: dotLoc, op: "..", left: right, right: upper };
60
+ left = { kind: "BinaryExpr", loc, op: "in", left, right: range };
61
+ }
62
+ else {
63
+ left = { kind: "BinaryExpr", loc, op, left, right };
64
+ }
65
+ }
66
+ return left;
67
+ }
68
+ function parseAdditive(s) {
69
+ let left = parseMultiplicative(s);
70
+ while (s.check(lexer_1.TokenKind.Plus) || s.check(lexer_1.TokenKind.Minus)) {
71
+ const loc = s.peek().loc;
72
+ const op = s.advance().value;
73
+ const right = parseMultiplicative(s);
74
+ left = { kind: "BinaryExpr", loc, op, left, right };
75
+ }
76
+ return left;
77
+ }
78
+ function parseMultiplicative(s) {
79
+ let left = parseUnary(s);
80
+ while (s.check(lexer_1.TokenKind.Star) || s.check(lexer_1.TokenKind.Slash) || s.check(lexer_1.TokenKind.Percent)) {
81
+ const loc = s.peek().loc;
82
+ const op = s.advance().value;
83
+ const right = parseUnary(s);
84
+ left = { kind: "BinaryExpr", loc, op, left, right };
85
+ }
86
+ return left;
87
+ }
88
+ function parseUnary(s) {
89
+ if (s.check(lexer_1.TokenKind.KwNot)) {
90
+ const loc = s.peek().loc;
91
+ s.advance();
92
+ const operand = parseUnary(s);
93
+ return { kind: "UnaryExpr", loc, op: "not", operand };
94
+ }
95
+ if (s.check(lexer_1.TokenKind.Minus)) {
96
+ const loc = s.peek().loc;
97
+ s.advance();
98
+ const operand = parseUnary(s);
99
+ return { kind: "UnaryExpr", loc, op: "-", operand };
100
+ }
101
+ return parsePrimary(s);
102
+ }
103
+ function parsePrimary(s) {
104
+ const tok = s.peek();
105
+ const loc = tok.loc;
106
+ // Parenthesized expression
107
+ if (tok.kind === lexer_1.TokenKind.LParen) {
108
+ s.advance();
109
+ const expr = parseExpr(s);
110
+ s.expect(lexer_1.TokenKind.RParen, "parenthesized expression");
111
+ return expr;
112
+ }
113
+ // List literal
114
+ if (tok.kind === lexer_1.TokenKind.LBracket) {
115
+ s.advance();
116
+ const elements = [];
117
+ if (!s.check(lexer_1.TokenKind.RBracket)) {
118
+ do {
119
+ elements.push(parseExpr(s));
120
+ } while (s.match(lexer_1.TokenKind.Comma));
121
+ }
122
+ s.expect(lexer_1.TokenKind.RBracket, "list literal close");
123
+ return { kind: "Literal", loc, type: "list", value: elements };
124
+ }
125
+ // String literal
126
+ if (tok.kind === lexer_1.TokenKind.StringLiteral) {
127
+ s.advance();
128
+ return { kind: "Literal", loc, type: "string", value: tok.value };
129
+ }
130
+ // Int literal
131
+ if (tok.kind === lexer_1.TokenKind.IntLiteral) {
132
+ s.advance();
133
+ return { kind: "Literal", loc, type: "int", value: parseInt(tok.value, 10) };
134
+ }
135
+ // Float literal
136
+ if (tok.kind === lexer_1.TokenKind.FloatLiteral) {
137
+ s.advance();
138
+ return { kind: "Literal", loc, type: "float", value: parseFloat(tok.value) };
139
+ }
140
+ // Boolean
141
+ if (tok.kind === lexer_1.TokenKind.KwTrue) {
142
+ s.advance();
143
+ return { kind: "Literal", loc, type: "bool", value: true };
144
+ }
145
+ if (tok.kind === lexer_1.TokenKind.KwFalse) {
146
+ s.advance();
147
+ return { kind: "Literal", loc, type: "bool", value: false };
148
+ }
149
+ // None
150
+ if (tok.kind === lexer_1.TokenKind.KwNone) {
151
+ s.advance();
152
+ return { kind: "Literal", loc, type: "none", value: null };
153
+ }
154
+ // now()
155
+ if (tok.kind === lexer_1.TokenKind.KwNow) {
156
+ s.advance();
157
+ if (s.match(lexer_1.TokenKind.LParen)) {
158
+ s.expect(lexer_1.TokenKind.RParen, "now()");
159
+ }
160
+ return { kind: "CallExpr", loc, name: "now", args: [] };
161
+ }
162
+ // Identifier — field ref or function call
163
+ if (tok.kind === lexer_1.TokenKind.Identifier || isKeywordIdentifier(tok)) {
164
+ const path = [];
165
+ path.push(s.advance().value);
166
+ // Function call
167
+ if (s.check(lexer_1.TokenKind.LParen)) {
168
+ s.advance();
169
+ const args = [];
170
+ if (!s.check(lexer_1.TokenKind.RParen)) {
171
+ do {
172
+ args.push(parseExpr(s));
173
+ } while (s.match(lexer_1.TokenKind.Comma));
174
+ }
175
+ s.expect(lexer_1.TokenKind.RParen, "function call close");
176
+ return { kind: "CallExpr", loc, name: path[0], args };
177
+ }
178
+ // Dotted field reference
179
+ while (s.match(lexer_1.TokenKind.Dot)) {
180
+ const next = s.peek();
181
+ if (next.kind === lexer_1.TokenKind.Identifier || next.kind === lexer_1.TokenKind.KwUnique || isKeywordIdentifier(next)) {
182
+ path.push(s.advance().value);
183
+ }
184
+ else {
185
+ break;
186
+ }
187
+ }
188
+ return { kind: "FieldRef", loc, path };
189
+ }
190
+ throw new parser_base_1.ParseError(`Expected expression, got ${tok.kind} ('${tok.value}')`, tok.loc);
191
+ }
192
+ /** Check if a token is a keyword that can also serve as an identifier */
193
+ function isKeywordIdentifier(tok) {
194
+ // Keywords that are commonly used as variable/field names
195
+ return /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(tok.value) && tok.kind !== lexer_1.TokenKind.EOF;
196
+ }
197
+ //# sourceMappingURL=parse_expr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse_expr.js","sourceRoot":"","sources":["../src/parse_expr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * BoneScript Type Expression Parser
3
+ */
4
+ import { TokenStream } from "./parser_base";
5
+ import * as AST from "./ast";
6
+ export declare function parseTypeExpr(s: TokenStream): AST.TypeExprNode;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ /**
3
+ * BoneScript Type Expression Parser
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.parseTypeExpr = void 0;
7
+ const lexer_1 = require("./lexer");
8
+ const parser_base_1 = require("./parser_base");
9
+ function parseTypeExpr(s) {
10
+ const loc = s.peek().loc;
11
+ const tok = s.peek();
12
+ // Generic types
13
+ const generics = [lexer_1.TokenKind.KwSet, lexer_1.TokenKind.KwList, lexer_1.TokenKind.KwOptional, lexer_1.TokenKind.KwResult, lexer_1.TokenKind.KwMap];
14
+ if (generics.includes(tok.kind)) {
15
+ const name = s.advance().value;
16
+ s.expect(lexer_1.TokenKind.LAngle, "generic type arg");
17
+ const typeArgs = [];
18
+ typeArgs.push(parseTypeExpr(s));
19
+ while (s.match(lexer_1.TokenKind.Comma)) {
20
+ typeArgs.push(parseTypeExpr(s));
21
+ }
22
+ s.expect(lexer_1.TokenKind.RAngle, "generic type arg close");
23
+ return { kind: "GenericType", loc, name, typeArgs };
24
+ }
25
+ // Primitive types
26
+ const primitives = [
27
+ lexer_1.TokenKind.KwString, lexer_1.TokenKind.KwUint, lexer_1.TokenKind.KwInt, lexer_1.TokenKind.KwFloat,
28
+ lexer_1.TokenKind.KwBool, lexer_1.TokenKind.KwTimestamp, lexer_1.TokenKind.KwUuid, lexer_1.TokenKind.KwBytes, lexer_1.TokenKind.KwJson,
29
+ ];
30
+ if (primitives.includes(tok.kind)) {
31
+ return { kind: "PrimitiveType", loc, name: s.advance().value };
32
+ }
33
+ // Tuple type
34
+ if (tok.kind === lexer_1.TokenKind.LParen) {
35
+ s.advance();
36
+ const elements = [];
37
+ elements.push(parseTypeExpr(s));
38
+ while (s.match(lexer_1.TokenKind.Comma)) {
39
+ elements.push(parseTypeExpr(s));
40
+ }
41
+ s.expect(lexer_1.TokenKind.RParen, "tuple type close");
42
+ return { kind: "TupleType", loc, elements };
43
+ }
44
+ // Entity reference
45
+ if (tok.kind === lexer_1.TokenKind.Identifier) {
46
+ return { kind: "EntityRefType", loc, name: s.advance().value };
47
+ }
48
+ throw new parser_base_1.ParseError(`Expected type expression, got ${tok.kind}`, tok.loc);
49
+ }
50
+ exports.parseTypeExpr = parseTypeExpr;
51
+ //# sourceMappingURL=parse_types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse_types.js","sourceRoot":"","sources":["../src/parse_types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,mCAAoC;AACpC,+CAAwD;AAGxD,SAAgB,aAAa,CAAC,CAAc;IAC1C,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAErB,gBAAgB;IAChB,MAAM,QAAQ,GAAG,CAAC,iBAAS,CAAC,KAAK,EAAE,iBAAS,CAAC,MAAM,EAAE,iBAAS,CAAC,UAAU,EAAE,iBAAS,CAAC,QAAQ,EAAE,iBAAS,CAAC,KAAK,CAAC,CAAC;IAChH,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;QAC/B,CAAC,CAAC,MAAM,CAAC,iBAAS,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAuB,EAAE,CAAC;QACxC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,OAAO,CAAC,CAAC,KAAK,CAAC,iBAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,CAAC,CAAC,MAAM,CAAC,iBAAS,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;QACrD,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACtD,CAAC;IAED,kBAAkB;IAClB,MAAM,UAAU,GAAG;QACjB,iBAAS,CAAC,QAAQ,EAAE,iBAAS,CAAC,MAAM,EAAE,iBAAS,CAAC,KAAK,EAAE,iBAAS,CAAC,OAAO;QACxE,iBAAS,CAAC,MAAM,EAAE,iBAAS,CAAC,WAAW,EAAE,iBAAS,CAAC,MAAM,EAAE,iBAAS,CAAC,OAAO,EAAE,iBAAS,CAAC,MAAM;KAC/F,CAAC;IACF,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC;IACjE,CAAC;IAED,aAAa;IACb,IAAI,GAAG,CAAC,IAAI,KAAK,iBAAS,CAAC,MAAM,EAAE,CAAC;QAClC,CAAC,CAAC,OAAO,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAuB,EAAE,CAAC;QACxC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,OAAO,CAAC,CAAC,KAAK,CAAC,iBAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,CAAC,CAAC,MAAM,CAAC,iBAAS,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAC/C,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;IAC9C,CAAC;IAED,mBAAmB;IACnB,IAAI,GAAG,CAAC,IAAI,KAAK,iBAAS,CAAC,UAAU,EAAE,CAAC;QACtC,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC;IACjE,CAAC;IAED,MAAM,IAAI,wBAAU,CAAC,iCAAiC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7E,CAAC;AA7CD,sCA6CC"}
@@ -0,0 +1,10 @@
1
+ import { Token } from "./lexer";
2
+ import * as AST from "./ast";
3
+ export { ParseError } from "./parser_base";
4
+ export declare class Parser {
5
+ private s;
6
+ constructor(tokens: Token[]);
7
+ parse(): AST.ProgramNode;
8
+ private parseSystemDecl;
9
+ private parseDeclaration;
10
+ }