parser-lr 0.6.1 → 0.8.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 (185) hide show
  1. package/README.md +14 -30
  2. package/bin/parser-lr.js +12759 -13493
  3. package/bin/parser-lr.js.map +1 -1
  4. package/dist/lib/grammar/grammar-from-cst.js +4 -1
  5. package/dist/lib/grammar/grammar-from-cst.js.map +1 -1
  6. package/dist/lib/grammar/grammar.json +86 -820
  7. package/dist/lib/grammar/index.d.ts +1 -1
  8. package/dist/lib/grammar/index.d.ts.map +1 -1
  9. package/dist/lib/grammar/index.js +1 -1
  10. package/dist/lib/grammar/index.js.map +1 -1
  11. package/dist/lib/grammar/meta-grammar-table.d.ts +0 -12
  12. package/dist/lib/grammar/meta-grammar-table.d.ts.map +1 -1
  13. package/dist/lib/grammar/meta-grammar-table.js +5 -22
  14. package/dist/lib/grammar/meta-grammar-table.js.map +1 -1
  15. package/dist/lib/grammar/table-validator.d.ts.map +1 -1
  16. package/dist/lib/grammar/table-validator.js +19 -1
  17. package/dist/lib/grammar/table-validator.js.map +1 -1
  18. package/dist/lib/grammar-entry.d.ts +42 -0
  19. package/dist/lib/grammar-entry.d.ts.map +1 -0
  20. package/dist/lib/grammar-entry.js +45 -0
  21. package/dist/lib/grammar-entry.js.map +1 -0
  22. package/dist/lib/index.d.ts +7 -5
  23. package/dist/lib/index.d.ts.map +1 -1
  24. package/dist/lib/index.js +0 -3
  25. package/dist/lib/index.js.map +1 -1
  26. package/dist/lib/parse-context.d.ts +4 -15
  27. package/dist/lib/parse-context.d.ts.map +1 -1
  28. package/dist/lib/parse-context.js +4 -23
  29. package/dist/lib/parse-context.js.map +1 -1
  30. package/dist/lib/transform/grammar-fixture.js +3 -3
  31. package/dist/lib/transform/grammar-fixture.js.map +1 -1
  32. package/docs/The Ferrite Programming Language.md +568 -0
  33. package/docs/grammar.md +55 -3
  34. package/docs/parser-lr-browser-lib-split.md +174 -0
  35. package/grammars/6502.grammar +2 -2
  36. package/grammars/ferrite.grammar +107 -97
  37. package/grammars/grammar.grammar +19 -140
  38. package/grammars/lisp.grammar +3 -2
  39. package/package.json +7 -2
  40. package/dist/lib/grammar/grammar-json-path.d.ts +0 -2
  41. package/dist/lib/grammar/grammar-json-path.d.ts.map +0 -1
  42. package/dist/lib/grammar/grammar-json-path.esm.d.ts +0 -5
  43. package/dist/lib/grammar/grammar-json-path.esm.d.ts.map +0 -1
  44. package/dist/lib/grammar/grammar-json-path.esm.js +0 -9
  45. package/dist/lib/grammar/grammar-json-path.esm.js.map +0 -1
  46. package/dist/lib/grammar/grammar-json-path.js +0 -2
  47. package/dist/lib/grammar/grammar-json-path.js.map +0 -1
  48. package/dist/lib-cjs/ast/ast-node.js +0 -70
  49. package/dist/lib-cjs/ast/ast-node.js.map +0 -1
  50. package/dist/lib-cjs/errors/index.js +0 -9
  51. package/dist/lib-cjs/errors/index.js.map +0 -1
  52. package/dist/lib-cjs/errors/parser-lr-error.js +0 -52
  53. package/dist/lib-cjs/errors/parser-lr-error.js.map +0 -1
  54. package/dist/lib-cjs/grammar/ast-schema.js +0 -43
  55. package/dist/lib-cjs/grammar/ast-schema.js.map +0 -1
  56. package/dist/lib-cjs/grammar/ast-type.js +0 -3
  57. package/dist/lib-cjs/grammar/ast-type.js.map +0 -1
  58. package/dist/lib-cjs/grammar/expression.js +0 -3
  59. package/dist/lib-cjs/grammar/expression.js.map +0 -1
  60. package/dist/lib-cjs/grammar/grammar-from-cst.js +0 -641
  61. package/dist/lib-cjs/grammar/grammar-from-cst.js.map +0 -1
  62. package/dist/lib-cjs/grammar/grammar-json-path.js +0 -13
  63. package/dist/lib-cjs/grammar/grammar-json-path.js.map +0 -1
  64. package/dist/lib-cjs/grammar/grammar-literals.js +0 -71
  65. package/dist/lib-cjs/grammar/grammar-literals.js.map +0 -1
  66. package/dist/lib-cjs/grammar/grammar.js +0 -64
  67. package/dist/lib-cjs/grammar/grammar.js.map +0 -1
  68. package/dist/lib-cjs/grammar/grammar.json +0 -5760
  69. package/dist/lib-cjs/grammar/index.js +0 -21
  70. package/dist/lib-cjs/grammar/index.js.map +0 -1
  71. package/dist/lib-cjs/grammar/meta-grammar-table.js +0 -68
  72. package/dist/lib-cjs/grammar/meta-grammar-table.js.map +0 -1
  73. package/dist/lib-cjs/grammar/production.js +0 -3
  74. package/dist/lib-cjs/grammar/production.js.map +0 -1
  75. package/dist/lib-cjs/grammar/read-grammar-error.js +0 -22
  76. package/dist/lib-cjs/grammar/read-grammar-error.js.map +0 -1
  77. package/dist/lib-cjs/grammar/read-grammar.js +0 -24
  78. package/dist/lib-cjs/grammar/read-grammar.js.map +0 -1
  79. package/dist/lib-cjs/grammar/table-validator.js +0 -262
  80. package/dist/lib-cjs/grammar/table-validator.js.map +0 -1
  81. package/dist/lib-cjs/grammar/token-rule.js +0 -3
  82. package/dist/lib-cjs/grammar/token-rule.js.map +0 -1
  83. package/dist/lib-cjs/grammar/transform-expression.js +0 -3
  84. package/dist/lib-cjs/grammar/transform-expression.js.map +0 -1
  85. package/dist/lib-cjs/grammar/transform-rule.js +0 -3
  86. package/dist/lib-cjs/grammar/transform-rule.js.map +0 -1
  87. package/dist/lib-cjs/grammar/transform-schema.js +0 -43
  88. package/dist/lib-cjs/grammar/transform-schema.js.map +0 -1
  89. package/dist/lib-cjs/index.js +0 -66
  90. package/dist/lib-cjs/index.js.map +0 -1
  91. package/dist/lib-cjs/lexer/index.js +0 -32
  92. package/dist/lib-cjs/lexer/index.js.map +0 -1
  93. package/dist/lib-cjs/lexer/lexer-compile-error.js +0 -22
  94. package/dist/lib-cjs/lexer/lexer-compile-error.js.map +0 -1
  95. package/dist/lib-cjs/lexer/lexer-compile.js +0 -201
  96. package/dist/lib-cjs/lexer/lexer-compile.js.map +0 -1
  97. package/dist/lib-cjs/lexer/lexer-error.js +0 -22
  98. package/dist/lib-cjs/lexer/lexer-error.js.map +0 -1
  99. package/dist/lib-cjs/lexer/lexer-input-error.js +0 -17
  100. package/dist/lib-cjs/lexer/lexer-input-error.js.map +0 -1
  101. package/dist/lib-cjs/lexer/lexer-state-error.js +0 -19
  102. package/dist/lib-cjs/lexer/lexer-state-error.js.map +0 -1
  103. package/dist/lib-cjs/lexer/lexer.js +0 -278
  104. package/dist/lib-cjs/lexer/lexer.js.map +0 -1
  105. package/dist/lib-cjs/lexer/token.js +0 -44
  106. package/dist/lib-cjs/lexer/token.js.map +0 -1
  107. package/dist/lib-cjs/package.json +0 -3
  108. package/dist/lib-cjs/parse-context-error.js +0 -19
  109. package/dist/lib-cjs/parse-context-error.js.map +0 -1
  110. package/dist/lib-cjs/parse-context.js +0 -137
  111. package/dist/lib-cjs/parse-context.js.map +0 -1
  112. package/dist/lib-cjs/parse-output-error.js +0 -19
  113. package/dist/lib-cjs/parse-output-error.js.map +0 -1
  114. package/dist/lib-cjs/parse-output.js +0 -18
  115. package/dist/lib-cjs/parse-output.js.map +0 -1
  116. package/dist/lib-cjs/parse-table/analysis/first-follow.js +0 -294
  117. package/dist/lib-cjs/parse-table/analysis/first-follow.js.map +0 -1
  118. package/dist/lib-cjs/parse-table/analysis/index.js +0 -9
  119. package/dist/lib-cjs/parse-table/analysis/index.js.map +0 -1
  120. package/dist/lib-cjs/parse-table/bnf/bnf-grammar.js +0 -140
  121. package/dist/lib-cjs/parse-table/bnf/bnf-grammar.js.map +0 -1
  122. package/dist/lib-cjs/parse-table/bnf/bnf-production.js +0 -3
  123. package/dist/lib-cjs/parse-table/bnf/bnf-production.js.map +0 -1
  124. package/dist/lib-cjs/parse-table/bnf/bnf-symbol.js +0 -39
  125. package/dist/lib-cjs/parse-table/bnf/bnf-symbol.js.map +0 -1
  126. package/dist/lib-cjs/parse-table/bnf/desugar-ebnf.js +0 -224
  127. package/dist/lib-cjs/parse-table/bnf/desugar-ebnf.js.map +0 -1
  128. package/dist/lib-cjs/parse-table/bnf/index.js +0 -13
  129. package/dist/lib-cjs/parse-table/bnf/index.js.map +0 -1
  130. package/dist/lib-cjs/parse-table/build-lr-table.js +0 -171
  131. package/dist/lib-cjs/parse-table/build-lr-table.js.map +0 -1
  132. package/dist/lib-cjs/parse-table/index.js +0 -49
  133. package/dist/lib-cjs/parse-table/index.js.map +0 -1
  134. package/dist/lib-cjs/parse-table/lr-algorithm-error.js +0 -19
  135. package/dist/lib-cjs/parse-table/lr-algorithm-error.js.map +0 -1
  136. package/dist/lib-cjs/parse-table/lr-algorithm.js +0 -31
  137. package/dist/lib-cjs/parse-table/lr-algorithm.js.map +0 -1
  138. package/dist/lib-cjs/parse-table/lr0/index.js +0 -14
  139. package/dist/lib-cjs/parse-table/lr0/index.js.map +0 -1
  140. package/dist/lib-cjs/parse-table/lr0/lr0-item-set.js +0 -286
  141. package/dist/lib-cjs/parse-table/lr0/lr0-item-set.js.map +0 -1
  142. package/dist/lib-cjs/parse-table/lr1/index.js +0 -18
  143. package/dist/lib-cjs/parse-table/lr1/index.js.map +0 -1
  144. package/dist/lib-cjs/parse-table/lr1/lr1-item-set.js +0 -432
  145. package/dist/lib-cjs/parse-table/lr1/lr1-item-set.js.map +0 -1
  146. package/dist/lib-cjs/parse-table/parse-table-build-error.js +0 -24
  147. package/dist/lib-cjs/parse-table/parse-table-build-error.js.map +0 -1
  148. package/dist/lib-cjs/parse-table/parse-table-error.js +0 -19
  149. package/dist/lib-cjs/parse-table/parse-table-error.js.map +0 -1
  150. package/dist/lib-cjs/parse-table/parse-table-json.js +0 -12
  151. package/dist/lib-cjs/parse-table/parse-table-json.js.map +0 -1
  152. package/dist/lib-cjs/parse-table/parse-table.js +0 -345
  153. package/dist/lib-cjs/parse-table/parse-table.js.map +0 -1
  154. package/dist/lib-cjs/parse-table/slr/index.js +0 -13
  155. package/dist/lib-cjs/parse-table/slr/index.js.map +0 -1
  156. package/dist/lib-cjs/parse-table/slr/parse-action.js +0 -8
  157. package/dist/lib-cjs/parse-table/slr/parse-action.js.map +0 -1
  158. package/dist/lib-cjs/parse-table/slr/slr-table.js +0 -18
  159. package/dist/lib-cjs/parse-table/slr/slr-table.js.map +0 -1
  160. package/dist/lib-cjs/parse-table/table/index.js +0 -21
  161. package/dist/lib-cjs/parse-table/table/index.js.map +0 -1
  162. package/dist/lib-cjs/parse-table/table/lr-parse-table.js +0 -192
  163. package/dist/lib-cjs/parse-table/table/lr-parse-table.js.map +0 -1
  164. package/dist/lib-cjs/parse-table/table/parse-action.js +0 -54
  165. package/dist/lib-cjs/parse-table/table/parse-action.js.map +0 -1
  166. package/dist/lib-cjs/parse-table/table/table-builder-base.js +0 -153
  167. package/dist/lib-cjs/parse-table/table/table-builder-base.js.map +0 -1
  168. package/dist/lib-cjs/parse-table/token-inventory.js +0 -18
  169. package/dist/lib-cjs/parse-table/token-inventory.js.map +0 -1
  170. package/dist/lib-cjs/parser-lr.js +0 -143
  171. package/dist/lib-cjs/parser-lr.js.map +0 -1
  172. package/dist/lib-cjs/shift-reduce/index.js +0 -11
  173. package/dist/lib-cjs/shift-reduce/index.js.map +0 -1
  174. package/dist/lib-cjs/shift-reduce/shift-reduce-engine.js +0 -224
  175. package/dist/lib-cjs/shift-reduce/shift-reduce-engine.js.map +0 -1
  176. package/dist/lib-cjs/transform/binding-map.js +0 -82
  177. package/dist/lib-cjs/transform/binding-map.js.map +0 -1
  178. package/dist/lib-cjs/transform/cst-transformer.js +0 -480
  179. package/dist/lib-cjs/transform/cst-transformer.js.map +0 -1
  180. package/dist/lib-cjs/transform/grammar-fixture.js +0 -109
  181. package/dist/lib-cjs/transform/grammar-fixture.js.map +0 -1
  182. package/dist/lib-cjs/transform/index.js +0 -12
  183. package/dist/lib-cjs/transform/index.js.map +0 -1
  184. package/docs/parser-lr-enhancement-proposals.md +0 -337
  185. package/grammars/fixtures/table-only-import/table-only-smoke.cjs +0 -38
