parser-lr 0.2.3 → 0.3.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 (58) hide show
  1. package/README.md +85 -3
  2. package/bin/parser-lr.js +336 -171
  3. package/bin/parser-lr.js.map +1 -1
  4. package/dist/lib/parse-table/analysis/first-follow.d.ts +6 -0
  5. package/dist/lib/parse-table/analysis/first-follow.d.ts.map +1 -1
  6. package/dist/lib/parse-table/analysis/first-follow.js +13 -0
  7. package/dist/lib/parse-table/analysis/first-follow.js.map +1 -1
  8. package/dist/lib/parse-table/bnf/desugar-ebnf.d.ts.map +1 -1
  9. package/dist/lib/parse-table/bnf/desugar-ebnf.js +2 -0
  10. package/dist/lib/parse-table/bnf/desugar-ebnf.js.map +1 -1
  11. package/dist/lib/parse-table/build-lr-table.d.ts +1 -0
  12. package/dist/lib/parse-table/build-lr-table.d.ts.map +1 -1
  13. package/dist/lib/parse-table/build-lr-table.js +11 -1
  14. package/dist/lib/parse-table/build-lr-table.js.map +1 -1
  15. package/dist/lib/parse-table/index.d.ts +1 -1
  16. package/dist/lib/parse-table/index.d.ts.map +1 -1
  17. package/dist/lib/parse-table/index.js +1 -1
  18. package/dist/lib/parse-table/index.js.map +1 -1
  19. package/dist/lib/parse-table/lr0/lr0-item-set.d.ts +26 -2
  20. package/dist/lib/parse-table/lr0/lr0-item-set.d.ts.map +1 -1
  21. package/dist/lib/parse-table/lr0/lr0-item-set.js +92 -54
  22. package/dist/lib/parse-table/lr0/lr0-item-set.js.map +1 -1
  23. package/dist/lib/parse-table/lr1/lr1-item-set.d.ts +31 -2
  24. package/dist/lib/parse-table/lr1/lr1-item-set.d.ts.map +1 -1
  25. package/dist/lib/parse-table/lr1/lr1-item-set.js +95 -60
  26. package/dist/lib/parse-table/lr1/lr1-item-set.js.map +1 -1
  27. package/dist/lib/parse-table/parse-table.d.ts +13 -3
  28. package/dist/lib/parse-table/parse-table.d.ts.map +1 -1
  29. package/dist/lib/parse-table/parse-table.js +19 -8
  30. package/dist/lib/parse-table/parse-table.js.map +1 -1
  31. package/dist/lib/parse-table/table/index.d.ts +1 -1
  32. package/dist/lib/parse-table/table/index.d.ts.map +1 -1
  33. package/dist/lib/parse-table/table/index.js +1 -1
  34. package/dist/lib/parse-table/table/index.js.map +1 -1
  35. package/dist/lib/parse-table/table/lr-parse-table.d.ts +14 -2
  36. package/dist/lib/parse-table/table/lr-parse-table.d.ts.map +1 -1
  37. package/dist/lib/parse-table/table/lr-parse-table.js +38 -3
  38. package/dist/lib/parse-table/table/lr-parse-table.js.map +1 -1
  39. package/dist/lib/parse-table/table/parse-action.d.ts +3 -1
  40. package/dist/lib/parse-table/table/parse-action.d.ts.map +1 -1
  41. package/dist/lib/parse-table/table/parse-action.js.map +1 -1
  42. package/dist/lib/parse-table/table/table-builder-base.d.ts +5 -4
  43. package/dist/lib/parse-table/table/table-builder-base.d.ts.map +1 -1
  44. package/dist/lib/parse-table/table/table-builder-base.js +28 -8
  45. package/dist/lib/parse-table/table/table-builder-base.js.map +1 -1
  46. package/dist/lib/shift-reduce/shift-reduce-engine.d.ts +10 -0
  47. package/dist/lib/shift-reduce/shift-reduce-engine.d.ts.map +1 -1
  48. package/dist/lib/shift-reduce/shift-reduce-engine.js +11 -0
  49. package/dist/lib/shift-reduce/shift-reduce-engine.js.map +1 -1
  50. package/dist/lib/transform/binding-map.d.ts +6 -0
  51. package/dist/lib/transform/binding-map.d.ts.map +1 -1
  52. package/dist/lib/transform/binding-map.js +17 -0
  53. package/dist/lib/transform/binding-map.js.map +1 -1
  54. package/dist/lib/transform/cst-transformer.d.ts +6 -0
  55. package/dist/lib/transform/cst-transformer.d.ts.map +1 -1
  56. package/dist/lib/transform/cst-transformer.js +24 -2
  57. package/dist/lib/transform/cst-transformer.js.map +1 -1
  58. package/package.json +12 -3
