parser-lr 0.0.0 → 0.2.1

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 (262) hide show
  1. package/README.md +112 -1
  2. package/bin/parser-lr.js +12502 -16
  3. package/bin/parser-lr.js.map +1 -1
  4. package/dist/lib/ast/ast-node.d.ts +59 -0
  5. package/dist/lib/ast/ast-node.d.ts.map +1 -0
  6. package/dist/lib/ast/ast-node.js +66 -0
  7. package/dist/lib/ast/ast-node.js.map +1 -0
  8. package/dist/lib/errors/index.d.ts +2 -0
  9. package/dist/lib/errors/index.d.ts.map +1 -0
  10. package/dist/lib/errors/index.js +2 -0
  11. package/dist/lib/errors/index.js.map +1 -0
  12. package/dist/lib/errors/parser-lr-error.d.ts +30 -0
  13. package/dist/lib/errors/parser-lr-error.d.ts.map +1 -0
  14. package/dist/lib/errors/parser-lr-error.js +45 -0
  15. package/dist/lib/errors/parser-lr-error.js.map +1 -0
  16. package/dist/lib/grammar/ast-schema.d.ts +28 -0
  17. package/dist/lib/grammar/ast-schema.d.ts.map +1 -0
  18. package/dist/lib/grammar/ast-schema.js +39 -0
  19. package/dist/lib/grammar/ast-schema.js.map +1 -0
  20. package/dist/lib/grammar/ast-type.d.ts +12 -0
  21. package/dist/lib/grammar/ast-type.d.ts.map +1 -0
  22. package/dist/lib/grammar/ast-type.js +2 -0
  23. package/dist/lib/grammar/ast-type.js.map +1 -0
  24. package/dist/lib/grammar/expression.d.ts +69 -0
  25. package/dist/lib/grammar/expression.d.ts.map +1 -0
  26. package/dist/lib/grammar/expression.js +2 -0
  27. package/dist/lib/grammar/expression.js.map +1 -0
  28. package/dist/lib/grammar/grammar-from-cst.d.ts +10 -0
  29. package/dist/lib/grammar/grammar-from-cst.d.ts.map +1 -0
  30. package/dist/lib/grammar/grammar-from-cst.js +638 -0
  31. package/dist/lib/grammar/grammar-from-cst.js.map +1 -0
  32. package/dist/lib/grammar/grammar-literals.d.ts +18 -0
  33. package/dist/lib/grammar/grammar-literals.d.ts.map +1 -0
  34. package/dist/lib/grammar/grammar-literals.js +67 -0
  35. package/dist/lib/grammar/grammar-literals.js.map +1 -0
  36. package/dist/lib/grammar/grammar.d.ts +45 -0
  37. package/dist/lib/grammar/grammar.d.ts.map +1 -0
  38. package/dist/lib/grammar/grammar.js +60 -0
  39. package/dist/lib/grammar/grammar.js.map +1 -0
  40. package/dist/lib/grammar/grammar.json +7950 -0
  41. package/dist/lib/grammar/index.d.ts +13 -0
  42. package/dist/lib/grammar/index.d.ts.map +1 -0
  43. package/dist/lib/grammar/index.js +7 -0
  44. package/dist/lib/grammar/index.js.map +1 -0
  45. package/dist/lib/grammar/meta-grammar-table.d.ts +19 -0
  46. package/dist/lib/grammar/meta-grammar-table.d.ts.map +1 -0
  47. package/dist/lib/grammar/meta-grammar-table.js +32 -0
  48. package/dist/lib/grammar/meta-grammar-table.js.map +1 -0
  49. package/dist/lib/grammar/production.d.ts +9 -0
  50. package/dist/lib/grammar/production.d.ts.map +1 -0
  51. package/dist/lib/grammar/production.js +2 -0
  52. package/dist/lib/grammar/production.js.map +1 -0
  53. package/dist/lib/grammar/read-grammar-error.d.ts +15 -0
  54. package/dist/lib/grammar/read-grammar-error.d.ts.map +1 -0
  55. package/dist/lib/grammar/read-grammar-error.js +18 -0
  56. package/dist/lib/grammar/read-grammar-error.js.map +1 -0
  57. package/dist/lib/grammar/read-grammar.d.ts +9 -0
  58. package/dist/lib/grammar/read-grammar.d.ts.map +1 -0
  59. package/dist/lib/grammar/read-grammar.js +21 -0
  60. package/dist/lib/grammar/read-grammar.js.map +1 -0
  61. package/dist/lib/grammar/token-rule.d.ts +11 -0
  62. package/dist/lib/grammar/token-rule.d.ts.map +1 -0
  63. package/dist/lib/grammar/token-rule.js +2 -0
  64. package/dist/lib/grammar/token-rule.js.map +1 -0
  65. package/dist/lib/grammar/transform-expression.d.ts +55 -0
  66. package/dist/lib/grammar/transform-expression.d.ts.map +1 -0
  67. package/dist/lib/grammar/transform-expression.js +2 -0
  68. package/dist/lib/grammar/transform-expression.js.map +1 -0
  69. package/dist/lib/grammar/transform-rule.d.ts +16 -0
  70. package/dist/lib/grammar/transform-rule.d.ts.map +1 -0
  71. package/dist/lib/grammar/transform-rule.js +2 -0
  72. package/dist/lib/grammar/transform-rule.js.map +1 -0
  73. package/dist/lib/grammar/transform-schema.d.ts +28 -0
  74. package/dist/lib/grammar/transform-schema.d.ts.map +1 -0
  75. package/dist/lib/grammar/transform-schema.js +39 -0
  76. package/dist/lib/grammar/transform-schema.js.map +1 -0
  77. package/dist/lib/index.d.ts +19 -0
  78. package/dist/lib/index.d.ts.map +1 -1
  79. package/dist/lib/index.js +13 -0
  80. package/dist/lib/index.js.map +1 -1
  81. package/dist/lib/lexer/index.d.ts +10 -0
  82. package/dist/lib/lexer/index.d.ts.map +1 -0
  83. package/dist/lib/lexer/index.js +8 -0
  84. package/dist/lib/lexer/index.js.map +1 -0
  85. package/dist/lib/lexer/lexer-compile-error.d.ts +15 -0
  86. package/dist/lib/lexer/lexer-compile-error.d.ts.map +1 -0
  87. package/dist/lib/lexer/lexer-compile-error.js +18 -0
  88. package/dist/lib/lexer/lexer-compile-error.js.map +1 -0
  89. package/dist/lib/lexer/lexer-compile.d.ts +94 -0
  90. package/dist/lib/lexer/lexer-compile.d.ts.map +1 -0
  91. package/dist/lib/lexer/lexer-compile.js +189 -0
  92. package/dist/lib/lexer/lexer-compile.js.map +1 -0
  93. package/dist/lib/lexer/lexer-error.d.ts +15 -0
  94. package/dist/lib/lexer/lexer-error.d.ts.map +1 -0
  95. package/dist/lib/lexer/lexer-error.js +18 -0
  96. package/dist/lib/lexer/lexer-error.js.map +1 -0
  97. package/dist/lib/lexer/lexer-input-error.d.ts +11 -0
  98. package/dist/lib/lexer/lexer-input-error.d.ts.map +1 -0
  99. package/dist/lib/lexer/lexer-input-error.js +13 -0
  100. package/dist/lib/lexer/lexer-input-error.js.map +1 -0
  101. package/dist/lib/lexer/lexer-state-error.d.ts +13 -0
  102. package/dist/lib/lexer/lexer-state-error.d.ts.map +1 -0
  103. package/dist/lib/lexer/lexer-state-error.js +15 -0
  104. package/dist/lib/lexer/lexer-state-error.js.map +1 -0
  105. package/dist/lib/lexer/lexer.d.ts +111 -0
  106. package/dist/lib/lexer/lexer.d.ts.map +1 -0
  107. package/dist/lib/lexer/lexer.js +270 -0
  108. package/dist/lib/lexer/lexer.js.map +1 -0
  109. package/dist/lib/lexer/token.d.ts +34 -0
  110. package/dist/lib/lexer/token.d.ts.map +1 -0
  111. package/dist/lib/lexer/token.js +38 -0
  112. package/dist/lib/lexer/token.js.map +1 -0
  113. package/dist/lib/parse-context-error.d.ts +13 -0
  114. package/dist/lib/parse-context-error.d.ts.map +1 -0
  115. package/dist/lib/parse-context-error.js +15 -0
  116. package/dist/lib/parse-context-error.js.map +1 -0
  117. package/dist/lib/parse-context.d.ts +106 -0
  118. package/dist/lib/parse-context.d.ts.map +1 -0
  119. package/dist/lib/parse-context.js +133 -0
  120. package/dist/lib/parse-context.js.map +1 -0
  121. package/dist/lib/parse-output-error.d.ts +13 -0
  122. package/dist/lib/parse-output-error.d.ts.map +1 -0
  123. package/dist/lib/parse-output-error.js +15 -0
  124. package/dist/lib/parse-output-error.js.map +1 -0
  125. package/dist/lib/parse-output.d.ts +10 -0
  126. package/dist/lib/parse-output.d.ts.map +1 -0
  127. package/dist/lib/parse-output.js +15 -0
  128. package/dist/lib/parse-output.js.map +1 -0
  129. package/dist/lib/parse-table/analysis/first-follow.d.ts +124 -0
  130. package/dist/lib/parse-table/analysis/first-follow.d.ts.map +1 -0
  131. package/dist/lib/parse-table/analysis/first-follow.js +274 -0
  132. package/dist/lib/parse-table/analysis/first-follow.js.map +1 -0
  133. package/dist/lib/parse-table/analysis/index.d.ts +2 -0
  134. package/dist/lib/parse-table/analysis/index.d.ts.map +1 -0
  135. package/dist/lib/parse-table/analysis/index.js +2 -0
  136. package/dist/lib/parse-table/analysis/index.js.map +1 -0
  137. package/dist/lib/parse-table/bnf/bnf-grammar.d.ts +65 -0
  138. package/dist/lib/parse-table/bnf/bnf-grammar.d.ts.map +1 -0
  139. package/dist/lib/parse-table/bnf/bnf-grammar.js +136 -0
  140. package/dist/lib/parse-table/bnf/bnf-grammar.js.map +1 -0
  141. package/dist/lib/parse-table/bnf/bnf-production.d.ts +12 -0
  142. package/dist/lib/parse-table/bnf/bnf-production.d.ts.map +1 -0
  143. package/dist/lib/parse-table/bnf/bnf-production.js +2 -0
  144. package/dist/lib/parse-table/bnf/bnf-production.js.map +1 -0
  145. package/dist/lib/parse-table/bnf/bnf-symbol.d.ts +40 -0
  146. package/dist/lib/parse-table/bnf/bnf-symbol.d.ts.map +1 -0
  147. package/dist/lib/parse-table/bnf/bnf-symbol.js +35 -0
  148. package/dist/lib/parse-table/bnf/bnf-symbol.js.map +1 -0
  149. package/dist/lib/parse-table/bnf/desugar-ebnf.d.ts +104 -0
  150. package/dist/lib/parse-table/bnf/desugar-ebnf.d.ts.map +1 -0
  151. package/dist/lib/parse-table/bnf/desugar-ebnf.js +217 -0
  152. package/dist/lib/parse-table/bnf/desugar-ebnf.js.map +1 -0
  153. package/dist/lib/parse-table/bnf/index.d.ts +6 -0
  154. package/dist/lib/parse-table/bnf/index.d.ts.map +1 -0
  155. package/dist/lib/parse-table/bnf/index.js +4 -0
  156. package/dist/lib/parse-table/bnf/index.js.map +1 -0
  157. package/dist/lib/parse-table/build-lr-table.d.ts +11 -0
  158. package/dist/lib/parse-table/build-lr-table.d.ts.map +1 -0
  159. package/dist/lib/parse-table/build-lr-table.js +158 -0
  160. package/dist/lib/parse-table/build-lr-table.js.map +1 -0
  161. package/dist/lib/parse-table/index.d.ts +22 -0
  162. package/dist/lib/parse-table/index.d.ts.map +1 -0
  163. package/dist/lib/parse-table/index.js +15 -0
  164. package/dist/lib/parse-table/index.js.map +1 -0
  165. package/dist/lib/parse-table/lr-algorithm-error.d.ts +13 -0
  166. package/dist/lib/parse-table/lr-algorithm-error.d.ts.map +1 -0
  167. package/dist/lib/parse-table/lr-algorithm-error.js +15 -0
  168. package/dist/lib/parse-table/lr-algorithm-error.js.map +1 -0
  169. package/dist/lib/parse-table/lr-algorithm.d.ts +19 -0
  170. package/dist/lib/parse-table/lr-algorithm.d.ts.map +1 -0
  171. package/dist/lib/parse-table/lr-algorithm.js +27 -0
  172. package/dist/lib/parse-table/lr-algorithm.js.map +1 -0
  173. package/dist/lib/parse-table/lr0/index.d.ts +3 -0
  174. package/dist/lib/parse-table/lr0/index.d.ts.map +1 -0
  175. package/dist/lib/parse-table/lr0/index.js +2 -0
  176. package/dist/lib/parse-table/lr0/index.js.map +1 -0
  177. package/dist/lib/parse-table/lr0/lr0-item-set.d.ts +106 -0
  178. package/dist/lib/parse-table/lr0/lr0-item-set.d.ts.map +1 -0
  179. package/dist/lib/parse-table/lr0/lr0-item-set.js +235 -0
  180. package/dist/lib/parse-table/lr0/lr0-item-set.js.map +1 -0
  181. package/dist/lib/parse-table/lr1/index.d.ts +3 -0
  182. package/dist/lib/parse-table/lr1/index.d.ts.map +1 -0
  183. package/dist/lib/parse-table/lr1/index.js +2 -0
  184. package/dist/lib/parse-table/lr1/index.js.map +1 -0
  185. package/dist/lib/parse-table/lr1/lr1-item-set.d.ts +157 -0
  186. package/dist/lib/parse-table/lr1/lr1-item-set.d.ts.map +1 -0
  187. package/dist/lib/parse-table/lr1/lr1-item-set.js +380 -0
  188. package/dist/lib/parse-table/lr1/lr1-item-set.js.map +1 -0
  189. package/dist/lib/parse-table/parse-table-build-error.d.ts +17 -0
  190. package/dist/lib/parse-table/parse-table-build-error.d.ts.map +1 -0
  191. package/dist/lib/parse-table/parse-table-build-error.js +20 -0
  192. package/dist/lib/parse-table/parse-table-build-error.js.map +1 -0
  193. package/dist/lib/parse-table/parse-table-error.d.ts +13 -0
  194. package/dist/lib/parse-table/parse-table-error.d.ts.map +1 -0
  195. package/dist/lib/parse-table/parse-table-error.js +15 -0
  196. package/dist/lib/parse-table/parse-table-error.js.map +1 -0
  197. package/dist/lib/parse-table/parse-table-json.d.ts +50 -0
  198. package/dist/lib/parse-table/parse-table-json.d.ts.map +1 -0
  199. package/dist/lib/parse-table/parse-table-json.js +9 -0
  200. package/dist/lib/parse-table/parse-table-json.js.map +1 -0
  201. package/dist/lib/parse-table/parse-table.d.ts +154 -0
  202. package/dist/lib/parse-table/parse-table.d.ts.map +1 -0
  203. package/dist/lib/parse-table/parse-table.js +314 -0
  204. package/dist/lib/parse-table/parse-table.js.map +1 -0
  205. package/dist/lib/parse-table/slr/index.d.ts +4 -0
  206. package/dist/lib/parse-table/slr/index.d.ts.map +1 -0
  207. package/dist/lib/parse-table/slr/index.js +3 -0
  208. package/dist/lib/parse-table/slr/index.js.map +1 -0
  209. package/dist/lib/parse-table/slr/parse-action.d.ts +3 -0
  210. package/dist/lib/parse-table/slr/parse-action.d.ts.map +1 -0
  211. package/dist/lib/parse-table/slr/parse-action.js +2 -0
  212. package/dist/lib/parse-table/slr/parse-action.js.map +1 -0
  213. package/dist/lib/parse-table/slr/slr-table.d.ts +14 -0
  214. package/dist/lib/parse-table/slr/slr-table.d.ts.map +1 -0
  215. package/dist/lib/parse-table/slr/slr-table.js +14 -0
  216. package/dist/lib/parse-table/slr/slr-table.js.map +1 -0
  217. package/dist/lib/parse-table/table/index.d.ts +5 -0
  218. package/dist/lib/parse-table/table/index.d.ts.map +1 -0
  219. package/dist/lib/parse-table/table/index.js +4 -0
  220. package/dist/lib/parse-table/table/index.js.map +1 -0
  221. package/dist/lib/parse-table/table/lr-parse-table.d.ts +92 -0
  222. package/dist/lib/parse-table/table/lr-parse-table.d.ts.map +1 -0
  223. package/dist/lib/parse-table/table/lr-parse-table.js +144 -0
  224. package/dist/lib/parse-table/table/lr-parse-table.js.map +1 -0
  225. package/dist/lib/parse-table/table/parse-action.d.ts +47 -0
  226. package/dist/lib/parse-table/table/parse-action.d.ts.map +1 -0
  227. package/dist/lib/parse-table/table/parse-action.js +49 -0
  228. package/dist/lib/parse-table/table/parse-action.js.map +1 -0
  229. package/dist/lib/parse-table/table/table-builder-base.d.ts +63 -0
  230. package/dist/lib/parse-table/table/table-builder-base.d.ts.map +1 -0
  231. package/dist/lib/parse-table/table/table-builder-base.js +129 -0
  232. package/dist/lib/parse-table/table/table-builder-base.js.map +1 -0
  233. package/dist/lib/parse-table/token-inventory.d.ts +9 -0
  234. package/dist/lib/parse-table/token-inventory.d.ts.map +1 -0
  235. package/dist/lib/parse-table/token-inventory.js +15 -0
  236. package/dist/lib/parse-table/token-inventory.js.map +1 -0
  237. package/dist/lib/parser-lr.d.ts +96 -2
  238. package/dist/lib/parser-lr.d.ts.map +1 -1
  239. package/dist/lib/parser-lr.js +130 -2
  240. package/dist/lib/parser-lr.js.map +1 -1
  241. package/dist/lib/shift-reduce/index.d.ts +3 -0
  242. package/dist/lib/shift-reduce/index.d.ts.map +1 -0
  243. package/dist/lib/shift-reduce/index.js +2 -0
  244. package/dist/lib/shift-reduce/index.js.map +1 -0
  245. package/dist/lib/shift-reduce/shift-reduce-engine.d.ts +82 -0
  246. package/dist/lib/shift-reduce/shift-reduce-engine.d.ts.map +1 -0
  247. package/dist/lib/shift-reduce/shift-reduce-engine.js +204 -0
  248. package/dist/lib/shift-reduce/shift-reduce-engine.js.map +1 -0
  249. package/dist/lib/transform/binding-map.d.ts +32 -0
  250. package/dist/lib/transform/binding-map.d.ts.map +1 -0
  251. package/dist/lib/transform/binding-map.js +59 -0
  252. package/dist/lib/transform/binding-map.js.map +1 -0
  253. package/dist/lib/transform/cst-transformer.d.ts +158 -0
  254. package/dist/lib/transform/cst-transformer.d.ts.map +1 -0
  255. package/dist/lib/transform/cst-transformer.js +381 -0
  256. package/dist/lib/transform/cst-transformer.js.map +1 -0
  257. package/dist/lib/transform/index.d.ts +4 -0
  258. package/dist/lib/transform/index.d.ts.map +1 -0
  259. package/dist/lib/transform/index.js +3 -0
  260. package/dist/lib/transform/index.js.map +1 -0
  261. package/docs/grammar.md +170 -0
  262. package/package.json +12 -4
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Source offset and length for a span of input text.
3
+ */
4
+ export interface SourceLocation {
5
+ readonly offset: number;
6
+ readonly length: number;
7
+ }
8
+ /**
9
+ * Tree node used for both parse (CST) and abstract (AST) phases.
10
+ *
11
+ * After parsing, {@link symbol} is a grammar production and {@link variant}
12
+ * is the matched `#` label. After transform, {@link symbol} is an AST type
13
+ * name and {@link variant} is the AST alternative label.
14
+ */
15
+ export declare class AstNode {
16
+ readonly symbol: string;
17
+ readonly children: readonly AstNode[];
18
+ readonly text: string | null;
19
+ readonly location: SourceLocation | null;
20
+ readonly variant: string | null;
21
+ readonly productionId: number | null;
22
+ readonly origin: string | null;
23
+ /**
24
+ * Creates a tree node.
25
+ *
26
+ * @param symbol - Production or AST type name.
27
+ * @param children - Child subtrees.
28
+ * @param text - Lexeme or literal text for leaves; null for interior nodes.
29
+ * @param location - Optional source span.
30
+ * @param variant - `#` alternative label when present.
31
+ * @param productionId - Parse table production id for CST nodes, or null after transform.
32
+ * @param origin - Source production or synthetic construct name for CST nodes.
33
+ */
34
+ constructor(symbol: string, children?: readonly AstNode[], text?: string | null, location?: SourceLocation | null, variant?: string | null, productionId?: number | null, origin?: string | null);
35
+ /**
36
+ * Whether this node is a terminal leaf with lexeme text.
37
+ */
38
+ get isTerminal(): boolean;
39
+ /**
40
+ * Builds an interior node from a grammar or AST reduction.
41
+ *
42
+ * @param symbol - Production or AST type name.
43
+ * @param children - Reduced child subtrees.
44
+ * @param location - Optional source span covering the full production.
45
+ * @param variant - `#` alternative label when present.
46
+ * @param productionId - Parse table production id for CST nodes.
47
+ * @param origin - Source production or synthetic construct name for CST nodes.
48
+ */
49
+ static rule(symbol: string, children: readonly AstNode[], location?: SourceLocation | null, variant?: string | null, productionId?: number | null, origin?: string | null): AstNode;
50
+ /**
51
+ * Builds a terminal leaf node.
52
+ *
53
+ * @param symbol - Terminal symbol name.
54
+ * @param text - Matched lexeme text.
55
+ * @param location - Optional source span for the lexeme.
56
+ */
57
+ static terminal(symbol: string, text: string, location?: SourceLocation | null): AstNode;
58
+ }
59
+ //# sourceMappingURL=ast-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-node.d.ts","sourceRoot":"","sources":["../../../src/lib/ast/ast-node.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,cAAc;IAE3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,qBAAa,OAAO;aAcI,MAAM,EAAE,MAAM;aACd,QAAQ,EAAE,SAAS,OAAO,EAAE;aAC5B,IAAI,EAAE,MAAM,GAAG,IAAI;aACnB,QAAQ,EAAE,cAAc,GAAG,IAAI;aAC/B,OAAO,EAAE,MAAM,GAAG,IAAI;aACtB,YAAY,EAAE,MAAM,GAAG,IAAI;aAC3B,MAAM,EAAE,MAAM,GAAG,IAAI;IAlBzC;;;;;;;;;;OAUG;gBAEiB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,SAAS,OAAO,EAAO,EACjC,IAAI,GAAE,MAAM,GAAG,IAAW,EAC1B,QAAQ,GAAE,cAAc,GAAG,IAAW,EACtC,OAAO,GAAE,MAAM,GAAG,IAAW,EAC7B,YAAY,GAAE,MAAM,GAAG,IAAW,EAClC,MAAM,GAAE,MAAM,GAAG,IAAW;IAKhD;;OAEG;IACH,IAAW,UAAU,IAAI,OAAO,CAG/B;IAED;;;;;;;;;OASG;WACW,IAAI,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,QAAQ,GAAE,cAAc,GAAG,IAAW,EACtC,OAAO,GAAE,MAAM,GAAG,IAAW,EAC7B,YAAY,GAAE,MAAM,GAAG,IAAW,EAClC,MAAM,GAAE,MAAM,GAAG,IAAW,GAC7B,OAAO;IAKV;;;;;;OAMG;WACW,QAAQ,CAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,cAAc,GAAG,IAAW,GACvC,OAAO;CAIb"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Tree node used for both parse (CST) and abstract (AST) phases.
3
+ *
4
+ * After parsing, {@link symbol} is a grammar production and {@link variant}
5
+ * is the matched `#` label. After transform, {@link symbol} is an AST type
6
+ * name and {@link variant} is the AST alternative label.
7
+ */
8
+ export class AstNode {
9
+ symbol;
10
+ children;
11
+ text;
12
+ location;
13
+ variant;
14
+ productionId;
15
+ origin;
16
+ /**
17
+ * Creates a tree node.
18
+ *
19
+ * @param symbol - Production or AST type name.
20
+ * @param children - Child subtrees.
21
+ * @param text - Lexeme or literal text for leaves; null for interior nodes.
22
+ * @param location - Optional source span.
23
+ * @param variant - `#` alternative label when present.
24
+ * @param productionId - Parse table production id for CST nodes, or null after transform.
25
+ * @param origin - Source production or synthetic construct name for CST nodes.
26
+ */
27
+ constructor(symbol, children = [], text = null, location = null, variant = null, productionId = null, origin = null) {
28
+ this.symbol = symbol;
29
+ this.children = children;
30
+ this.text = text;
31
+ this.location = location;
32
+ this.variant = variant;
33
+ this.productionId = productionId;
34
+ this.origin = origin;
35
+ }
36
+ /**
37
+ * Whether this node is a terminal leaf with lexeme text.
38
+ */
39
+ get isTerminal() {
40
+ return this.text !== null;
41
+ }
42
+ /**
43
+ * Builds an interior node from a grammar or AST reduction.
44
+ *
45
+ * @param symbol - Production or AST type name.
46
+ * @param children - Reduced child subtrees.
47
+ * @param location - Optional source span covering the full production.
48
+ * @param variant - `#` alternative label when present.
49
+ * @param productionId - Parse table production id for CST nodes.
50
+ * @param origin - Source production or synthetic construct name for CST nodes.
51
+ */
52
+ static rule(symbol, children, location = null, variant = null, productionId = null, origin = null) {
53
+ return new AstNode(symbol, children, null, location, variant, productionId, origin);
54
+ }
55
+ /**
56
+ * Builds a terminal leaf node.
57
+ *
58
+ * @param symbol - Terminal symbol name.
59
+ * @param text - Matched lexeme text.
60
+ * @param location - Optional source span for the lexeme.
61
+ */
62
+ static terminal(symbol, text, location = null) {
63
+ return new AstNode(symbol, [], text, location, null);
64
+ }
65
+ }
66
+ //# sourceMappingURL=ast-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-node.js","sourceRoot":"","sources":["../../../src/lib/ast/ast-node.ts"],"names":[],"mappings":"AASA;;;;;;GAMG;AACH,MAAM,OAAO,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"}
@@ -0,0 +1,2 @@
1
+ export { formatUserError, isParserLrError, messageContainsStackTrace, ParserLrError, } from './parser-lr-error.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,aAAa,GAChB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { formatUserError, isParserLrError, messageContainsStackTrace, ParserLrError, } from './parser-lr-error.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,aAAa,GAChB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Base class for library errors surfaced to callers and the CLI.
3
+ */
4
+ export declare class ParserLrError extends Error {
5
+ /**
6
+ * Creates a parser-lr error with a caller-safe message.
7
+ *
8
+ * @param message - Human-readable failure description without stack frames.
9
+ */
10
+ constructor(message: string);
11
+ }
12
+ /**
13
+ * Returns whether a value is a parser-lr domain error.
14
+ *
15
+ * @param error - Value to test.
16
+ */
17
+ export declare function isParserLrError(error: unknown): error is ParserLrError;
18
+ /**
19
+ * Returns a user-facing message for an error value.
20
+ *
21
+ * @param error - Thrown value or Error instance.
22
+ */
23
+ export declare function formatUserError(error: unknown): string;
24
+ /**
25
+ * Returns whether a message contains embedded stack trace frames.
26
+ *
27
+ * @param message - Error message text to inspect.
28
+ */
29
+ export declare function messageContainsStackTrace(message: string): boolean;
30
+ //# sourceMappingURL=parser-lr-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-lr-error.d.ts","sourceRoot":"","sources":["../../../src/lib/errors/parser-lr-error.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;IAEpC;;;;OAIG;gBACgB,OAAO,EAAE,MAAM;CAKrC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAGtE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAatD;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGlE"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Base class for library errors surfaced to callers and the CLI.
3
+ */
4
+ export class ParserLrError extends Error {
5
+ /**
6
+ * Creates a parser-lr error with a caller-safe message.
7
+ *
8
+ * @param message - Human-readable failure description without stack frames.
9
+ */
10
+ constructor(message) {
11
+ super(message);
12
+ this.name = new.target.name;
13
+ }
14
+ }
15
+ /**
16
+ * Returns whether a value is a parser-lr domain error.
17
+ *
18
+ * @param error - Value to test.
19
+ */
20
+ export function isParserLrError(error) {
21
+ return error instanceof ParserLrError;
22
+ }
23
+ /**
24
+ * Returns a user-facing message for an error value.
25
+ *
26
+ * @param error - Thrown value or Error instance.
27
+ */
28
+ export function formatUserError(error) {
29
+ if (error instanceof ParserLrError) {
30
+ return error.message;
31
+ }
32
+ if (error instanceof Error) {
33
+ return error.message;
34
+ }
35
+ return String(error);
36
+ }
37
+ /**
38
+ * Returns whether a message contains embedded stack trace frames.
39
+ *
40
+ * @param message - Error message text to inspect.
41
+ */
42
+ export function messageContainsStackTrace(message) {
43
+ return /\n\s+at .+/.test(message);
44
+ }
45
+ //# sourceMappingURL=parser-lr-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-lr-error.js","sourceRoot":"","sources":["../../../src/lib/errors/parser-lr-error.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,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;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAE1C,OAAO,KAAK,YAAY,aAAa,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,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,MAAM,UAAU,yBAAyB,CAAC,OAAe;IAErD,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { AstType } from './ast-type.js';
2
+ /**
3
+ * AST shape declared in the `ast` section of a `.grammar` file.
4
+ */
5
+ export declare class AstSchema {
6
+ readonly types: readonly AstType[];
7
+ private readonly typesByName;
8
+ /**
9
+ * Creates an AST schema from declared types.
10
+ *
11
+ * @param types - Named AST types from the `ast` section.
12
+ */
13
+ constructor(types: readonly AstType[]);
14
+ /**
15
+ * Returns an AST type by name.
16
+ *
17
+ * @param name - Type name to look up.
18
+ * @returns The matching type, or null when the name is undefined.
19
+ */
20
+ type(name: string): AstType | null;
21
+ /**
22
+ * Whether a named AST type is defined in this schema.
23
+ *
24
+ * @param name - Type name to test.
25
+ */
26
+ hasType(name: string): boolean;
27
+ }
28
+ //# sourceMappingURL=ast-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-schema.d.ts","sourceRoot":"","sources":["../../../src/lib/grammar/ast-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C;;GAEG;AACH,qBAAa,SAAS;aASiB,KAAK,EAAE,SAAS,OAAO,EAAE;IAP5D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+B;IAE3D;;;;OAIG;gBACgC,KAAK,EAAE,SAAS,OAAO,EAAE;IAa5D;;;;;OAKG;IACI,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAKzC;;;;OAIG;IACI,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAIxC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * AST shape declared in the `ast` section of a `.grammar` file.
3
+ */
4
+ export class AstSchema {
5
+ types;
6
+ typesByName;
7
+ /**
8
+ * Creates an AST schema from declared types.
9
+ *
10
+ * @param types - Named AST types from the `ast` section.
11
+ */
12
+ constructor(types) {
13
+ this.types = types;
14
+ // Index types by name for lookup.
15
+ const typesByName = new Map();
16
+ for (const type of types) {
17
+ typesByName.set(type.name, type);
18
+ }
19
+ this.typesByName = typesByName;
20
+ }
21
+ /**
22
+ * Returns an AST type by name.
23
+ *
24
+ * @param name - Type name to look up.
25
+ * @returns The matching type, or null when the name is undefined.
26
+ */
27
+ type(name) {
28
+ return this.typesByName.get(name) ?? null;
29
+ }
30
+ /**
31
+ * Whether a named AST type is defined in this schema.
32
+ *
33
+ * @param name - Type name to test.
34
+ */
35
+ hasType(name) {
36
+ return this.typesByName.has(name);
37
+ }
38
+ }
39
+ //# sourceMappingURL=ast-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-schema.js","sourceRoot":"","sources":["../../../src/lib/grammar/ast-schema.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,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"}
@@ -0,0 +1,12 @@
1
+ import type { Expression } from './expression.js';
2
+ /**
3
+ * Named AST type from the `ast` section (`identifier = expression ;`).
4
+ *
5
+ * Uses the same expression syntax as parse productions; `#` labels name
6
+ * variants and `[name]:` bindings name child slots for transforms.
7
+ */
8
+ export interface AstType {
9
+ readonly name: string;
10
+ readonly expression: Expression;
11
+ }
12
+ //# sourceMappingURL=ast-type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-type.d.ts","sourceRoot":"","sources":["../../../src/lib/grammar/ast-type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IAEpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;CACnC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ast-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-type.js","sourceRoot":"","sources":["../../../src/lib/grammar/ast-type.ts"],"names":[],"mappings":""}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Reference to a production, token, or AST type by name.
3
+ */
4
+ export interface ReferenceExpression {
5
+ readonly kind: 'reference';
6
+ readonly name: string;
7
+ }
8
+ /**
9
+ * Named child slot referencing another symbol (`[slot]:symbol`).
10
+ */
11
+ export interface BoundReferenceExpression {
12
+ readonly kind: 'boundReference';
13
+ readonly binding: string;
14
+ readonly name: string;
15
+ }
16
+ /**
17
+ * Terminal literal (`"…"` in a production).
18
+ */
19
+ export interface TerminalExpression {
20
+ readonly kind: 'terminal';
21
+ readonly value: string;
22
+ }
23
+ /**
24
+ * Concatenated sequence of sub-expressions.
25
+ */
26
+ export interface SequenceExpression {
27
+ readonly kind: 'sequence';
28
+ readonly elements: readonly Expression[];
29
+ }
30
+ /**
31
+ * One branch of a choice, with an optional `#` label.
32
+ */
33
+ export interface Alternative {
34
+ readonly label: string | null;
35
+ readonly expression: Expression;
36
+ }
37
+ /**
38
+ * Alternation between labeled alternatives (`|`).
39
+ */
40
+ export interface ChoiceExpression {
41
+ readonly kind: 'choice';
42
+ readonly alternatives: readonly Alternative[];
43
+ }
44
+ /**
45
+ * Optional sub-expression (`[ … ]`).
46
+ */
47
+ export interface OptionalExpression {
48
+ readonly kind: 'optional';
49
+ readonly element: Expression;
50
+ }
51
+ /**
52
+ * Repeated sub-expression (`{ … }`).
53
+ */
54
+ export interface RepeatExpression {
55
+ readonly kind: 'repeat';
56
+ readonly element: Expression;
57
+ }
58
+ /**
59
+ * Grouped sub-expression (`( … )`).
60
+ */
61
+ export interface GroupExpression {
62
+ readonly kind: 'group';
63
+ readonly element: Expression;
64
+ }
65
+ /**
66
+ * Root discriminated union for the right-hand side of a production.
67
+ */
68
+ export type Expression = ReferenceExpression | BoundReferenceExpression | TerminalExpression | SequenceExpression | ChoiceExpression | OptionalExpression | RepeatExpression | GroupExpression;
69
+ //# sourceMappingURL=expression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../../src/lib/grammar/expression.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAEhC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IAErC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAE/B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAE/B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,SAAS,UAAU,EAAE,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAExB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAE7B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,SAAS,WAAW,EAAE,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAE/B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAE7B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAE5B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAChB,mBAAmB,GACnB,wBAAwB,GACxB,kBAAkB,GAClB,kBAAkB,GAClB,gBAAgB,GAChB,kBAAkB,GAClB,gBAAgB,GAChB,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=expression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.js","sourceRoot":"","sources":["../../../src/lib/grammar/expression.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import type { AstNode } from '../ast/ast-node.js';
2
+ import { Grammar } from './grammar.js';
3
+ /**
4
+ * Builds a {@link Grammar} model from a meta-grammar concrete syntax tree.
5
+ *
6
+ * @param root - `grammar_file` CST root from the meta-grammar parser.
7
+ * @returns Parsed grammar file model.
8
+ */
9
+ export declare function grammarFromCst(root: AstNode): Grammar;
10
+ //# sourceMappingURL=grammar-from-cst.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grammar-from-cst.d.ts","sourceRoot":"","sources":["../../../src/lib/grammar/grammar-from-cst.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAMlD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAQvC;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAgDrD"}