@@ -236,193 +236,72 @@ grammar
236
236
 
237
237
  ast
238
238
  grammar_file =
239
- name_decl
240
- { section }
241
- start_decl
242
- grammar_section
243
- [ ast_section ]
244
- [ transform_section ]
245
- ;
246
-
247
- name_decl =
248
- name_kw grammar_name semicolon
249
- ;
250
-
251
- grammar_name =
252
- identifier
253
- | string_literal
254
- ;
255
-
256
- section =
257
- token_section
258
- | skip_section
259
- | states_section
239
+ #sections { section }
260
240
  ;
261
241
 
262
242
  token_section =
263
- tokens_kw token_def { token_def }
243
+ #definitions { token_def }
264
244
  ;
265
245
 
266
246
  skip_section =
267
- skip_kw token_def { token_def }
268
- ;
269
-
270
- states_section =
271
- states_kw state_name { comma state_name } semicolon
272
- ;
273
-
274
- token_def =
275
- identifier equal regex_literal semicolon
276
- ;
277
-
278
- state_name =
279
- identifier
280
- ;
281
-
282
- start_decl =
283
- start_kw identifier semicolon
247
+ #definitions { token_def }
284
248
  ;
285
249
 
286
250
  grammar_section =
287
- grammar_kw production { production }
251
+ #productions { production }
288
252
  ;