@@ -4,6 +4,7 @@ import { bnfParserSymbolKey, bnfSymbolKey } from '../bnf/bnf-symbol.js';
4
4
  *
5
5
  * @param grammar - Grammar containing the referenced production.
6
6
  * @param item - LR(0) item to encode.
7
+ * @returns A human-readable dotted production string for diagnostics.
7
8
  */
8
9
  export function lr0ItemKey(grammar, item) {
9
10
  const production = grammar.production(item.productionId);
@@ -43,38 +44,60 @@ export function sortLr0Items(items) {
43
44
  return left.dot - right.dot;
44
45
  });
45
46
  }
47
+ /**
48
+ * Returns encoded symbol keys that appear immediately after the dot in an item set.
49
+ *
50
+ * @param grammar - BNF grammar containing referenced productions.
51
+ * @param items - Closed item set.
52
+ * @returns Sorted terminal and non-terminal keys eligible for GOTO from this state.
53
+ */
54
+ export function symbolsAfterDot(grammar, items) {
55
+ const keys = new Set();
56
+ for (const item of items) {
57
+ const production = grammar.production(item.productionId);
58
+ if (production === null) {
59
+ continue;
60
+ }
61
+ const nextSymbol = production.rhs[item.dot];
62
+ if (nextSymbol === undefined) {
63
+ continue;
64
+ }
65
+ keys.add(bnfParserSymbolKey(nextSymbol));
66
+ }
67
+ return [...keys].sort();
68
+ }
46
69
  /**
47
70
  * Computes the LR(0) closure of an item set.
48
71
  *
49
72
  * @param grammar - Plain or augmented BNF grammar.
50
73
  * @param items - Seed items.
74
+ * @returns The seed items plus all items implied by dotted non-terminal prefixes.
51
75
  */
