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,158 @@
1
+ import { EOF_TOKEN_NAME } from '../lexer/token.js';
2
+ import { analyzeGrammar } from './analysis/first-follow.js';
3
+ import { AUGMENTED_START_SYMBOL } from './bnf/bnf-grammar.js';
4
+ import { buildLr0ItemSets, } from './lr0/lr0-item-set.js';
5
+ import { buildLalrGotoTargets, buildLr1ItemSets, lr1Goto, Lr1ItemSetBuilder, mergeLalrItemSets, } from './lr1/lr1-item-set.js';
6
+ import { LrParseTable } from './table/lr-parse-table.js';
7
+ import { TableBuilderBase } from './table/table-builder-base.js';
8
+ /**
9
+ * Builds an LR parse table for a plain BNF grammar.
10
+ *
11
+ * @param grammar - Plain BNF grammar to analyze.
12
+ * @param algorithm - LR table construction algorithm.
13
+ */
14
+ export function buildLrTable(grammar, algorithm) {
15
+ const augmented = grammar.augment();
16
+ const analysis = analyzeGrammar(augmented);
17
+ switch (algorithm) {
18
+ case 'lr0':
19
+ return LrTableBuilder.buildLr0(augmented);
20
+ case 'slr':
21
+ return LrTableBuilder.buildSlr(augmented, analysis);
22
+ case 'lr1':
23
+ return LrTableBuilder.buildLr1(augmented, analysis);
24
+ case 'lalr':
25
+ return LrTableBuilder.buildLalr(augmented, analysis);
26
+ }
27
+ }
28
+ /**
29
+ * Builds LR parse tables for each supported algorithm.
30
+ */
31
+ class LrTableBuilder {
32
+ /**
33
+ * Builds an LR(0) parse table.
34
+ *
35
+ * @param grammar - Augmented BNF grammar.
36
+ * @param analysis - Nullable, FIRST, and FOLLOW analysis for the grammar.
37
+ */
38
+ static buildLr0(grammar) {
39
+ const itemSets = buildLr0ItemSets(grammar);
40
+ const terminalKeys = grammar.terminalKeys().concat([EOF_TOKEN_NAME]);
41
+ return LrTableBuilder.buildFromLr0ItemSets('lr0', grammar, itemSets, (production) => {
42
+ if (production.name === AUGMENTED_START_SYMBOL) {
43
+ return [EOF_TOKEN_NAME];
44
+ }
45
+ return terminalKeys;
46
+ });
47
+ }
48
+ /**
49
+ * Builds an SLR parse table.
50
+ *
51
+ * @param grammar - Augmented BNF grammar.
52
+ * @param analysis - Nullable, FIRST, and FOLLOW analysis for the grammar.
53
+ */
54
+ static buildSlr(grammar, analysis) {
55
+ const itemSets = buildLr0ItemSets(grammar);
56
+ return LrTableBuilder.buildFromLr0ItemSets('slr', grammar, itemSets, (production) => {
57
+ if (production.name === AUGMENTED_START_SYMBOL) {
58
+ return [EOF_TOKEN_NAME];
59
+ }
60
+ return [...analysis.followOfNonTerminal(production.name)];
61
+ });
62
+ }
63
+ /**
64
+ * Builds an LR(1) parse table.
65
+ *
66
+ * @param grammar - Augmented BNF grammar.
67
+ * @param analysis - Nullable, FIRST, and FOLLOW analysis for the grammar.
68
+ */
69
+ static buildLr1(grammar, analysis) {
70
+ const itemSets = buildLr1ItemSets(grammar, analysis, EOF_TOKEN_NAME);
71
+ return LrTableBuilder.buildFromLr1ItemSets('lr1', grammar, analysis, itemSets);
72
+ }
73
+ /**
74
+ * Builds an LALR parse table.
75
+ *
76
+ * @param grammar - Augmented BNF grammar.
77
+ * @param analysis - Nullable, FIRST, and FOLLOW analysis for the grammar.
78
+ */
79
+ static buildLalr(grammar, analysis) {
80
+ const lr1ItemSets = buildLr1ItemSets(grammar, analysis, EOF_TOKEN_NAME);
81
+ const lalrItemSets = mergeLalrItemSets(lr1ItemSets);
82
+ const lr1ToLalr = Lr1ItemSetBuilder.buildLr1ToLalrMap(lr1ItemSets, lalrItemSets);
83
+ const gotoTargets = buildLalrGotoTargets(grammar, analysis, lr1ItemSets, lr1ToLalr);
84
+ return LrTableBuilder.buildFromLr1ItemSets('lalr', grammar, analysis, lalrItemSets, gotoTargets);
85
+ }
86
+ /**
87
+ * Builds a parse table from LR(0) item sets and a reduce-lookahead rule.
88
+ *
89
+ * @param algorithm - LR algorithm being constructed.
90
+ * @param grammar - Augmented BNF grammar.
91
+ * @param itemSets - Canonical LR(0) item set collection.
92
+ * @param reduceLookaheads - Returns terminal keys for one completed production.
93
+ */
94
+ static buildFromLr0ItemSets(algorithm, grammar, itemSets, reduceLookaheads) {
95
+ const gotoTargets = TableBuilderBase.buildGotoTargets(grammar, itemSets.itemSets, (items) => itemSets.indexOf(items), TableBuilderBase.lr0GotoItems);
96
+ const actions = new Map();
97
+ const gotos = new Map();
98
+ const conflicts = [];
99
+ for (let state = 0; state < itemSets.itemSets.length; state += 1) {
100
+ const itemSet = itemSets.itemSets[state] ?? [];
101
+ const stateActions = new Map();
102
+ const stateGotos = new Map();
103
+ actions.set(state, stateActions);
104
+ gotos.set(state, stateGotos);
105
+ TableBuilderBase.fillShiftsAndGotos(grammar, state, itemSet, gotoTargets, stateActions, stateGotos, conflicts);
106
+ for (const item of itemSet) {
107
+ const production = grammar.production(item.productionId);
108
+ if (production === null || item.dot !== production.rhs.length) {
109
+ continue;
110
+ }
111
+ TableBuilderBase.setAcceptAction(state, production.name, stateActions, conflicts);
112
+ if (production.name === AUGMENTED_START_SYMBOL) {
113
+ continue;
114
+ }
115
+ for (const lookahead of reduceLookaheads(production)) {
116
+ TableBuilderBase.setAction(stateActions, conflicts, state, lookahead, { kind: 'reduce', productionId: production.id });
117
+ }
118
+ }
119
+ }
120
+ return new LrParseTable(algorithm, grammar, [...grammar.productions], itemSets.itemSets.length, actions, gotos, conflicts);
121
+ }
122
+ /**
123
+ * Builds a parse table from LR(1) or merged LALR item sets.
124
+ *
125
+ * @param algorithm - LR algorithm being constructed.
126
+ * @param grammar - Augmented BNF grammar.
127
+ * @param itemSets - LR(1) or merged LALR item set collection used for ACTION/GOTO rows.
128
+ * @param lr1Collection - Canonical LR(1) collection used for LALR GOTO remapping.
129
+ * @param gotoTargetsOverride - Optional precomputed GOTO indices for LALR.
130
+ */
131
+ static buildFromLr1ItemSets(algorithm, grammar, analysis, itemSets, gotoTargetsOverride) {
132
+ const gotoTargets = gotoTargetsOverride ?? TableBuilderBase.buildGotoTargets(grammar, itemSets.itemSets, (items) => itemSets.indexOf(items), (grammarArg, items, symbolKey) => lr1Goto(grammarArg, analysis, items, symbolKey));
133
+ const actions = new Map();
134
+ const gotos = new Map();
135
+ const conflicts = [];
136
+ for (let state = 0; state < itemSets.itemSets.length; state += 1) {
137
+ const itemSet = itemSets.itemSets[state] ?? [];
138
+ const stateActions = new Map();
139
+ const stateGotos = new Map();
140
+ actions.set(state, stateActions);
141
+ gotos.set(state, stateGotos);
142
+ TableBuilderBase.fillShiftsAndGotos(grammar, state, itemSet, gotoTargets, stateActions, stateGotos, conflicts);
143
+ for (const item of itemSet) {
144
+ const production = grammar.production(item.productionId);
145
+ if (production === null || item.dot !== production.rhs.length) {
146
+ continue;
147
+ }
148
+ if (production.name === AUGMENTED_START_SYMBOL) {
149
+ TableBuilderBase.setAction(stateActions, conflicts, state, item.lookahead, { kind: 'accept' });
150
+ continue;
151
+ }
152
+ TableBuilderBase.setAction(stateActions, conflicts, state, item.lookahead, { kind: 'reduce', productionId: production.id });
153
+ }
154
+ }
155
+ return new LrParseTable(algorithm, grammar, [...grammar.productions], itemSets.itemSets.length, actions, gotos, conflicts);
156
+ }
157
+ }
158
+ //# sourceMappingURL=build-lr-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-lr-table.js","sourceRoot":"","sources":["../../../src/lib/parse-table/build-lr-table.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export { isLrAlgorithm, parseLrAlgorithm } from './lr-algorithm.js';
2
+ export type { LrAlgorithm } from './lr-algorithm.js';
3
+ export { analyzeGrammar, formatBnfProduction, GrammarAnalysis } from './analysis/index.js';
4
+ export { desugarEbnf, BnfGrammar, bnfSymbolKey } from './bnf/index.js';
5
+ export type { BnfProduction, BnfSymbol } from './bnf/index.js';
6
+ export { buildLrTable } from './build-lr-table.js';
7
+ export { buildLr0ItemSets, formatLr0ItemSet, Lr0ItemSetCollection } from './lr0/index.js';
8
+ export type { Lr0Item } from './lr0/index.js';
9
+ export { buildLr1ItemSets, Lr1ItemSetCollection } from './lr1/index.js';
10
+ export type { Lr1Item } from './lr1/index.js';
11
+ export { LrAlgorithmError } from './lr-algorithm-error.js';
12
+ export { ParseTableBuildError } from './parse-table-build-error.js';
13
+ export { ParseTableError } from './parse-table-error.js';
14
+ export { isParseTableJsonV2 } from './parse-table-json.js';
15
+ export type { ParseTableActionJson, ParseTableGotoJson, ParseTableJsonV2, ParseTableProductionJson, } from './parse-table-json.js';
16
+ export { buildSlrTable, formatSlrActions, formatSlrConflicts, SlrTable } from './slr/index.js';
17
+ export { formatLrActions, formatLrConflicts, formatLrGotos, LrParseTable, } from './table/index.js';
18
+ export type { ParseAction, ParseConflict } from './table/index.js';
19
+ export { tokenInventory } from './token-inventory.js';
20
+ export { PARSE_TABLE_VERSION, PARSE_TABLE_VERSION_FULL, ParseTable } from './parse-table.js';
21
+ export type { ParseTableJson } from './parse-table.js';
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/parse-table/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACpE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACvE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC1F,YAAY,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACxE,YAAY,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,YAAY,EACR,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,wBAAwB,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/F,OAAO,EACH,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,YAAY,GACf,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC7F,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,15 @@
1
+ export { isLrAlgorithm, parseLrAlgorithm } from './lr-algorithm.js';
2
+ export { analyzeGrammar, formatBnfProduction, GrammarAnalysis } from './analysis/index.js';
3
+ export { desugarEbnf, BnfGrammar, bnfSymbolKey } from './bnf/index.js';
4
+ export { buildLrTable } from './build-lr-table.js';
5
+ export { buildLr0ItemSets, formatLr0ItemSet, Lr0ItemSetCollection } from './lr0/index.js';
6
+ export { buildLr1ItemSets, Lr1ItemSetCollection } from './lr1/index.js';
7
+ export { LrAlgorithmError } from './lr-algorithm-error.js';
8
+ export { ParseTableBuildError } from './parse-table-build-error.js';
9
+ export { ParseTableError } from './parse-table-error.js';
10
+ export { isParseTableJsonV2 } from './parse-table-json.js';
11
+ export { buildSlrTable, formatSlrActions, formatSlrConflicts } from './slr/index.js';
12
+ export { formatLrActions, formatLrConflicts, formatLrGotos, LrParseTable, } from './table/index.js';
13
+ export { tokenInventory } from './token-inventory.js';
14
+ export { PARSE_TABLE_VERSION, PARSE_TABLE_VERSION_FULL, ParseTable } from './parse-table.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/parse-table/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE1F,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAExE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAO3D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,EAAY,MAAM,gBAAgB,CAAC;AAC/F,OAAO,EACH,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,YAAY,GACf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { ParserLrError } from '../errors/parser-lr-error.js';
2
+ /**
3
+ * Thrown when an LR table algorithm name is not supported.
4
+ */
5
+ export declare class LrAlgorithmError extends ParserLrError {
6
+ /**
7
+ * Creates an unsupported LR algorithm error.
8
+ *
9
+ * @param algorithm - Requested algorithm name.
10
+ */
11
+ constructor(algorithm: string);
12
+ }
13
+ //# sourceMappingURL=lr-algorithm-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lr-algorithm-error.d.ts","sourceRoot":"","sources":["../../../src/lib/parse-table/lr-algorithm-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,aAAa;IAE/C;;;;OAIG;gBACgB,SAAS,EAAE,MAAM;CAIvC"}
@@ -0,0 +1,15 @@
1
+ import { ParserLrError } from '../errors/parser-lr-error.js';
2
+ /**
3
+ * Thrown when an LR table algorithm name is not supported.
4
+ */
5
+ export class LrAlgorithmError extends ParserLrError {
6
+ /**
7
+ * Creates an unsupported LR algorithm error.
8
+ *
9
+ * @param algorithm - Requested algorithm name.
10
+ */
11
+ constructor(algorithm) {
12
+ super(`Unsupported LR algorithm ${JSON.stringify(algorithm)}`);
13
+ }
14
+ }
15
+ //# sourceMappingURL=lr-algorithm-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lr-algorithm-error.js","sourceRoot":"","sources":["../../../src/lib/parse-table/lr-algorithm-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,aAAa;IAE/C;;;;OAIG;IACH,YAAmB,SAAiB;QAEhC,KAAK,CAAC,4BAA4B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC;CACJ"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * LR table construction algorithm.
3
+ */
4
+ export type LrAlgorithm = 'lr0' | 'slr' | 'lalr' | 'lr1';
5
+ /**
6
+ * Returns whether a string names a supported LR algorithm.
7
+ *
8
+ * @param value - Candidate algorithm name.
9
+ */
10
+ export declare function isLrAlgorithm(value: string): value is LrAlgorithm;
11
+ /**
12
+ * Parses and validates an LR algorithm name.
13
+ *
14
+ * @param value - Raw algorithm name, or undefined for the default.
15
+ * @param defaultAlgorithm - Algorithm used when `value` is undefined.
16
+ * @returns Supported algorithm name.
17
+ */
18
+ export declare function parseLrAlgorithm(value: string | undefined, defaultAlgorithm?: LrAlgorithm): LrAlgorithm;
19
+ //# sourceMappingURL=lr-algorithm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lr-algorithm.d.ts","sourceRoot":"","sources":["../../../src/lib/parse-table/lr-algorithm.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;AAEzD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,WAAW,CAMjE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC5B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,gBAAgB,GAAE,WAAmB,GACtC,WAAW,CAUb"}
@@ -0,0 +1,27 @@
1
+ import { LrAlgorithmError } from './lr-algorithm-error.js';
2
+ /**
3
+ * Returns whether a string names a supported LR algorithm.
4
+ *
5
+ * @param value - Candidate algorithm name.
6
+ */
7
+ export function isLrAlgorithm(value) {
8
+ return value === 'lr0'
9
+ || value === 'slr'
10
+ || value === 'lalr'
11
+ || value === 'lr1';
12
+ }
13
+ /**
14
+ * Parses and validates an LR algorithm name.
15
+ *
16
+ * @param value - Raw algorithm name, or undefined for the default.
17
+ * @param defaultAlgorithm - Algorithm used when `value` is undefined.
18
+ * @returns Supported algorithm name.
19
+ */
20
+ export function parseLrAlgorithm(value, defaultAlgorithm = 'lr1') {
21
+ const algorithm = value ?? defaultAlgorithm;
22
+ if (!isLrAlgorithm(algorithm)) {
23
+ throw new LrAlgorithmError(algorithm);
24
+ }
25
+ return algorithm;
26
+ }
27
+ //# sourceMappingURL=lr-algorithm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lr-algorithm.js","sourceRoot":"","sources":["../../../src/lib/parse-table/lr-algorithm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAO3D;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IAEvC,OAAO,KAAK,KAAK,KAAK;WACf,KAAK,KAAK,KAAK;WACf,KAAK,KAAK,MAAM;WAChB,KAAK,KAAK,KAAK,CAAC;AAC3B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC5B,KAAyB,EACzB,mBAAgC,KAAK;IAGrC,MAAM,SAAS,GAAG,KAAK,IAAI,gBAAgB,CAAC;IAE5C,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAC7B,CAAC;QACG,MAAM,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { buildLr0ItemSets, formatLr0ItemSet, lr0Closure, lr0Goto, lr0ItemKey, lr0ItemsEqual, Lr0ItemSetBuilder, Lr0ItemSetCollection, sortLr0Items, } from './lr0-item-set.js';
2
+ export type { Lr0Item } from './lr0-item-set.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/parse-table/lr0/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,OAAO,EACP,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,GACf,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { buildLr0ItemSets, formatLr0ItemSet, lr0Closure, lr0Goto, lr0ItemKey, lr0ItemsEqual, Lr0ItemSetBuilder, Lr0ItemSetCollection, sortLr0Items, } from './lr0-item-set.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/lr0/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,OAAO,EACP,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,GACf,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,106 @@
1
+ import type { BnfGrammar } from '../bnf/bnf-grammar.js';
2
+ /**
3
+ * One LR(0) item: a production with the dot before `dot` right-hand side symbols.
4
+ */
5
+ export interface Lr0Item {
6
+ readonly productionId: number;
7
+ readonly dot: number;
8
+ }
9
+ /**
10
+ * Returns a stable string key for an LR(0) item.
11
+ *
12
+ * @param grammar - Grammar containing the referenced production.
13
+ * @param item - LR(0) item to encode.
14
+ */
15
+ export declare function lr0ItemKey(grammar: BnfGrammar, item: Lr0Item): string;
16
+ /**
17
+ * Returns whether two LR(0) items are identical.
18
+ *
19
+ * @param left - First item.
20
+ * @param right - Second item.
21
+ */
22
+ export declare function lr0ItemsEqual(left: Lr0Item, right: Lr0Item): boolean;
23
+ /**
24
+ * Sorts LR(0) items for canonical set comparison.
25
+ *
26
+ * @param items - Items to sort.
27
+ */
28
+ export declare function sortLr0Items(items: readonly Lr0Item[]): Lr0Item[];
29
+ /**
30
+ * Computes the LR(0) closure of an item set.
31
+ *
32
+ * @param grammar - Plain or augmented BNF grammar.
33
+ * @param items - Seed items.
34
+ */
35
+ export declare function lr0Closure(grammar: BnfGrammar, items: readonly Lr0Item[]): readonly Lr0Item[];
36
+ /**
37
+ * Computes the LR(0) GOTO set for symbol `symbolKey`.
38
+ *
39
+ * @param grammar - Plain or augmented BNF grammar.
40
+ * @param items - Closed item set.
41
+ * @param symbolKey - Encoded terminal or non-terminal symbol.
42
+ */
43
+ export declare function lr0Goto(grammar: BnfGrammar, items: readonly Lr0Item[], symbolKey: string): readonly Lr0Item[];
44
+ /**
45
+ * Canonical collection of LR(0) item sets for a BNF grammar.
46
+ */
47
+ export declare class Lr0ItemSetCollection {
48
+ readonly grammar: BnfGrammar;
49
+ readonly itemSets: readonly (readonly Lr0Item[])[];
50
+ /**
51
+ * Creates a collection from an ordered list of closed item sets.
52
+ *
53
+ * @param grammar - Grammar the item sets were built from.
54
+ * @param itemSets - Closed LR(0) item sets in discovery order.
55
+ */
56
+ constructor(grammar: BnfGrammar, itemSets: readonly (readonly Lr0Item[])[]);
57
+ /**
58
+ * Returns the index of an item set matching `items`, or null when absent.
59
+ *
60
+ * @param items - Closed item set to locate.
61
+ */
62
+ indexOf(items: readonly Lr0Item[]): number | null;
63
+ }
64
+ /**
65
+ * Builds LR(0) item sets for a BNF grammar.
66
+ */
67
+ export declare class Lr0ItemSetBuilder {
68
+ /**
69
+ * Builds the canonical LR(0) collection for a grammar.
70
+ *
71
+ * @param grammar - Augmented or plain BNF grammar.
72
+ */
73
+ static build(grammar: BnfGrammar): Lr0ItemSetCollection;
74
+ /**
75
+ * Returns every terminal and non-terminal key that can appear in GOTO.
76
+ *
77
+ * @param grammar - BNF grammar to inspect.
78
+ */
79
+ static grammarSymbolKeys(grammar: BnfGrammar): readonly string[];
80
+ /**
81
+ * Returns a stable identity string for one LR(0) item.
82
+ *
83
+ * @param item - Item to encode.
84
+ */
85
+ static itemIdentity(item: Lr0Item): string;
86
+ /**
87
+ * Returns a stable identity string for an item set.
88
+ *
89
+ * @param items - Closed item set.
90
+ */
91
+ static setIdentity(items: readonly Lr0Item[]): string;
92
+ }
93
+ /**
94
+ * Builds the canonical LR(0) item set collection for a grammar.
95
+ *
96
+ * @param grammar - Augmented or plain BNF grammar.
97
+ */
98
+ export declare function buildLr0ItemSets(grammar: BnfGrammar): Lr0ItemSetCollection;
99
+ /**
100
+ * Returns readable item set labels for tests and diagnostics.
101
+ *
102
+ * @param grammar - Grammar containing referenced productions.
103
+ * @param items - Closed item set.
104
+ */
105
+ export declare function formatLr0ItemSet(grammar: BnfGrammar, items: readonly Lr0Item[]): readonly string[];
106
+ //# sourceMappingURL=lr0-item-set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lr0-item-set.d.ts","sourceRoot":"","sources":["../../../../src/lib/parse-table/lr0/lr0-item-set.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD;;GAEG;AACH,MAAM,WAAW,OAAO;IAEpB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAwBrE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAGpE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE,CAWjE;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,OAAO,EAAE,GAAG,SAAS,OAAO,EAAE,CA6C7F;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CACnB,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,SAAS,EAAE,MAAM,GAClB,SAAS,OAAO,EAAE,CAgCpB;AAED;;GAEG;AACH,qBAAa,oBAAoB;aAST,OAAO,EAAE,UAAU;aACnB,QAAQ,EAAE,SAAS,CAAC,SAAS,OAAO,EAAE,CAAC,EAAE;IAR7D;;;;;OAKG;gBAEiB,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,SAAS,CAAC,SAAS,OAAO,EAAE,CAAC,EAAE;IAK7D;;;;OAIG;IACI,OAAO,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,GAAG,IAAI;CAc3D;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAE1B;;;;OAIG;WACW,KAAK,CAAC,OAAO,EAAE,UAAU,GAAG,oBAAoB;IAoD9D;;;;OAIG;WACW,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,MAAM,EAAE;IAYvE;;;;OAIG;WACW,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM;IAKjD;;;;OAIG;WACW,WAAW,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM;CAM/D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,oBAAoB,CAG1E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,OAAO,EAAE,GAAG,SAAS,MAAM,EAAE,CAGlG"}