289
253
 
290
254
  ast_section =
291
- ast_kw ast_type { ast_type }
255
+ #types { ast_type }
292
256
  ;
293
257
 
294
258
  transform_section =
295
- transform_kw transform_rule { transform_rule }
296
- ;
297
-
298
- production =
299
- identifier equal expression semicolon
300
- ;
301
-
302
- ast_type =
303
- identifier equal expression semicolon
259
+ #rules { transform_rule }
304
260
  ;
305
261
 
306
262
  transform_rule =
307
- identifier arrow labeled_transform { bar labeled_transform } semicolon
308
- ;
309
-
310
- labeled_transform =
311
- hash identifier transform_expr
312
- ;
313
-
314
- transform_expr =
315
- drop_kw
316
- | pass_expr
317
- | fold_left_expr
318
- | fold_right_expr
319
- | flatten_expr
320
- | build_expr
321
- ;
322
-
323
- pass_expr =
324
- pass_kw lpar reference rpar
325
- ;
326
-
327
- fold_left_expr =
328
- fold_left_kw lpar build_target comma reference_list rpar
329
- ;
330
-
331
- fold_right_expr =
332
- fold_right_kw lpar build_target comma reference_list rpar
333
- ;
334
-
335
- flatten_expr =
336
- flatten_kw lpar build_target comma reference comma reference rpar
337
- ;
338
-
339
- build_expr =
340
- build_target [ lpar reference_list rpar ]
341
- ;
342
-
343
- build_target =
344
- identifier dot hash identifier
263
+ #alternatives { labeled_transform }
345
264
  ;