52
76
  export function lr0Closure(grammar, items) {
53
77
  const result = sortLr0Items(items);
54
78
  const itemKeys = new Set(result.map((item) => Lr0ItemSetBuilder.itemIdentity(item)));
55
- let changed = true;
56
- while (changed) {
57
- changed = false;
58
- for (const item of [...result]) {
59
- const production = grammar.production(item.productionId);
60
- if (production === null) {
61
- continue;
62
- }
63
- const nextSymbol = production.rhs[item.dot];
64
- if (nextSymbol === undefined || nextSymbol.kind !== 'nonTerminal') {
65
- continue;
66
- }
67
- for (const candidate of grammar.productionsFor(nextSymbol.name)) {
68
- const closureItem = {
69
- productionId: candidate.id,
70
- dot: 0,
71
- };
72
- const identity = Lr0ItemSetBuilder.itemIdentity(closureItem);
73
- if (!itemKeys.has(identity)) {
74
- itemKeys.add(identity);
75
- result.push(closureItem);
76
- changed = true;
77
- }
79
+ const pendingIndices = result.map((_, index) => index);
80
+ // Expand closure from each newly discovered item only.
81
+ while (pendingIndices.length > 0) {
82
+ const item = result[pendingIndices.pop()];
83
+ const production = grammar.production(item.productionId);
84
+ if (production === null) {
85
+ continue;
86
+ }
87
+ const nextSymbol = production.rhs[item.dot];
88
+ if (nextSymbol === undefined || nextSymbol.kind !== 'nonTerminal') {
89
+ continue;
90
+ }
91
+ for (const candidate of grammar.productionsFor(nextSymbol.name)) {
92
+ const closureItem = {
93
+ productionId: candidate.id,
94
+ dot: 0,
95
+ };
96
+ const identity = Lr0ItemSetBuilder.itemIdentity(closureItem);
97
+ if (!itemKeys.has(identity)) {
98
+ itemKeys.add(identity);
99
+ pendingIndices.push(result.length);
100
+ result.push(closureItem);
78
101
  }
79
102
  }
80
103
  }
@@ -86,9 +109,11 @@ export function lr0Closure(grammar, items) {
86
109
  * @param grammar - Plain or augmented BNF grammar.
87
110
  * @param items - Closed item set.
88
111
  * @param symbolKey - Encoded terminal or non-terminal symbol.
112
+ * @returns The closed item set reached after advancing the dot past `symbolKey`.
89
113
  */
90
114
  export function lr0Goto(grammar, items, symbolKey) {
91
115
  const moved = [];
116
+ // Advance the dot on every item expecting `symbolKey`.
92
117
  for (const item of items) {
93
118
  const production = grammar.production(item.productionId);
94
119
  if (production === null) {
@@ -114,15 +139,30 @@ export function lr0Goto(grammar, items, symbolKey) {
114
139
  export class Lr0ItemSetCollection {
115
140
  grammar;
116
141
  itemSets;
142
+ indexByIdentity;
117
143
  /**
118
144
  * Creates a collection from an ordered list of closed item sets.
119
145
  *
120
146
  * @param grammar - Grammar the item sets were built from.
121
147
  * @param itemSets - Closed LR(0) item sets in discovery order.
148
+ * @param indexByIdentity - Optional precomputed identity-to-state map.
122
149
  */
123
- constructor(grammar, itemSets) {
150
+ constructor(
151
+ /** Grammar analyzed when the item sets were constructed. */
152
+ grammar,
153
+ /** Closed LR(0) item sets indexed by parser state number. */
154
+ itemSets, indexByIdentity) {
124
155
  this.grammar = grammar;
125
156
  this.itemSets = itemSets;
157
+ if (indexByIdentity !== undefined) {
158
+ this.indexByIdentity = indexByIdentity;
159
+ return;
160
+ }
161
+ const builtIndex = new Map();
162
+ for (let index = 0; index < itemSets.length; index += 1) {
163
+ builtIndex.set(Lr0ItemSetBuilder.setIdentity(itemSets[index] ?? [], true), index);
164
+ }
165
+ this.indexByIdentity = builtIndex;
126
166
  }
127
167
  /**
128
168
  * Returns the index of an item set matching `items`, or null when absent.
@@ -130,13 +170,8 @@ export class Lr0ItemSetCollection {
130
170
  * @param items - Closed item set to locate.
131
171
  */
132
172
  indexOf(items) {
133
- const target = Lr0ItemSetBuilder.setIdentity(items);
134
- for (let index = 0; index < this.itemSets.length; index += 1) {
135
- if (Lr0ItemSetBuilder.setIdentity(this.itemSets[index]) === target) {
136
- return index;
137
- }
138
- }
139
- return null;
173
+ const target = Lr0ItemSetBuilder.setIdentity(items, true);
174
+ return this.indexByIdentity.get(target) ?? null;
140
175
  }
141
176
  }
142
177
  /**
@@ -147,42 +182,42 @@ export class Lr0ItemSetBuilder {
147
182
  * Builds the canonical LR(0) collection for a grammar.
148
183
  *
149
184
  * @param grammar - Augmented or plain BNF grammar.
185
+ * @returns The canonical LR(0) item set collection for the grammar.
150
186
  */
151
187
  static build(grammar) {
152
188
  const startProductions = grammar.productionsFor(grammar.startSymbol);
153
189
  if (startProductions.length === 0) {
154
190
  return new Lr0ItemSetCollection(grammar, []);
155
191
  }
192
+ // Seed state 0 from the start production at dot zero.
156
193
  const initial = lr0Closure(grammar, [{
157
194
  productionId: startProductions[0].id,
158
195
  dot: 0,
159
196
  }]);
160
197
  const itemSets = [[...initial]];
161
- const itemSetKeys = new Map([
162
- [Lr0ItemSetBuilder.setIdentity(initial), 0],
198
+ const indexByIdentity = new Map([
199
+ [Lr0ItemSetBuilder.setIdentity(initial, true), 0],
163
200
  ]);
164
- const symbols = Lr0ItemSetBuilder.grammarSymbolKeys(grammar);
165
- let changed = true;
166
- while (changed) {
167
- changed = false;
168
- for (const itemSet of [...itemSets]) {
169
- for (const symbolKey of symbols) {
170
- const gotoSet = lr0Goto(grammar, itemSet, symbolKey);
171
- if (gotoSet.length === 0) {
172
- continue;
173
- }
174
- const gotoKey = Lr0ItemSetBuilder.setIdentity(gotoSet);
175
- const existingIndex = itemSetKeys.get(gotoKey);
176
- if (existingIndex === undefined) {
177
- const nextIndex = itemSets.length;
178
- itemSetKeys.set(gotoKey, nextIndex);
179
- itemSets.push([...gotoSet]);
180
- changed = true;
181
- }
201
+ const pendingStates = [0];
202
+ // Discover new states from each state exactly once.
203
+ while (pendingStates.length > 0) {
204
+ const stateIndex = pendingStates.pop();
205
+ const itemSet = itemSets[stateIndex] ?? [];
206
+ for (const symbolKey of symbolsAfterDot(grammar, itemSet)) {
207
+ const gotoSet = lr0Goto(grammar, itemSet, symbolKey);
208
+ if (gotoSet.length === 0) {
209
+ continue;
210
+ }
211
+ const gotoKey = Lr0ItemSetBuilder.setIdentity(gotoSet, true);
212
+ if (!indexByIdentity.has(gotoKey)) {
213
+ const nextIndex = itemSets.length;
214
+ indexByIdentity.set(gotoKey, nextIndex);
215
+ itemSets.push([...gotoSet]);
216
+ pendingStates.push(nextIndex);
182
217
  }
183
218
  }
184
219
  }
185
- return new Lr0ItemSetCollection(grammar, itemSets);
220
+ return new Lr0ItemSetCollection(grammar, itemSets, indexByIdentity);
186
221
  }
187
222
  /**
188
223
  * Returns every terminal and non-terminal key that can appear in GOTO.
@@ -208,9 +243,11 @@ export class Lr0ItemSetBuilder {
208
243
  * Returns a stable identity string for an item set.
209
244
  *
210
245
  * @param items - Closed item set.
246
+ * @param alreadySorted - When true, skips re-sorting because items are canonical.
211
247
  */
212
- static setIdentity(items) {
213
- return sortLr0Items(items)
248
+ static setIdentity(items, alreadySorted = false) {
249
+ const sorted = alreadySorted ? items : sortLr0Items(items);
250
+ return sorted
214
251
  .map((item) => Lr0ItemSetBuilder.itemIdentity(item))
215
252
  .join('|');
216
253
  }
@@ -219,6 +256,7 @@ export class Lr0ItemSetBuilder {
219
256
  * Builds the canonical LR(0) item set collection for a grammar.
220
257
  *
221
258
  * @param grammar - Augmented or plain BNF grammar.
259
+ * @returns The canonical LR(0) item set collection for the grammar.
222
260
  */
223
261
  export function buildLr0ItemSets(grammar) {
224
262
  return Lr0ItemSetBuilder.build(grammar);
@@ -1 +1 @@
1
- {"version":3,"file":"lr0-item-set.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/lr0/lr0-item-set.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lr0-item-set.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/lr0/lr0-item-set.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,11 @@ import type { Lr0Item } from '../lr0/lr0-item-set.js';
6
6
  * One LR(1) item: a dotted production with a single lookahead terminal.
7
7
  */
8
8
  export interface Lr1Item {
9
+ /** Stable production id assigned during BNF desugaring. */
9
10
  readonly productionId: number;
11
+ /** Number of right-hand side symbols before the dot. */
10
12
  readonly dot: number;
13
+ /** Encoded terminal key governing reduce and shift in this state. */
11
14
  readonly lookahead: string;
12
15
  }
13
16
  /**
@@ -15,36 +18,43 @@ export interface Lr1Item {
15
18
  *
16
19
  * @param left - First item.
17
20
  * @param right - Second item.
21
+ * @returns True when production id, dot, and lookahead match.
18
22
  */
19
23
  export declare function lr1ItemsEqual(left: Lr1Item, right: Lr1Item): boolean;
20
24
  /**
21
25
  * Sorts LR(1) items for canonical set comparison.
22
26
  *
23
27
  * @param items - Items to sort.
28
+ * @returns A new array sorted by production id, dot, then lookahead.
24
29
  */
25
30
  export declare function sortLr1Items(items: readonly Lr1Item[]): Lr1Item[];
26
31
  /**
27
32
  * Returns the LR(0) core key for one LR(1) item.
28
33
  *
29
34
  * @param item - LR(1) item to encode.
35
+ * @returns A string `productionId:dot` shared by all lookaheads at the same dot position.
30
36
  */
31
37
  export declare function lr1CoreKey(item: Lr1Item): string;
32
38
  /**
33
39
  * Returns a stable identity string for one LR(1) item.
34
40
  *
35
41
  * @param item - Item to encode.
42
+ * @returns A string `productionId:dot:lookahead` for set membership tests.
36
43
  */
37
44
  export declare function lr1ItemIdentity(item: Lr1Item): string;
38
45
  /**
39
46
  * Returns a stable identity string for an LR(1) item set.
40
47
  *
41
48
  * @param items - Closed item set.
49
+ * @param alreadySorted - When true, skips re-sorting because items are canonical.
50
+ * @returns A pipe-separated, sorted identity string for canonical set comparison.
42
51
  */
43
- export declare function lr1SetIdentity(items: readonly Lr1Item[]): string;
52
+ export declare function lr1SetIdentity(items: readonly Lr1Item[], alreadySorted?: boolean): string;
44
53
  /**
45
54
  * Returns the LR(0) core identity for an LR(1) item set.
46
55
  *
47
56
  * @param items - LR(1) item set.
57
+ * @returns A pipe-separated, sorted string of LR(0) cores with lookaheads removed.
48
58
  */
49
59
  export declare function lr1CoreSetIdentity(items: readonly Lr1Item[]): string;
50
60
  /**
@@ -53,6 +63,7 @@ export declare function lr1CoreSetIdentity(items: readonly Lr1Item[]): string;
53
63
  * @param beta - Remaining right-hand side symbols after a non-terminal.
54
64
  * @param lookahead - Lookahead terminal following β.
55
65
  * @param analysis - Nullable and FIRST analysis for the grammar.
66
+ * @returns Terminal keys that may follow the dotted non-terminal in this item.
56
67
  */
57
68
  export declare function firstAfterSymbols(beta: readonly BnfSymbol[], lookahead: string, analysis: GrammarAnalysis): ReadonlySet<string>;
58
69
  /**
@@ -61,6 +72,7 @@ export declare function firstAfterSymbols(beta: readonly BnfSymbol[], lookahead:
61
72
  * @param grammar - Augmented BNF grammar.
62
73
  * @param analysis - Nullable and FIRST analysis for the grammar.
63
74
  * @param items - Seed items.
75
+ * @returns The seed items plus all items implied by dotted non-terminal prefixes.
64
76
  */
65
77
  export declare function lr1Closure(grammar: BnfGrammar, analysis: GrammarAnalysis, items: readonly Lr1Item[]): readonly Lr1Item[];
66
78
  /**
@@ -70,31 +82,42 @@ export declare function lr1Closure(grammar: BnfGrammar, analysis: GrammarAnalysi
70
82
  * @param analysis - Nullable and FIRST analysis for the grammar.
71
83
  * @param items - Closed item set.
72
84
  * @param symbolKey - Encoded terminal or non-terminal symbol.
85
+ * @returns The closed item set reached after advancing the dot past `symbolKey`.
73
86
  */
74
87
  export declare function lr1Goto(grammar: BnfGrammar, analysis: GrammarAnalysis, items: readonly Lr1Item[], symbolKey: string): readonly Lr1Item[];
75
88
  /**
76
89
  * Canonical collection of LR(1) item sets for a BNF grammar.
77
90
  */
78
91
  export declare class Lr1ItemSetCollection {
92
+ /** Grammar analyzed when the item sets were constructed. */
79
93
  readonly grammar: BnfGrammar;
94
+ /** Closed LR(1) item sets indexed by parser state number. */
80
95
  readonly itemSets: readonly (readonly Lr1Item[])[];
96
+ private readonly indexByIdentity;
81
97
  /**
82
98
  * Creates a collection from an ordered list of closed item sets.
83
99
  *
84
100
  * @param grammar - Grammar the item sets were built from.
85
101
  * @param itemSets - Closed LR(1) item sets in discovery order.
102
+ * @param indexByIdentity - Optional precomputed identity-to-state map.
86
103
  */
87
- constructor(grammar: BnfGrammar, itemSets: readonly (readonly Lr1Item[])[]);
104
+ constructor(
105
+ /** Grammar analyzed when the item sets were constructed. */
106
+ grammar: BnfGrammar,
107
+ /** Closed LR(1) item sets indexed by parser state number. */
108
+ itemSets: readonly (readonly Lr1Item[])[], indexByIdentity?: ReadonlyMap<string, number>);
88
109
  /**
89
110
  * Returns the index of an item set matching `items`, or null when absent.
90
111
  *
91
112
  * @param items - Closed item set to locate.
113
+ * @returns State index, or null when no set has the same canonical identity.
92
114
  */
93
115
  indexOf(items: readonly Lr1Item[]): number | null;
94
116
  /**
95
117
  * Returns LR(0) items derived from one LR(1) item set.
96
118
  *
97
119
  * @param items - LR(1) item set.
120
+ * @returns Deduplicated LR(0) cores with lookaheads stripped.
98
121
  */
99
122
  static lr0Core(items: readonly Lr1Item[]): readonly Lr0Item[];
100
123
  }
@@ -108,6 +131,7 @@ export declare class Lr1ItemSetBuilder {
108
131
  * @param grammar - Augmented BNF grammar.
109
132
  * @param analysis - Nullable and FIRST analysis for the grammar.
110
133
  * @param startLookahead - Lookahead terminal for the initial item.
134
+ * @returns The canonical LR(1) item set collection for the grammar.
111
135
  */
112
136
  static build(grammar: BnfGrammar, analysis: GrammarAnalysis, startLookahead: string): Lr1ItemSetCollection;
113
137
  }
@@ -117,12 +141,14 @@ export declare class Lr1ItemSetBuilder {
117
141
  * @param grammar - Augmented BNF grammar.
118
142
  * @param analysis - Nullable and FIRST analysis for the grammar.
119
143
  * @param startLookahead - Lookahead terminal for the initial item.
144
+ * @returns The canonical LR(1) item set collection for the grammar.
120
145
  */
121
146
  export declare function buildLr1ItemSets(grammar: BnfGrammar, analysis: GrammarAnalysis, startLookahead: string): Lr1ItemSetCollection;
122
147
  /**
123
148
  * Merges LR(1) item sets that share the same LR(0) core into LALR item sets.
124
149
  *
125
150
  * @param collection - Canonical LR(1) item set collection.
151
+ * @returns A new collection with LR(1) states merged by LR(0) core.
126
152
  */
127
153
  export declare function mergeLalrItemSets(collection: Lr1ItemSetCollection): Lr1ItemSetCollection;
128
154
  /**
@@ -133,6 +159,7 @@ export declare function mergeLalrItemSets(collection: Lr1ItemSetCollection): Lr1
133
159
  * @param lr1Collection - Canonical LR(1) item set collection.
134
160
  * @param lalrCollection - Merged LALR item set collection.
135
161
  * @param lr1ToLalr - LR(1) state index to LALR state index map.
162
+ * @returns Map from `state:symbol` keys to LALR GOTO target state indices.
136
163
  */
137
164
  export declare function buildLalrGotoTargets(grammar: BnfGrammar, analysis: GrammarAnalysis, lr1Collection: Lr1ItemSetCollection, lr1ToLalr: ReadonlyMap<number, number>): ReadonlyMap<string, number>;
138
165
  /**
@@ -144,6 +171,7 @@ export declare namespace Lr1ItemSetBuilder {
144
171
  *
145
172
  * @param left - Existing merged item set.
146
173
  * @param right - Additional LR(1) item set to merge in.
174
+ * @returns Items with lookaheads unioned for each shared LR(0) core.
147
175
  */
148
176
  function mergeItems(left: readonly Lr1Item[], right: readonly Lr1Item[]): Lr1Item[];
149
177
  /**
@@ -151,6 +179,7 @@ export declare namespace Lr1ItemSetBuilder {
151
179
  *
152
180
  * @param lr1Collection - Canonical LR(1) item set collection.
153
181
  * @param lalrCollection - Merged LALR item set collection.
182
+ * @returns Map from LR(1) state index to merged LALR state index.
154
183
  */
155
184
  function buildLr1ToLalrMap(lr1Collection: Lr1ItemSetCollection, lalrCollection: Lr1ItemSetCollection): Map<number, number>;
156
185
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lr1-item-set.d.ts","sourceRoot":"","sources":["../../../../src/lib/parse-table/lr1/lr1-item-set.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lr1-item-set.d.ts","sourceRoot":"","sources":["../../../../src/lib/parse-table/lr1/lr1-item-set.ts"],"names":[],"mappings":"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"}