parser-lr 0.6.1 → 0.7.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 (173) hide show
  1. package/README.md +14 -30
  2. package/bin/parser-lr.js +11388 -11409
  3. package/bin/parser-lr.js.map +1 -1
  4. package/dist/lib/grammar/index.d.ts +1 -1
  5. package/dist/lib/grammar/index.d.ts.map +1 -1
  6. package/dist/lib/grammar/index.js +1 -1
  7. package/dist/lib/grammar/index.js.map +1 -1
  8. package/dist/lib/grammar/meta-grammar-table.d.ts +0 -12
  9. package/dist/lib/grammar/meta-grammar-table.d.ts.map +1 -1
  10. package/dist/lib/grammar/meta-grammar-table.js +5 -22
  11. package/dist/lib/grammar/meta-grammar-table.js.map +1 -1
  12. package/dist/lib/grammar-entry.d.ts +42 -0
  13. package/dist/lib/grammar-entry.d.ts.map +1 -0
  14. package/dist/lib/grammar-entry.js +45 -0
  15. package/dist/lib/grammar-entry.js.map +1 -0
  16. package/dist/lib/index.d.ts +7 -5
  17. package/dist/lib/index.d.ts.map +1 -1
  18. package/dist/lib/index.js +0 -3
  19. package/dist/lib/index.js.map +1 -1
  20. package/dist/lib/parse-context.d.ts +4 -15
  21. package/dist/lib/parse-context.d.ts.map +1 -1
  22. package/dist/lib/parse-context.js +4 -23
  23. package/dist/lib/parse-context.js.map +1 -1
  24. package/dist/lib/transform/grammar-fixture.js +3 -3
  25. package/dist/lib/transform/grammar-fixture.js.map +1 -1
  26. package/docs/parser-lr-browser-lib-split.md +174 -0
  27. package/package.json +7 -2
  28. package/dist/lib/grammar/grammar-json-path.d.ts +0 -2
  29. package/dist/lib/grammar/grammar-json-path.d.ts.map +0 -1
  30. package/dist/lib/grammar/grammar-json-path.esm.d.ts +0 -5
  31. package/dist/lib/grammar/grammar-json-path.esm.d.ts.map +0 -1
  32. package/dist/lib/grammar/grammar-json-path.esm.js +0 -9
  33. package/dist/lib/grammar/grammar-json-path.esm.js.map +0 -1
  34. package/dist/lib/grammar/grammar-json-path.js +0 -2
  35. package/dist/lib/grammar/grammar-json-path.js.map +0 -1
  36. package/dist/lib-cjs/ast/ast-node.js +0 -70
  37. package/dist/lib-cjs/ast/ast-node.js.map +0 -1
  38. package/dist/lib-cjs/errors/index.js +0 -9
  39. package/dist/lib-cjs/errors/index.js.map +0 -1
  40. package/dist/lib-cjs/errors/parser-lr-error.js +0 -52
  41. package/dist/lib-cjs/errors/parser-lr-error.js.map +0 -1
  42. package/dist/lib-cjs/grammar/ast-schema.js +0 -43
  43. package/dist/lib-cjs/grammar/ast-schema.js.map +0 -1
  44. package/dist/lib-cjs/grammar/ast-type.js +0 -3
  45. package/dist/lib-cjs/grammar/ast-type.js.map +0 -1
  46. package/dist/lib-cjs/grammar/expression.js +0 -3
  47. package/dist/lib-cjs/grammar/expression.js.map +0 -1
  48. package/dist/lib-cjs/grammar/grammar-from-cst.js +0 -641
  49. package/dist/lib-cjs/grammar/grammar-from-cst.js.map +0 -1
  50. package/dist/lib-cjs/grammar/grammar-json-path.js +0 -13
  51. package/dist/lib-cjs/grammar/grammar-json-path.js.map +0 -1
  52. package/dist/lib-cjs/grammar/grammar-literals.js +0 -71
  53. package/dist/lib-cjs/grammar/grammar-literals.js.map +0 -1
  54. package/dist/lib-cjs/grammar/grammar.js +0 -64
  55. package/dist/lib-cjs/grammar/grammar.js.map +0 -1
  56. package/dist/lib-cjs/grammar/grammar.json +0 -5760
  57. package/dist/lib-cjs/grammar/index.js +0 -21
  58. package/dist/lib-cjs/grammar/index.js.map +0 -1
  59. package/dist/lib-cjs/grammar/meta-grammar-table.js +0 -68
  60. package/dist/lib-cjs/grammar/meta-grammar-table.js.map +0 -1
  61. package/dist/lib-cjs/grammar/production.js +0 -3
  62. package/dist/lib-cjs/grammar/production.js.map +0 -1
  63. package/dist/lib-cjs/grammar/read-grammar-error.js +0 -22
  64. package/dist/lib-cjs/grammar/read-grammar-error.js.map +0 -1
  65. package/dist/lib-cjs/grammar/read-grammar.js +0 -24
  66. package/dist/lib-cjs/grammar/read-grammar.js.map +0 -1
  67. package/dist/lib-cjs/grammar/table-validator.js +0 -262
  68. package/dist/lib-cjs/grammar/table-validator.js.map +0 -1
  69. package/dist/lib-cjs/grammar/token-rule.js +0 -3
  70. package/dist/lib-cjs/grammar/token-rule.js.map +0 -1
  71. package/dist/lib-cjs/grammar/transform-expression.js +0 -3
  72. package/dist/lib-cjs/grammar/transform-expression.js.map +0 -1
  73. package/dist/lib-cjs/grammar/transform-rule.js +0 -3
  74. package/dist/lib-cjs/grammar/transform-rule.js.map +0 -1
  75. package/dist/lib-cjs/grammar/transform-schema.js +0 -43
  76. package/dist/lib-cjs/grammar/transform-schema.js.map +0 -1
  77. package/dist/lib-cjs/index.js +0 -66
  78. package/dist/lib-cjs/index.js.map +0 -1
  79. package/dist/lib-cjs/lexer/index.js +0 -32
  80. package/dist/lib-cjs/lexer/index.js.map +0 -1
  81. package/dist/lib-cjs/lexer/lexer-compile-error.js +0 -22
  82. package/dist/lib-cjs/lexer/lexer-compile-error.js.map +0 -1
  83. package/dist/lib-cjs/lexer/lexer-compile.js +0 -201
  84. package/dist/lib-cjs/lexer/lexer-compile.js.map +0 -1
  85. package/dist/lib-cjs/lexer/lexer-error.js +0 -22
  86. package/dist/lib-cjs/lexer/lexer-error.js.map +0 -1
  87. package/dist/lib-cjs/lexer/lexer-input-error.js +0 -17
  88. package/dist/lib-cjs/lexer/lexer-input-error.js.map +0 -1
  89. package/dist/lib-cjs/lexer/lexer-state-error.js +0 -19
  90. package/dist/lib-cjs/lexer/lexer-state-error.js.map +0 -1
  91. package/dist/lib-cjs/lexer/lexer.js +0 -278
  92. package/dist/lib-cjs/lexer/lexer.js.map +0 -1
  93. package/dist/lib-cjs/lexer/token.js +0 -44
  94. package/dist/lib-cjs/lexer/token.js.map +0 -1
  95. package/dist/lib-cjs/package.json +0 -3
  96. package/dist/lib-cjs/parse-context-error.js +0 -19
  97. package/dist/lib-cjs/parse-context-error.js.map +0 -1
  98. package/dist/lib-cjs/parse-context.js +0 -137
  99. package/dist/lib-cjs/parse-context.js.map +0 -1
  100. package/dist/lib-cjs/parse-output-error.js +0 -19
  101. package/dist/lib-cjs/parse-output-error.js.map +0 -1
  102. package/dist/lib-cjs/parse-output.js +0 -18
  103. package/dist/lib-cjs/parse-output.js.map +0 -1
  104. package/dist/lib-cjs/parse-table/analysis/first-follow.js +0 -294
  105. package/dist/lib-cjs/parse-table/analysis/first-follow.js.map +0 -1
  106. package/dist/lib-cjs/parse-table/analysis/index.js +0 -9
  107. package/dist/lib-cjs/parse-table/analysis/index.js.map +0 -1
  108. package/dist/lib-cjs/parse-table/bnf/bnf-grammar.js +0 -140
  109. package/dist/lib-cjs/parse-table/bnf/bnf-grammar.js.map +0 -1
  110. package/dist/lib-cjs/parse-table/bnf/bnf-production.js +0 -3
  111. package/dist/lib-cjs/parse-table/bnf/bnf-production.js.map +0 -1
  112. package/dist/lib-cjs/parse-table/bnf/bnf-symbol.js +0 -39
  113. package/dist/lib-cjs/parse-table/bnf/bnf-symbol.js.map +0 -1
  114. package/dist/lib-cjs/parse-table/bnf/desugar-ebnf.js +0 -224
  115. package/dist/lib-cjs/parse-table/bnf/desugar-ebnf.js.map +0 -1
  116. package/dist/lib-cjs/parse-table/bnf/index.js +0 -13
  117. package/dist/lib-cjs/parse-table/bnf/index.js.map +0 -1
  118. package/dist/lib-cjs/parse-table/build-lr-table.js +0 -171
  119. package/dist/lib-cjs/parse-table/build-lr-table.js.map +0 -1
  120. package/dist/lib-cjs/parse-table/index.js +0 -49
  121. package/dist/lib-cjs/parse-table/index.js.map +0 -1
  122. package/dist/lib-cjs/parse-table/lr-algorithm-error.js +0 -19
  123. package/dist/lib-cjs/parse-table/lr-algorithm-error.js.map +0 -1
  124. package/dist/lib-cjs/parse-table/lr-algorithm.js +0 -31
  125. package/dist/lib-cjs/parse-table/lr-algorithm.js.map +0 -1
  126. package/dist/lib-cjs/parse-table/lr0/index.js +0 -14
  127. package/dist/lib-cjs/parse-table/lr0/index.js.map +0 -1
  128. package/dist/lib-cjs/parse-table/lr0/lr0-item-set.js +0 -286
  129. package/dist/lib-cjs/parse-table/lr0/lr0-item-set.js.map +0 -1
  130. package/dist/lib-cjs/parse-table/lr1/index.js +0 -18
  131. package/dist/lib-cjs/parse-table/lr1/index.js.map +0 -1
  132. package/dist/lib-cjs/parse-table/lr1/lr1-item-set.js +0 -432
  133. package/dist/lib-cjs/parse-table/lr1/lr1-item-set.js.map +0 -1
  134. package/dist/lib-cjs/parse-table/parse-table-build-error.js +0 -24
  135. package/dist/lib-cjs/parse-table/parse-table-build-error.js.map +0 -1
  136. package/dist/lib-cjs/parse-table/parse-table-error.js +0 -19
  137. package/dist/lib-cjs/parse-table/parse-table-error.js.map +0 -1
  138. package/dist/lib-cjs/parse-table/parse-table-json.js +0 -12
  139. package/dist/lib-cjs/parse-table/parse-table-json.js.map +0 -1
  140. package/dist/lib-cjs/parse-table/parse-table.js +0 -345
  141. package/dist/lib-cjs/parse-table/parse-table.js.map +0 -1
  142. package/dist/lib-cjs/parse-table/slr/index.js +0 -13
  143. package/dist/lib-cjs/parse-table/slr/index.js.map +0 -1
  144. package/dist/lib-cjs/parse-table/slr/parse-action.js +0 -8
  145. package/dist/lib-cjs/parse-table/slr/parse-action.js.map +0 -1
  146. package/dist/lib-cjs/parse-table/slr/slr-table.js +0 -18
  147. package/dist/lib-cjs/parse-table/slr/slr-table.js.map +0 -1
  148. package/dist/lib-cjs/parse-table/table/index.js +0 -21
  149. package/dist/lib-cjs/parse-table/table/index.js.map +0 -1
  150. package/dist/lib-cjs/parse-table/table/lr-parse-table.js +0 -192
  151. package/dist/lib-cjs/parse-table/table/lr-parse-table.js.map +0 -1
  152. package/dist/lib-cjs/parse-table/table/parse-action.js +0 -54
  153. package/dist/lib-cjs/parse-table/table/parse-action.js.map +0 -1
  154. package/dist/lib-cjs/parse-table/table/table-builder-base.js +0 -153
  155. package/dist/lib-cjs/parse-table/table/table-builder-base.js.map +0 -1
  156. package/dist/lib-cjs/parse-table/token-inventory.js +0 -18
  157. package/dist/lib-cjs/parse-table/token-inventory.js.map +0 -1
  158. package/dist/lib-cjs/parser-lr.js +0 -143
  159. package/dist/lib-cjs/parser-lr.js.map +0 -1
  160. package/dist/lib-cjs/shift-reduce/index.js +0 -11
  161. package/dist/lib-cjs/shift-reduce/index.js.map +0 -1
  162. package/dist/lib-cjs/shift-reduce/shift-reduce-engine.js +0 -224
  163. package/dist/lib-cjs/shift-reduce/shift-reduce-engine.js.map +0 -1
  164. package/dist/lib-cjs/transform/binding-map.js +0 -82
  165. package/dist/lib-cjs/transform/binding-map.js.map +0 -1
  166. package/dist/lib-cjs/transform/cst-transformer.js +0 -480
  167. package/dist/lib-cjs/transform/cst-transformer.js.map +0 -1
  168. package/dist/lib-cjs/transform/grammar-fixture.js +0 -109
  169. package/dist/lib-cjs/transform/grammar-fixture.js.map +0 -1
  170. package/dist/lib-cjs/transform/index.js +0 -12
  171. package/dist/lib-cjs/transform/index.js.map +0 -1
  172. package/docs/parser-lr-enhancement-proposals.md +0 -337
  173. package/grammars/fixtures/table-only-import/table-only-smoke.cjs +0 -38