346
265
 
347
266
  reference_list =
348
- reference { comma reference }
349
- ;
350
-
351
- reference =
352
- identifier
353
- ;
354
-
355
- expression =
356
- choice
267
+ #references { reference }
357
268
  ;
358
269
 
359
270
  choice =
360
- alternative { bar alternative }
361
- ;
362
-
363
- alternative =
364
- labeled_alternative
365
- ;
366
-
367
- labeled_alternative =
368
- [ hash identifier ] sequence
271
+ #alternatives { alternative }
369
272
  ;
370
273
 
371
274
  sequence =
372
- factor { factor }
373
- ;
374
-
375
- factor =
376
- bracketed
377
- | repeat
378
- | group
379
- | primary
380
- ;
381
-
382
- bracketed =
383
- lbracket expression rbracket [ colon identifier ]
384
- ;
385
-
386
- repeat =
387
- lbrace expression rbrace
388
- ;
389
-
390
- group =
391
- lpar expression rpar
392
- ;
393
-
394
- primary =
395
- string_literal
396
- | identifier
275
+ #factors { factor }
397
276
  ;
398
277
 
399
278
  transform
400
279
  grammar_file$repeat_0 ->
401
280
  #main flatten(grammar_file.#sections, section, grammar_file$repeat_0) ;
402
281
 
403
- token_section$repeat_1 ->
282
+ token_section ->
404
283
  #main flatten(token_section.#definitions, token_def, token_section$repeat_1) ;
405
284
 
406
- skip_section$repeat_2 ->
285
+ skip_section ->
407
286
  #main flatten(skip_section.#definitions, token_def, skip_section$repeat_2) ;
408
287
 
409
- grammar_section$repeat_4 ->
288
+ grammar_section ->
410
289
  #main flatten(grammar_section.#productions, production, grammar_section$repeat_4) ;
411
290
 
412
- ast_section$repeat_5 ->
291
+ ast_section ->
413
292
  #main flatten(ast_section.#types, ast_type, ast_section$repeat_5) ;
414
293
 
415
- transform_section$repeat_6 ->
294
+ transform_section ->
416
295
  #main flatten(transform_section.#rules, transform_rule, transform_section$repeat_6) ;
417
296
 
418
- transform_rule$repeat_7 ->
297
+ transform_rule ->
419
298
  #main flatten(transform_rule.#alternatives, labeled_transform, transform_rule$repeat_7) ;
420
299
 
421
- reference_list$repeat_8 ->
300
+ reference_list ->
422
301
  #main flatten(reference_list.#references, reference, reference_list$repeat_8) ;
423
302
 
424
- choice$repeat_9 ->
303
+ choice ->
425
304
  #main flatten(choice.#alternatives, alternative, choice$repeat_9) ;
426
305
 
427
- sequence$repeat_10 ->
306
+ sequence ->
428
307
  #main flatten(sequence.#factors, factor, sequence$repeat_10) ;
@@ -51,16 +51,17 @@ grammar
51
51
 
52
52
  ast
53
53
  program =
54
- { form }
54
+ #program { form }
55
55
  ;
56
56
 
57
57
  form =
58
58
  #list list
59
59
  | #atom atom
60
+ | #elements { form }
60
61
  ;
61
62
 
62
63
  list =
63
- [open]:lpar
64
+ #list [open]:lpar
64
65
  { [element]:form }
65
66
  [close]:rpar
66
67
  ;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "parser-lr",
3
3
  "author": "Adam R Moss <adamrmoss@gmail.com>",