@@ -1,432 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Lr1ItemSetBuilder = exports.Lr1ItemSetCollection = void 0;
4
- exports.lr1ItemsEqual = lr1ItemsEqual;
5
- exports.sortLr1Items = sortLr1Items;
6
- exports.lr1CoreKey = lr1CoreKey;
7
- exports.lr1ItemIdentity = lr1ItemIdentity;
8
- exports.lr1SetIdentity = lr1SetIdentity;
9
- exports.lr1CoreSetIdentity = lr1CoreSetIdentity;
10
- exports.firstAfterSymbols = firstAfterSymbols;
11
- exports.lr1Closure = lr1Closure;
12
- exports.lr1Goto = lr1Goto;
13
- exports.buildLr1ItemSets = buildLr1ItemSets;
14
- exports.mergeLalrItemSets = mergeLalrItemSets;
15
- exports.buildLalrGotoTargets = buildLalrGotoTargets;
16
- const bnf_symbol_js_1 = require("../bnf/bnf-symbol.js");
17
- const lr0_item_set_js_1 = require("../lr0/lr0-item-set.js");
18
- const table_builder_base_js_1 = require("../table/table-builder-base.js");
19
- /**
20
- * Returns whether two LR(1) items are identical.
21
- *
22
- * @param left - First item.
23
- * @param right - Second item.
24
- * @returns True when production id, dot, and lookahead match.
25
- */
26
- function lr1ItemsEqual(left, right) {
27
- return left.productionId === right.productionId
28
- && left.dot === right.dot
29
- && left.lookahead === right.lookahead;
30
- }
31
- /**
32
- * Sorts LR(1) items for canonical set comparison.
33
- *
34
- * @param items - Items to sort.
35
- * @returns A new array sorted by production id, dot, then lookahead.
36
- */
37
- function sortLr1Items(items) {
38
- return [...items].sort((left, right) => {
39
- if (left.productionId !== right.productionId) {
40
- return left.productionId - right.productionId;
41
- }
42
- if (left.dot !== right.dot) {
43
- return left.dot - right.dot;
44
- }
45
- return left.lookahead.localeCompare(right.lookahead);
46
- });
47
- }
48
- /**
49
- * Returns the LR(0) core key for one LR(1) item.
50
- *
51
- * @param item - LR(1) item to encode.
52
- * @returns A string `productionId:dot` shared by all lookaheads at the same dot position.
53
- */
54
- function lr1CoreKey(item) {
55
- return `${String(item.productionId)}:${String(item.dot)}`;
56
- }
57
- /**
58
- * Returns a stable identity string for one LR(1) item.
59
- *
60
- * @param item - Item to encode.
61
- * @returns A string `productionId:dot:lookahead` for set membership tests.
62
- */
63
- function lr1ItemIdentity(item) {
64
- return `${lr1CoreKey(item)}:${item.lookahead}`;
65
- }
66
- /**
67
- * Returns a stable identity string for an LR(1) item set.
68
- *
69
- * @param items - Closed item set.
70
- * @param alreadySorted - When true, skips re-sorting because items are canonical.
71
- * @returns A pipe-separated, sorted identity string for canonical set comparison.
72
- */
73
- function lr1SetIdentity(items, alreadySorted = false) {
74
- const sorted = alreadySorted ? items : sortLr1Items(items);
75
- return sorted
76
- .map((item) => lr1ItemIdentity(item))
77
- .join('|');
78
- }
79
- /**
80
- * Returns the LR(0) core identity for an LR(1) item set.
81
- *
82
- * @param items - LR(1) item set.
83
- * @returns A pipe-separated, sorted string of LR(0) cores with lookaheads removed.
84
- */
85
- function lr1CoreSetIdentity(items) {
86
- const cores = new Set(items.map((item) => lr1CoreKey(item)));
87
- return [...cores].sort().join('|');
88
- }
89
- /**
90
- * Computes FIRST(β) ∪ { lookahead } when every symbol in β is nullable.
91
- *
92
- * @param beta - Remaining right-hand side symbols after a non-terminal.
93
- * @param lookahead - Lookahead terminal following β.
94
- * @param analysis - Nullable and FIRST analysis for the grammar.
95
- * @returns Terminal keys that may follow the dotted non-terminal in this item.
96
- */
97
- function firstAfterSymbols(beta, lookahead, analysis) {
98
- const result = new Set();
99
- // Accumulate FIRST of each prefix symbol until a non-nullable symbol stops propagation.
100
- for (const symbol of beta) {
101
- for (const terminal of analysis.firstOfSymbol(symbol)) {
102
- result.add(terminal);
103
- }
104
- if (!analysis.isSymbolNullable(symbol)) {
105
- return result;
106
- }
107
- }
108
- // Every symbol in β is nullable, so the item's own lookahead is reachable.
109
- result.add(lookahead);
110
- return result;
111
- }
112
- /**
113
- * Computes the LR(1) closure of an item set.
114
- *
115
- * @param grammar - Augmented BNF grammar.
116
- * @param analysis - Nullable and FIRST analysis for the grammar.
117
- * @param items - Seed items.
118
- * @returns The seed items plus all items implied by dotted non-terminal prefixes.
119
- */
120
- function lr1Closure(grammar, analysis, items) {
121
- const result = sortLr1Items(items);
122
- const itemKeys = new Set(result.map((item) => lr1ItemIdentity(item)));
123
- const pendingIndices = result.map((_, index) => index);
124
- // Expand closure from each newly discovered item only.
125
- while (pendingIndices.length > 0) {
126
- const item = result[pendingIndices.pop()];
127
- const production = grammar.production(item.productionId);
128
- if (production === null) {
129
- continue;
130
- }
131
- const nextSymbol = production.rhs[item.dot];
132
- if (nextSymbol === undefined || nextSymbol.kind !== 'nonTerminal') {
133
- continue;
134
- }
135
- const beta = production.rhs.slice(item.dot + 1);
136
- // For each production of the non-terminal after the dot, propagate lookaheads.
137
- for (const candidate of grammar.productionsFor(nextSymbol.name)) {
138
- for (const lookahead of firstAfterSymbols(beta, item.lookahead, analysis)) {
139
- const closureItem = {
140
- productionId: candidate.id,
141
- dot: 0,
142
- lookahead,
143
- };
144
- const identity = lr1ItemIdentity(closureItem);
145
- if (!itemKeys.has(identity)) {
146
- itemKeys.add(identity);
147
- pendingIndices.push(result.length);
148
- result.push(closureItem);
149
- }
150
- }
151
- }
152
- }
153
- return sortLr1Items(result);
154
- }
155
- /**
156
- * Computes the LR(1) GOTO set for symbol `symbolKey`.
157
- *
158
- * @param grammar - Augmented BNF grammar.
159
- * @param analysis - Nullable and FIRST analysis for the grammar.
160
- * @param items - Closed item set.
161
- * @param symbolKey - Encoded terminal or non-terminal symbol.
162
- * @returns The closed item set reached after advancing the dot past `symbolKey`.
163
- */
164
- function lr1Goto(grammar, analysis, items, symbolKey) {
165
- const moved = [];
166
- // Advance the dot on every item expecting `symbolKey`, preserving lookaheads.
167
- for (const item of items) {
168
- const production = grammar.production(item.productionId);
169
- if (production === null) {
170
- continue;
171
- }
172
- const nextSymbol = production.rhs[item.dot];
173
- if (nextSymbol === undefined || (0, bnf_symbol_js_1.bnfParserSymbolKey)(nextSymbol) !== symbolKey) {
174
- continue;
175
- }
176
- moved.push({
177
- productionId: item.productionId,
178
- dot: item.dot + 1,
179
- lookahead: item.lookahead,
180
- });
181
- }
182
- if (moved.length === 0) {
183
- return [];
184
- }
185
- return lr1Closure(grammar, analysis, moved);
186
- }
187
- /**
188
- * Canonical collection of LR(1) item sets for a BNF grammar.
189
- */
190
- class Lr1ItemSetCollection {
191
- grammar;
192
- itemSets;
193
- indexByIdentity;
194
- /**
195
- * Creates a collection from an ordered list of closed item sets.
196
- *
197
- * @param grammar - Grammar the item sets were built from.
198
- * @param itemSets - Closed LR(1) item sets in discovery order.
199
- * @param indexByIdentity - Optional precomputed identity-to-state map.
200
- */
201
- constructor(
202
- /** Grammar analyzed when the item sets were constructed. */
203
- grammar,
204
- /** Closed LR(1) item sets indexed by parser state number. */
205
- itemSets, indexByIdentity) {
206
- this.grammar = grammar;
207
- this.itemSets = itemSets;
208
- if (indexByIdentity !== undefined) {
209
- this.indexByIdentity = indexByIdentity;
210
- return;
211
- }
212
- const builtIndex = new Map();
213
- for (let index = 0; index < itemSets.length; index += 1) {
214
- builtIndex.set(lr1SetIdentity(itemSets[index] ?? [], true), index);
215
- }
216
- this.indexByIdentity = builtIndex;
217
- }
218
- /**
219
- * Returns the index of an item set matching `items`, or null when absent.
220
- *
221
- * @param items - Closed item set to locate.
222
- * @returns State index, or null when no set has the same canonical identity.
223
- */
224
- indexOf(items) {
225
- return this.indexByIdentity.get(lr1SetIdentity(items, true)) ?? null;
226
- }
227
- /**
228
- * Returns LR(0) items derived from one LR(1) item set.
229
- *
230
- * @param items - LR(1) item set.
231
- * @returns Deduplicated LR(0) cores with lookaheads stripped.
232
- */
233
- static lr0Core(items) {
234
- const cores = new Map();
235
- for (const item of items) {
236
- cores.set(lr1CoreKey(item), {
237
- productionId: item.productionId,
238
- dot: item.dot,
239
- });
240
- }
241
- return (0, lr0_item_set_js_1.sortLr0Items)([...cores.values()]);
242
- }
243
- }
244
- exports.Lr1ItemSetCollection = Lr1ItemSetCollection;
245
- /**
246
- * Builds LR(1) item sets for a BNF grammar.
247
- */
248
- class Lr1ItemSetBuilder {
249
- /**
250
- * Builds the canonical LR(1) collection for a grammar.
251
- *
252
- * @param grammar - Augmented BNF grammar.
253
- * @param analysis - Nullable and FIRST analysis for the grammar.
254
- * @param startLookahead - Lookahead terminal for the initial item.
255
- * @returns The canonical LR(1) item set collection for the grammar.
256
- */
257
- static build(grammar, analysis, startLookahead) {
258
- const startProductions = grammar.productionsFor(grammar.startSymbol);
259
- if (startProductions.length === 0) {
260
- return new Lr1ItemSetCollection(grammar, []);
261
- }
262
- // Seed state 0 from the augmented start production and its initial lookahead.
263
- const initial = lr1Closure(grammar, analysis, [{
264
- productionId: startProductions[0].id,
265
- dot: 0,
266
- lookahead: startLookahead,
267
- }]);
268
- const itemSets = [[...initial]];
269
- const indexByIdentity = new Map([
270
- [lr1SetIdentity(initial, true), 0],
271
- ]);
272
- const pendingStates = [0];
273
- // Discover new states from each state exactly once.
274
- while (pendingStates.length > 0) {
275
- const stateIndex = pendingStates.pop();
276
- const itemSet = itemSets[stateIndex] ?? [];
277
- for (const symbolKey of (0, lr0_item_set_js_1.symbolsAfterDot)(grammar, itemSet)) {
278
- const gotoSet = lr1Goto(grammar, analysis, itemSet, symbolKey);
279
- if (gotoSet.length === 0) {
280
- continue;
281
- }
282
- const gotoKey = lr1SetIdentity(gotoSet, true);
283
- if (!indexByIdentity.has(gotoKey)) {
284
- const nextIndex = itemSets.length;
285
- indexByIdentity.set(gotoKey, nextIndex);
286
- itemSets.push([...gotoSet]);
287
- pendingStates.push(nextIndex);
288
- }
289
- }
290
- }
291
- return new Lr1ItemSetCollection(grammar, itemSets, indexByIdentity);
292
- }
293
- }
294
- exports.Lr1ItemSetBuilder = Lr1ItemSetBuilder;
295
- /**
296
- * Builds the canonical LR(1) item set collection for a grammar.
297
- *
298
- * @param grammar - Augmented BNF grammar.
299
- * @param analysis - Nullable and FIRST analysis for the grammar.
300
- * @param startLookahead - Lookahead terminal for the initial item.
301
- * @returns The canonical LR(1) item set collection for the grammar.
302
- */
303
- function buildLr1ItemSets(grammar, analysis, startLookahead) {
304
- return Lr1ItemSetBuilder.build(grammar, analysis, startLookahead);
305
- }
306
- /**
307
- * Merges LR(1) item sets that share the same LR(0) core into LALR item sets.
308
- *
309
- * @param collection - Canonical LR(1) item set collection.
310
- * @returns A new collection with LR(1) states merged by LR(0) core.
311
- */
312
- function mergeLalrItemSets(collection) {
313
- const coreToLalrIndex = new Map();
314
- const lr1ToLalr = new Map();
315
- const mergedItemSets = [];
316
- // Assign each LR(1) state to an LALR state keyed by its LR(0) core identity.
317
- for (let lr1Index = 0; lr1Index < collection.itemSets.length; lr1Index += 1) {
318
- const itemSet = collection.itemSets[lr1Index] ?? [];
319
- const core = lr1CoreSetIdentity(itemSet);
320
- let lalrIndex = coreToLalrIndex.get(core);
321
- if (lalrIndex === undefined) {
322
- lalrIndex = mergedItemSets.length;
323
- coreToLalrIndex.set(core, lalrIndex);
324
- mergedItemSets.push([]);
325
- }
326
- lr1ToLalr.set(lr1Index, lalrIndex);
327
- mergedItemSets[lalrIndex] = Lr1ItemSetBuilder.mergeItems(mergedItemSets[lalrIndex] ?? [], itemSet);
328
- }
329
- const remappedItemSets = mergedItemSets.map((itemSet) => sortLr1Items(itemSet));
330
- return new Lr1ItemSetCollection(collection.grammar, remappedItemSets);
331
- }
332
- /**
333
- * Builds LALR GOTO target indices from an LR(1) collection and merged LALR states.
334
- *
335
- * @param grammar - Augmented BNF grammar.
336
- * @param analysis - Nullable and FIRST analysis for the grammar.
337
- * @param lr1Collection - Canonical LR(1) item set collection.
338
- * @param lalrCollection - Merged LALR item set collection.
339
- * @param lr1ToLalr - LR(1) state index to LALR state index map.
340
- * @returns Map from `state:symbol` keys to LALR GOTO target state indices.
341
- */
342
- function buildLalrGotoTargets(grammar, analysis, lr1Collection, lr1ToLalr) {
343
- const targets = new Map();
344
- // Recompute LR(1) GOTOs and remap each target through the LR(1) → LALR index map.
345
- for (let lr1State = 0; lr1State < lr1Collection.itemSets.length; lr1State += 1) {
346
- const lalrState = lr1ToLalr.get(lr1State);
347
- if (lalrState === undefined) {
348
- continue;
349
- }
350
- const itemSet = lr1Collection.itemSets[lr1State] ?? [];
351
- for (const symbolKey of (0, lr0_item_set_js_1.symbolsAfterDot)(grammar, itemSet)) {
352
- const gotoSet = lr1Goto(grammar, analysis, itemSet, symbolKey);
353
- if (gotoSet.length === 0) {
354
- continue;
355
- }
356
- const lr1Target = lr1Collection.indexOf(gotoSet);
357
- if (lr1Target === null) {
358
- continue;
359
- }
360
- const lalrTarget = lr1ToLalr.get(lr1Target);
361
- if (lalrTarget === undefined) {
362
- continue;
363
- }
364
- targets.set(table_builder_base_js_1.TableBuilderBase.gotoKey(lalrState, symbolKey), lalrTarget);
365
- }
366
- }
367
- return targets;
368
- }
369
- /**
370
- * Merges lookaheads for LR(1) items sharing the same LR(0) core.
371
- */
372
- (function (Lr1ItemSetBuilder) {
373
- /**
374
- * Unions lookaheads for items with the same dotted production.
375
- *
376
- * @param left - Existing merged item set.
377
- * @param right - Additional LR(1) item set to merge in.
378
- * @returns Items with lookaheads unioned for each shared LR(0) core.
379
- */
380
- function mergeItems(left, right) {
381
- const lookaheadsByCore = new Map();
382
- // Collect every lookahead grouped by dotted-production core.
383
- for (const item of [...left, ...right]) {
384
- const core = lr1CoreKey(item);
385
- const lookaheads = lookaheadsByCore.get(core) ?? new Set();
386
- lookaheads.add(item.lookahead);
387
- lookaheadsByCore.set(core, lookaheads);
388
- }
389
- const merged = [];
390
- // Expand each core into one item per distinct lookahead.
391
- for (const [core, lookaheads] of lookaheadsByCore.entries()) {
392
- const [productionIdText, dotText] = core.split(':');
393
- const productionId = Number(productionIdText);
394
- const dot = Number(dotText);
395
- for (const lookahead of [...lookaheads].sort()) {
396
- merged.push({
397
- productionId,
398
- dot,
399
- lookahead,
400
- });
401
- }
402
- }
403
- return sortLr1Items(merged);
404
- }
405
- Lr1ItemSetBuilder.mergeItems = mergeItems;
406
- /**
407
- * Builds the LR(1) to LALR state index map for merged item sets.
408
- *
409
- * @param lr1Collection - Canonical LR(1) item set collection.
410
- * @param lalrCollection - Merged LALR item set collection.
411
- * @returns Map from LR(1) state index to merged LALR state index.
412
- */
413
- function buildLr1ToLalrMap(lr1Collection, lalrCollection) {
414
- const coreToLalrIndex = new Map();
415
- // Index LALR states by their LR(0) core identity.
416
- for (let lalrIndex = 0; lalrIndex < lalrCollection.itemSets.length; lalrIndex += 1) {
417
- coreToLalrIndex.set(lr1CoreSetIdentity(lalrCollection.itemSets[lalrIndex] ?? []), lalrIndex);
418
- }
419
- const lr1ToLalr = new Map();
420
- // Map each LR(1) state to the LALR state sharing its core.
421
- for (let lr1Index = 0; lr1Index < lr1Collection.itemSets.length; lr1Index += 1) {
422
- const core = lr1CoreSetIdentity(lr1Collection.itemSets[lr1Index] ?? []);
423
- const lalrIndex = coreToLalrIndex.get(core);
424
- if (lalrIndex !== undefined) {
425
- lr1ToLalr.set(lr1Index, lalrIndex);
426
- }
427
- }
428
- return lr1ToLalr;
429
- }
430
- Lr1ItemSetBuilder.buildLr1ToLalrMap = buildLr1ToLalrMap;
431
- })(Lr1ItemSetBuilder || (exports.Lr1ItemSetBuilder = Lr1ItemSetBuilder = {}));
432
- //# sourceMappingURL=lr1-item-set.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lr1-item-set.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/lr1/lr1-item-set.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ParseTableBuildError = void 0;
4
- const parser_lr_error_js_1 = require("../errors/parser-lr-error.js");
5
- /**
6
- * Thrown when LR table construction encounters unresolved conflicts.
7
- */
8
- class ParseTableBuildError extends parser_lr_error_js_1.ParserLrError {
9
- algorithm;
10
- conflicts;
11
- /**
12
- * Creates a parse table build error from detected conflicts.
13
- *
14
- * @param algorithm - LR algorithm that was attempted.
15
- * @param conflicts - Readable conflict descriptions.
16
- */
17
- constructor(algorithm, conflicts) {
18
- super(`LR table build failed for ${algorithm}: ${conflicts.join('; ')}`);
19
- this.algorithm = algorithm;
20
- this.conflicts = conflicts;
21
- }
22
- }
23
- exports.ParseTableBuildError = ParseTableBuildError;
24
- //# sourceMappingURL=parse-table-build-error.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse-table-build-error.js","sourceRoot":"","sources":["../../../src/lib/parse-table/parse-table-build-error.ts"],"names":[],"mappings":";;;AAAA,qEAA6D;AAG7D;;GAEG;AACH,MAAa,oBAAqB,SAAQ,kCAAa;IAS/B;IACA;IARpB;;;;;OAKG;IACH,YACoB,SAAsB,EACtB,SAA4B;QAG5C,KAAK,CAAC,6BAA6B,SAAS,KAAK,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAJzD,cAAS,GAAT,SAAS,CAAa;QACtB,cAAS,GAAT,SAAS,CAAmB;IAIhD,CAAC;CACJ;AAfD,oDAeC"}
@@ -1,19 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ParseTableError = void 0;
4
- const parser_lr_error_js_1 = require("../errors/parser-lr-error.js");
5
- /**
6
- * Thrown when serialized parse table JSON cannot be loaded.
7
- */
8
- class ParseTableError extends parser_lr_error_js_1.ParserLrError {
9
- /**
10
- * Creates a parse table load error.
11
- *
12
- * @param message - Human-readable failure description.
13
- */
14
- constructor(message) {
15
- super(message);
16
- }
17
- }
18
- exports.ParseTableError = ParseTableError;
19
- //# sourceMappingURL=parse-table-error.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse-table-error.js","sourceRoot":"","sources":["../../../src/lib/parse-table/parse-table-error.ts"],"names":[],"mappings":";;;AAAA,qEAA6D;AAE7D;;GAEG;AACH,MAAa,eAAgB,SAAQ,kCAAa;IAE9C;;;;OAIG;IACH,YAAmB,OAAe;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC;CACJ;AAXD,0CAWC"}
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isParseTableJsonV2 = isParseTableJsonV2;
4
- /**
5
- * Returns whether a JSON object is a version 2 parse table payload.
6
- *
7
- * @param json - Parsed table JSON object.
8
- */
9
- function isParseTableJsonV2(json) {
10
- return json.version === 2;
11
- }
12
- //# sourceMappingURL=parse-table-json.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse-table-json.js","sourceRoot":"","sources":["../../../src/lib/parse-table/parse-table-json.ts"],"names":[],"mappings":";;AA0DA,gDAGC;AARD;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,IAAoB;IAEnD,OAAO,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC;AAC9B,CAAC"}