4
- "version": "0.6.1",
4
+ "version": "0.8.0",
5
5
  "description": "Shift-reduce parser library for EBNF grammars with LR table generation, lexing, and CST-to-AST transforms",
6
6
  "keywords": [
7
7
  "ast",
@@ -41,8 +41,12 @@
41
41
  ".": {
42
42
  "types": "./dist/lib/index.d.ts",
43
43
  "import": "./dist/lib/index.js",
44
- "require": "./dist/lib-cjs/index.js",
45
44
  "default": "./dist/lib/index.js"
45
+ },
46
+ "./grammar": {
47
+ "types": "./dist/lib/grammar-entry.d.ts",
48
+ "import": "./dist/lib/grammar-entry.js",
49
+ "default": "./dist/lib/grammar-entry.js"
46
50
  }
47
51
  },
48
52
  "bin": {
@@ -82,6 +86,7 @@
82
86
  "@types/jest": "29.x",
83
87
  "@types/node": "22.x",
84
88
  "commander": "12.x",
89
+ "esbuild": "0.x",
85
90
  "jest": "29.x",
86
91
  "rollup": "4.x",
87
92
  "ts-jest": "29.x",
@@ -1,2 +0,0 @@
1
- export { grammarJsonDirectory } from './grammar-json-path.esm.js';
2
- //# sourceMappingURL=grammar-json-path.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"grammar-json-path.d.ts","sourceRoot":"","sources":["../../../src/lib/grammar/grammar-json-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Returns the directory containing bootstrapped `grammar.json` for the ESM build.
3
- */
4
- export declare function grammarJsonDirectory(): string;
5
- //# sourceMappingURL=grammar-json-path.esm.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"grammar-json-path.esm.d.ts","sourceRoot":"","sources":["../../../src/lib/grammar/grammar-json-path.esm.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAG7C"}
@@ -1,9 +0,0 @@
1
- import { dirname } from 'node:path';
2
- import { fileURLToPath } from 'node:url';
3
- /**
4
- * Returns the directory containing bootstrapped `grammar.json` for the ESM build.
5
- */
6
- export function grammarJsonDirectory() {
7
- return dirname(fileURLToPath(import.meta.url));
8
- }
9
- //# sourceMappingURL=grammar-json-path.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"grammar-json-path.esm.js","sourceRoot":"","sources":["../../../src/lib/grammar/grammar-json-path.esm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAEhC,OAAO,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACnD,CAAC"}
@@ -1,2 +0,0 @@
1
- export { grammarJsonDirectory } from './grammar-json-path.esm.js';
2
- //# sourceMappingURL=grammar-json-path.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"grammar-json-path.js","sourceRoot":"","sources":["../../../src/lib/grammar/grammar-json-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -1,70 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AstNode = void 0;
4
- /**
5
- * Tree node used for both parse (CST) and abstract (AST) phases.
6
- *
7
- * After parsing, {@link symbol} is a grammar production and {@link variant}
8
- * is the matched `#` label. After transform, {@link symbol} is an AST type
9
- * name and {@link variant} is the AST alternative label.
10
- */
11
- class AstNode {
12
- symbol;
13
- children;
14
- text;
15
- location;
16
- variant;
17
- productionId;
18
- origin;
19
- /**
20
- * Creates a tree node.
21
- *
22
- * @param symbol - Production or AST type name.
23
- * @param children - Child subtrees.
24
- * @param text - Lexeme or literal text for leaves; null for interior nodes.
25
- * @param location - Optional source span.
26
- * @param variant - `#` alternative label when present.
27
- * @param productionId - Parse table production id for CST nodes, or null after transform.
28
- * @param origin - Source production or synthetic construct name for CST nodes.
29
- */
30
- constructor(symbol, children = [], text = null, location = null, variant = null, productionId = null, origin = null) {
31
- this.symbol = symbol;
32
- this.children = children;
33
- this.text = text;
34
- this.location = location;
35
- this.variant = variant;
36
- this.productionId = productionId;
37
- this.origin = origin;
38
- }
39
- /**
40
- * Whether this node is a terminal leaf with lexeme text.
41
- */
42
- get isTerminal() {
43
- return this.text !== null;
44
- }
45
- /**
46
- * Builds an interior node from a grammar or AST reduction.
47
- *
48
- * @param symbol - Production or AST type name.
49
- * @param children - Reduced child subtrees.
50
- * @param location - Optional source span covering the full production.
51
- * @param variant - `#` alternative label when present.
52
- * @param productionId - Parse table production id for CST nodes.
53
- * @param origin - Source production or synthetic construct name for CST nodes.
54
- */
55
- static rule(symbol, children, location = null, variant = null, productionId = null, origin = null) {
56
- return new AstNode(symbol, children, null, location, variant, productionId, origin);
57
- }
58
- /**
59
- * Builds a terminal leaf node.
60
- *
61
- * @param symbol - Terminal symbol name.
62
- * @param text - Matched lexeme text.
63
- * @param location - Optional source span for the lexeme.
64
- */
65
- static terminal(symbol, text, location = null) {
66
- return new AstNode(symbol, [], text, location, null);
67
- }
68
- }
69
- exports.AstNode = AstNode;
70
- //# sourceMappingURL=ast-node.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ast-node.js","sourceRoot":"","sources":["../../../src/lib/ast/ast-node.ts"],"names":[],"mappings":";;;AASA;;;;;;GAMG;AACH,MAAa,OAAO;IAcI;IACA;IACA;IACA;IACA;IACA;IACA;IAlBpB;;;;;;;;;;OAUG;IACH,YACoB,MAAc,EACd,WAA+B,EAAE,EACjC,OAAsB,IAAI,EAC1B,WAAkC,IAAI,EACtC,UAAyB,IAAI,EAC7B,eAA8B,IAAI,EAClC,SAAwB,IAAI;QAN5B,WAAM,GAAN,MAAM,CAAQ;QACd,aAAQ,GAAR,QAAQ,CAAyB;QACjC,SAAI,GAAJ,IAAI,CAAsB;QAC1B,aAAQ,GAAR,QAAQ,CAA8B;QACtC,YAAO,GAAP,OAAO,CAAsB;QAC7B,iBAAY,GAAZ,YAAY,CAAsB;QAClC,WAAM,GAAN,MAAM,CAAsB;IAGhD,CAAC;IAED;;OAEG;IACH,IAAW,UAAU;QAEjB,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;IAC9B,CAAC;IAED;;;;;;;;;OASG;IACI,MAAM,CAAC,IAAI,CACd,MAAc,EACd,QAA4B,EAC5B,WAAkC,IAAI,EACtC,UAAyB,IAAI,EAC7B,eAA8B,IAAI,EAClC,SAAwB,IAAI;QAG5B,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IACxF,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,QAAQ,CAClB,MAAc,EACd,IAAY,EACZ,WAAkC,IAAI;QAGtC,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;CACJ;AAtED,0BAsEC"}
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ParserLrError = exports.messageContainsStackTrace = exports.isParserLrError = exports.formatUserError = void 0;
4
- var parser_lr_error_js_1 = require("./parser-lr-error.js");
5
- Object.defineProperty(exports, "formatUserError", { enumerable: true, get: function () { return parser_lr_error_js_1.formatUserError; } });
6
- Object.defineProperty(exports, "isParserLrError", { enumerable: true, get: function () { return parser_lr_error_js_1.isParserLrError; } });
7
- Object.defineProperty(exports, "messageContainsStackTrace", { enumerable: true, get: function () { return parser_lr_error_js_1.messageContainsStackTrace; } });
8
- Object.defineProperty(exports, "ParserLrError", { enumerable: true, get: function () { return parser_lr_error_js_1.ParserLrError; } });
9
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/errors/index.ts"],"names":[],"mappings":";;;AAAA,2DAK8B;AAJ1B,qHAAA,eAAe,OAAA;AACf,qHAAA,eAAe,OAAA;AACf,+HAAA,yBAAyB,OAAA;AACzB,mHAAA,aAAa,OAAA"}
@@ -1,52 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ParserLrError = void 0;
4
- exports.isParserLrError = isParserLrError;
5
- exports.formatUserError = formatUserError;
6
- exports.messageContainsStackTrace = messageContainsStackTrace;
7
- /**
8
- * Base class for library errors surfaced to callers and the CLI.
9
- */
10
- class ParserLrError extends Error {
11
- /**
12
- * Creates a parser-lr error with a caller-safe message.
13
- *
14
- * @param message - Human-readable failure description without stack frames.
15
- */
16
- constructor(message) {
17
- super(message);
18
- this.name = new.target.name;
19
- }
20
- }
21
- exports.ParserLrError = ParserLrError;
22
- /**
23
- * Returns whether a value is a parser-lr domain error.
24
- *
25
- * @param error - Value to test.
26
- */
27
- function isParserLrError(error) {
28
- return error instanceof ParserLrError;
29
- }
30
- /**
31
- * Returns a user-facing message for an error value.
32
- *
33
- * @param error - Thrown value or Error instance.
34
- */
35
- function formatUserError(error) {
36
- if (error instanceof ParserLrError) {
37
- return error.message;
38
- }
39
- if (error instanceof Error) {
40
- return error.message;
41
- }
42
- return String(error);
43
- }
44
- /**
45
- * Returns whether a message contains embedded stack trace frames.
46
- *
47
- * @param message - Error message text to inspect.
48
- */
49
- function messageContainsStackTrace(message) {
50
- return /\n\s+at .+/.test(message);
51
- }
52
- //# sourceMappingURL=parser-lr-error.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parser-lr-error.js","sourceRoot":"","sources":["../../../src/lib/errors/parser-lr-error.ts"],"names":[],"mappings":";;;AAsBA,0CAGC;AAOD,0CAaC;AAOD,8DAGC;AAvDD;;GAEG;AACH,MAAa,aAAc,SAAQ,KAAK;IAEpC;;;;OAIG;IACH,YAAmB,OAAe;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IAChC,CAAC;CACJ;AAZD,sCAYC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,KAAc;IAE1C,OAAO,KAAK,YAAY,aAAa,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,KAAc;IAE1C,IAAI,KAAK,YAAY,aAAa,EAClC,CAAC;QACG,OAAO,KAAK,CAAC,OAAO,CAAC;IACzB,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAC1B,CAAC;QACG,OAAO,KAAK,CAAC,OAAO,CAAC;IACzB,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,SAAgB,yBAAyB,CAAC,OAAe;IAErD,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC"}
@@ -1,43 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AstSchema = void 0;
4
- /**
5
- * AST shape declared in the `ast` section of a `.grammar` file.
6
- */
7
- class AstSchema {
8
- types;
9
- typesByName;
10
- /**
11
- * Creates an AST schema from declared types.
12
- *
13
- * @param types - Named AST types from the `ast` section.
14
- */
15
- constructor(types) {
16
- this.types = types;
17
- // Index types by name for lookup.
18
- const typesByName = new Map();
19
- for (const type of types) {
20
- typesByName.set(type.name, type);
21
- }
22
- this.typesByName = typesByName;
23
- }
24
- /**
25
- * Returns an AST type by name.
26
- *
27
- * @param name - Type name to look up.
28
- * @returns The matching type, or null when the name is undefined.
29
- */
30
- type(name) {
31
- return this.typesByName.get(name) ?? null;
32
- }
33
- /**
34
- * Whether a named AST type is defined in this schema.
35
- *
36
- * @param name - Type name to test.
37
- */
38
- hasType(name) {
39
- return this.typesByName.has(name);
40
- }
41
- }
42
- exports.AstSchema = AstSchema;
43
- //# sourceMappingURL=ast-schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ast-schema.js","sourceRoot":"","sources":["../../../src/lib/grammar/ast-schema.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACH,MAAa,SAAS;IASiB;IAPlB,WAAW,CAA+B;IAE3D;;;;OAIG;IACH,YAAmC,KAAyB;QAAzB,UAAK,GAAL,KAAK,CAAoB;QAExD,kCAAkC;QAClC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAmB,CAAC;QAE/C,KAAK,MAAM,IAAI,IAAI,KAAK,EACxB,CAAC;YACG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACI,IAAI,CAAC,IAAY;QAEpB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACI,OAAO,CAAC,IAAY;QAEvB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;CACJ;AA1CD,8BA0CC"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=ast-type.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ast-type.js","sourceRoot":"","sources":["../../../src/lib/grammar/ast-type.ts"],"names":[],"mappings":""}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=expression.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"expression.js","sourceRoot":"","sources":["../../../src/lib/grammar/expression.ts"],"names":[],"mappings":""}