parser-lr 0.6.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/README.md +14 -30
  2. package/bin/parser-lr.js +12759 -13493
  3. package/bin/parser-lr.js.map +1 -1
  4. package/dist/lib/grammar/grammar-from-cst.js +4 -1
  5. package/dist/lib/grammar/grammar-from-cst.js.map +1 -1
  6. package/dist/lib/grammar/grammar.json +86 -820
  7. package/dist/lib/grammar/index.d.ts +1 -1
  8. package/dist/lib/grammar/index.d.ts.map +1 -1
  9. package/dist/lib/grammar/index.js +1 -1
  10. package/dist/lib/grammar/index.js.map +1 -1
  11. package/dist/lib/grammar/meta-grammar-table.d.ts +0 -12
  12. package/dist/lib/grammar/meta-grammar-table.d.ts.map +1 -1
  13. package/dist/lib/grammar/meta-grammar-table.js +5 -22
  14. package/dist/lib/grammar/meta-grammar-table.js.map +1 -1
  15. package/dist/lib/grammar/table-validator.d.ts.map +1 -1
  16. package/dist/lib/grammar/table-validator.js +19 -1
  17. package/dist/lib/grammar/table-validator.js.map +1 -1
  18. package/dist/lib/grammar-entry.d.ts +42 -0
  19. package/dist/lib/grammar-entry.d.ts.map +1 -0
  20. package/dist/lib/grammar-entry.js +45 -0
  21. package/dist/lib/grammar-entry.js.map +1 -0
  22. package/dist/lib/index.d.ts +7 -5
  23. package/dist/lib/index.d.ts.map +1 -1
  24. package/dist/lib/index.js +0 -3
  25. package/dist/lib/index.js.map +1 -1
  26. package/dist/lib/parse-context.d.ts +4 -15
  27. package/dist/lib/parse-context.d.ts.map +1 -1
  28. package/dist/lib/parse-context.js +4 -23
  29. package/dist/lib/parse-context.js.map +1 -1
  30. package/dist/lib/transform/grammar-fixture.js +3 -3
  31. package/dist/lib/transform/grammar-fixture.js.map +1 -1
  32. package/docs/The Ferrite Programming Language.md +568 -0
  33. package/docs/grammar.md +55 -3
  34. package/docs/parser-lr-browser-lib-split.md +174 -0
  35. package/grammars/6502.grammar +2 -2
  36. package/grammars/ferrite.grammar +107 -97
  37. package/grammars/grammar.grammar +19 -140
  38. package/grammars/lisp.grammar +3 -2
  39. package/package.json +7 -2
  40. package/dist/lib/grammar/grammar-json-path.d.ts +0 -2
  41. package/dist/lib/grammar/grammar-json-path.d.ts.map +0 -1
  42. package/dist/lib/grammar/grammar-json-path.esm.d.ts +0 -5
  43. package/dist/lib/grammar/grammar-json-path.esm.d.ts.map +0 -1
  44. package/dist/lib/grammar/grammar-json-path.esm.js +0 -9
  45. package/dist/lib/grammar/grammar-json-path.esm.js.map +0 -1
  46. package/dist/lib/grammar/grammar-json-path.js +0 -2
  47. package/dist/lib/grammar/grammar-json-path.js.map +0 -1
  48. package/dist/lib-cjs/ast/ast-node.js +0 -70
  49. package/dist/lib-cjs/ast/ast-node.js.map +0 -1
  50. package/dist/lib-cjs/errors/index.js +0 -9
  51. package/dist/lib-cjs/errors/index.js.map +0 -1
  52. package/dist/lib-cjs/errors/parser-lr-error.js +0 -52
  53. package/dist/lib-cjs/errors/parser-lr-error.js.map +0 -1
  54. package/dist/lib-cjs/grammar/ast-schema.js +0 -43
  55. package/dist/lib-cjs/grammar/ast-schema.js.map +0 -1
  56. package/dist/lib-cjs/grammar/ast-type.js +0 -3
  57. package/dist/lib-cjs/grammar/ast-type.js.map +0 -1
  58. package/dist/lib-cjs/grammar/expression.js +0 -3
  59. package/dist/lib-cjs/grammar/expression.js.map +0 -1
  60. package/dist/lib-cjs/grammar/grammar-from-cst.js +0 -641
  61. package/dist/lib-cjs/grammar/grammar-from-cst.js.map +0 -1
  62. package/dist/lib-cjs/grammar/grammar-json-path.js +0 -13
  63. package/dist/lib-cjs/grammar/grammar-json-path.js.map +0 -1
  64. package/dist/lib-cjs/grammar/grammar-literals.js +0 -71
  65. package/dist/lib-cjs/grammar/grammar-literals.js.map +0 -1
  66. package/dist/lib-cjs/grammar/grammar.js +0 -64
  67. package/dist/lib-cjs/grammar/grammar.js.map +0 -1
  68. package/dist/lib-cjs/grammar/grammar.json +0 -5760
  69. package/dist/lib-cjs/grammar/index.js +0 -21
  70. package/dist/lib-cjs/grammar/index.js.map +0 -1
  71. package/dist/lib-cjs/grammar/meta-grammar-table.js +0 -68
  72. package/dist/lib-cjs/grammar/meta-grammar-table.js.map +0 -1
  73. package/dist/lib-cjs/grammar/production.js +0 -3
  74. package/dist/lib-cjs/grammar/production.js.map +0 -1
  75. package/dist/lib-cjs/grammar/read-grammar-error.js +0 -22
  76. package/dist/lib-cjs/grammar/read-grammar-error.js.map +0 -1
  77. package/dist/lib-cjs/grammar/read-grammar.js +0 -24
  78. package/dist/lib-cjs/grammar/read-grammar.js.map +0 -1
  79. package/dist/lib-cjs/grammar/table-validator.js +0 -262
  80. package/dist/lib-cjs/grammar/table-validator.js.map +0 -1
  81. package/dist/lib-cjs/grammar/token-rule.js +0 -3
  82. package/dist/lib-cjs/grammar/token-rule.js.map +0 -1
  83. package/dist/lib-cjs/grammar/transform-expression.js +0 -3
  84. package/dist/lib-cjs/grammar/transform-expression.js.map +0 -1
  85. package/dist/lib-cjs/grammar/transform-rule.js +0 -3
  86. package/dist/lib-cjs/grammar/transform-rule.js.map +0 -1
  87. package/dist/lib-cjs/grammar/transform-schema.js +0 -43
  88. package/dist/lib-cjs/grammar/transform-schema.js.map +0 -1
  89. package/dist/lib-cjs/index.js +0 -66
  90. package/dist/lib-cjs/index.js.map +0 -1
  91. package/dist/lib-cjs/lexer/index.js +0 -32
  92. package/dist/lib-cjs/lexer/index.js.map +0 -1
  93. package/dist/lib-cjs/lexer/lexer-compile-error.js +0 -22
  94. package/dist/lib-cjs/lexer/lexer-compile-error.js.map +0 -1
  95. package/dist/lib-cjs/lexer/lexer-compile.js +0 -201
  96. package/dist/lib-cjs/lexer/lexer-compile.js.map +0 -1
  97. package/dist/lib-cjs/lexer/lexer-error.js +0 -22
  98. package/dist/lib-cjs/lexer/lexer-error.js.map +0 -1
  99. package/dist/lib-cjs/lexer/lexer-input-error.js +0 -17
  100. package/dist/lib-cjs/lexer/lexer-input-error.js.map +0 -1
  101. package/dist/lib-cjs/lexer/lexer-state-error.js +0 -19
  102. package/dist/lib-cjs/lexer/lexer-state-error.js.map +0 -1
  103. package/dist/lib-cjs/lexer/lexer.js +0 -278
  104. package/dist/lib-cjs/lexer/lexer.js.map +0 -1
  105. package/dist/lib-cjs/lexer/token.js +0 -44
  106. package/dist/lib-cjs/lexer/token.js.map +0 -1
  107. package/dist/lib-cjs/package.json +0 -3
  108. package/dist/lib-cjs/parse-context-error.js +0 -19
  109. package/dist/lib-cjs/parse-context-error.js.map +0 -1
  110. package/dist/lib-cjs/parse-context.js +0 -137
  111. package/dist/lib-cjs/parse-context.js.map +0 -1
  112. package/dist/lib-cjs/parse-output-error.js +0 -19
  113. package/dist/lib-cjs/parse-output-error.js.map +0 -1
  114. package/dist/lib-cjs/parse-output.js +0 -18
  115. package/dist/lib-cjs/parse-output.js.map +0 -1
  116. package/dist/lib-cjs/parse-table/analysis/first-follow.js +0 -294
  117. package/dist/lib-cjs/parse-table/analysis/first-follow.js.map +0 -1
  118. package/dist/lib-cjs/parse-table/analysis/index.js +0 -9
  119. package/dist/lib-cjs/parse-table/analysis/index.js.map +0 -1
  120. package/dist/lib-cjs/parse-table/bnf/bnf-grammar.js +0 -140
  121. package/dist/lib-cjs/parse-table/bnf/bnf-grammar.js.map +0 -1
  122. package/dist/lib-cjs/parse-table/bnf/bnf-production.js +0 -3
  123. package/dist/lib-cjs/parse-table/bnf/bnf-production.js.map +0 -1
  124. package/dist/lib-cjs/parse-table/bnf/bnf-symbol.js +0 -39
  125. package/dist/lib-cjs/parse-table/bnf/bnf-symbol.js.map +0 -1
  126. package/dist/lib-cjs/parse-table/bnf/desugar-ebnf.js +0 -224
  127. package/dist/lib-cjs/parse-table/bnf/desugar-ebnf.js.map +0 -1
  128. package/dist/lib-cjs/parse-table/bnf/index.js +0 -13
  129. package/dist/lib-cjs/parse-table/bnf/index.js.map +0 -1
  130. package/dist/lib-cjs/parse-table/build-lr-table.js +0 -171
  131. package/dist/lib-cjs/parse-table/build-lr-table.js.map +0 -1
  132. package/dist/lib-cjs/parse-table/index.js +0 -49
  133. package/dist/lib-cjs/parse-table/index.js.map +0 -1
  134. package/dist/lib-cjs/parse-table/lr-algorithm-error.js +0 -19
  135. package/dist/lib-cjs/parse-table/lr-algorithm-error.js.map +0 -1
  136. package/dist/lib-cjs/parse-table/lr-algorithm.js +0 -31
  137. package/dist/lib-cjs/parse-table/lr-algorithm.js.map +0 -1
  138. package/dist/lib-cjs/parse-table/lr0/index.js +0 -14
  139. package/dist/lib-cjs/parse-table/lr0/index.js.map +0 -1
  140. package/dist/lib-cjs/parse-table/lr0/lr0-item-set.js +0 -286
  141. package/dist/lib-cjs/parse-table/lr0/lr0-item-set.js.map +0 -1
  142. package/dist/lib-cjs/parse-table/lr1/index.js +0 -18
  143. package/dist/lib-cjs/parse-table/lr1/index.js.map +0 -1
  144. package/dist/lib-cjs/parse-table/lr1/lr1-item-set.js +0 -432
  145. package/dist/lib-cjs/parse-table/lr1/lr1-item-set.js.map +0 -1
  146. package/dist/lib-cjs/parse-table/parse-table-build-error.js +0 -24
  147. package/dist/lib-cjs/parse-table/parse-table-build-error.js.map +0 -1
  148. package/dist/lib-cjs/parse-table/parse-table-error.js +0 -19
  149. package/dist/lib-cjs/parse-table/parse-table-error.js.map +0 -1
  150. package/dist/lib-cjs/parse-table/parse-table-json.js +0 -12
  151. package/dist/lib-cjs/parse-table/parse-table-json.js.map +0 -1
  152. package/dist/lib-cjs/parse-table/parse-table.js +0 -345
  153. package/dist/lib-cjs/parse-table/parse-table.js.map +0 -1
  154. package/dist/lib-cjs/parse-table/slr/index.js +0 -13
  155. package/dist/lib-cjs/parse-table/slr/index.js.map +0 -1
  156. package/dist/lib-cjs/parse-table/slr/parse-action.js +0 -8
  157. package/dist/lib-cjs/parse-table/slr/parse-action.js.map +0 -1
  158. package/dist/lib-cjs/parse-table/slr/slr-table.js +0 -18
  159. package/dist/lib-cjs/parse-table/slr/slr-table.js.map +0 -1
  160. package/dist/lib-cjs/parse-table/table/index.js +0 -21
  161. package/dist/lib-cjs/parse-table/table/index.js.map +0 -1
  162. package/dist/lib-cjs/parse-table/table/lr-parse-table.js +0 -192
  163. package/dist/lib-cjs/parse-table/table/lr-parse-table.js.map +0 -1
  164. package/dist/lib-cjs/parse-table/table/parse-action.js +0 -54
  165. package/dist/lib-cjs/parse-table/table/parse-action.js.map +0 -1
  166. package/dist/lib-cjs/parse-table/table/table-builder-base.js +0 -153
  167. package/dist/lib-cjs/parse-table/table/table-builder-base.js.map +0 -1
  168. package/dist/lib-cjs/parse-table/token-inventory.js +0 -18
  169. package/dist/lib-cjs/parse-table/token-inventory.js.map +0 -1
  170. package/dist/lib-cjs/parser-lr.js +0 -143
  171. package/dist/lib-cjs/parser-lr.js.map +0 -1
  172. package/dist/lib-cjs/shift-reduce/index.js +0 -11
  173. package/dist/lib-cjs/shift-reduce/index.js.map +0 -1
  174. package/dist/lib-cjs/shift-reduce/shift-reduce-engine.js +0 -224
  175. package/dist/lib-cjs/shift-reduce/shift-reduce-engine.js.map +0 -1
  176. package/dist/lib-cjs/transform/binding-map.js +0 -82
  177. package/dist/lib-cjs/transform/binding-map.js.map +0 -1
  178. package/dist/lib-cjs/transform/cst-transformer.js +0 -480
  179. package/dist/lib-cjs/transform/cst-transformer.js.map +0 -1
  180. package/dist/lib-cjs/transform/grammar-fixture.js +0 -109
  181. package/dist/lib-cjs/transform/grammar-fixture.js.map +0 -1
  182. package/dist/lib-cjs/transform/index.js +0 -12
  183. package/dist/lib-cjs/transform/index.js.map +0 -1
  184. package/docs/parser-lr-enhancement-proposals.md +0 -337
  185. package/grammars/fixtures/table-only-import/table-only-smoke.cjs +0 -38
@@ -1,286 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Lr0ItemSetBuilder = exports.Lr0ItemSetCollection = void 0;
4
- exports.lr0ItemKey = lr0ItemKey;
5
- exports.lr0ItemsEqual = lr0ItemsEqual;
6
- exports.sortLr0Items = sortLr0Items;
7
- exports.symbolsAfterDot = symbolsAfterDot;
8
- exports.lr0Closure = lr0Closure;
9
- exports.lr0Goto = lr0Goto;
10
- exports.buildLr0ItemSets = buildLr0ItemSets;
11
- exports.formatLr0ItemSet = formatLr0ItemSet;
12
- const bnf_symbol_js_1 = require("../bnf/bnf-symbol.js");
13
- /**
14
- * Returns a stable string key for an LR(0) item.
15
- *
16
- * @param grammar - Grammar containing the referenced production.
17
- * @param item - LR(0) item to encode.
18
- * @returns A human-readable dotted production string for diagnostics.
19
- */
20
- function lr0ItemKey(grammar, item) {
21
- const production = grammar.production(item.productionId);
22
- if (production === null) {
23
- return `${String(item.productionId)}@${String(item.dot)}`;
24
- }
25
- const rhs = production.rhs.map((symbol) => (0, bnf_symbol_js_1.bnfSymbolKey)(symbol));
26
- const before = rhs.slice(0, item.dot).join(' ');
27
- const after = rhs.slice(item.dot).join(' ');
28
- if (before.length === 0) {
29
- return `${production.name} → · ${after}`.trimEnd();
30
- }
31
- if (after.length === 0) {
32
- return `${production.name} → ${before} ·`;
33
- }
34
- return `${production.name} → ${before} · ${after}`;
35
- }
36
- /**
37
- * Returns whether two LR(0) items are identical.
38
- *
39
- * @param left - First item.
40
- * @param right - Second item.
41
- */
42
- function lr0ItemsEqual(left, right) {
43
- return left.productionId === right.productionId && left.dot === right.dot;
44
- }
45
- /**
46
- * Sorts LR(0) items for canonical set comparison.
47
- *
48
- * @param items - Items to sort.
49
- */
50
- function sortLr0Items(items) {
51
- return [...items].sort((left, right) => {
52
- if (left.productionId !== right.productionId) {
53
- return left.productionId - right.productionId;
54
- }
55
- return left.dot - right.dot;
56
- });
57
- }
58
- /**
59
- * Returns encoded symbol keys that appear immediately after the dot in an item set.
60
- *
61
- * @param grammar - BNF grammar containing referenced productions.
62
- * @param items - Closed item set.
63
- * @returns Sorted terminal and non-terminal keys eligible for GOTO from this state.
64
- */
65
- function symbolsAfterDot(grammar, items) {
66
- const keys = new Set();
67
- for (const item of items) {
68
- const production = grammar.production(item.productionId);
69
- if (production === null) {
70
- continue;
71
- }
72
- const nextSymbol = production.rhs[item.dot];
73
- if (nextSymbol === undefined) {
74
- continue;
75
- }
76
- keys.add((0, bnf_symbol_js_1.bnfParserSymbolKey)(nextSymbol));
77
- }
78
- return [...keys].sort();
79
- }
80
- /**
81
- * Computes the LR(0) closure of an item set.
82
- *
83
- * @param grammar - Plain or augmented BNF grammar.
84
- * @param items - Seed items.
85
- * @returns The seed items plus all items implied by dotted non-terminal prefixes.
86
- */
87
- function lr0Closure(grammar, items) {
88
- const result = sortLr0Items(items);
89
- const itemKeys = new Set(result.map((item) => Lr0ItemSetBuilder.itemIdentity(item)));
90
- const pendingIndices = result.map((_, index) => index);
91
- // Expand closure from each newly discovered item only.
92
- while (pendingIndices.length > 0) {
93
- const item = result[pendingIndices.pop()];
94
- const production = grammar.production(item.productionId);
95
- if (production === null) {
96
- continue;
97
- }
98
- const nextSymbol = production.rhs[item.dot];
99
- if (nextSymbol === undefined || nextSymbol.kind !== 'nonTerminal') {
100
- continue;
101
- }
102
- for (const candidate of grammar.productionsFor(nextSymbol.name)) {
103
- const closureItem = {
104
- productionId: candidate.id,
105
- dot: 0,
106
- };
107
- const identity = Lr0ItemSetBuilder.itemIdentity(closureItem);
108
- if (!itemKeys.has(identity)) {
109
- itemKeys.add(identity);
110
- pendingIndices.push(result.length);
111
- result.push(closureItem);
112
- }
113
- }
114
- }
115
- return sortLr0Items(result);
116
- }
117
- /**
118
- * Computes the LR(0) GOTO set for symbol `symbolKey`.
119
- *
120
- * @param grammar - Plain or augmented BNF grammar.
121
- * @param items - Closed item set.
122
- * @param symbolKey - Encoded terminal or non-terminal symbol.
123
- * @returns The closed item set reached after advancing the dot past `symbolKey`.
124
- */
125
- function lr0Goto(grammar, items, symbolKey) {
126
- const moved = [];
127
- // Advance the dot on every item expecting `symbolKey`.
128
- for (const item of items) {
129
- const production = grammar.production(item.productionId);
130
- if (production === null) {
131
- continue;
132
- }
133
- const nextSymbol = production.rhs[item.dot];
134
- if (nextSymbol === undefined || (0, bnf_symbol_js_1.bnfParserSymbolKey)(nextSymbol) !== symbolKey) {
135
- continue;
136
- }
137
- moved.push({
138
- productionId: item.productionId,
139
- dot: item.dot + 1,
140
- });
141
- }
142
- if (moved.length === 0) {
143
- return [];
144
- }
145
- return lr0Closure(grammar, moved);
146
- }
147
- /**
148
- * Canonical collection of LR(0) item sets for a BNF grammar.
149
- */
150
- class Lr0ItemSetCollection {
151
- grammar;
152
- itemSets;
153
- indexByIdentity;
154
- /**
155
- * Creates a collection from an ordered list of closed item sets.
156
- *
157
- * @param grammar - Grammar the item sets were built from.
158
- * @param itemSets - Closed LR(0) item sets in discovery order.
159
- * @param indexByIdentity - Optional precomputed identity-to-state map.
160
- */
161
- constructor(
162
- /** Grammar analyzed when the item sets were constructed. */
163
- grammar,
164
- /** Closed LR(0) item sets indexed by parser state number. */
165
- itemSets, indexByIdentity) {
166
- this.grammar = grammar;
167
- this.itemSets = itemSets;
168
- if (indexByIdentity !== undefined) {
169
- this.indexByIdentity = indexByIdentity;
170
- return;
171
- }
172
- const builtIndex = new Map();
173
- for (let index = 0; index < itemSets.length; index += 1) {
174
- builtIndex.set(Lr0ItemSetBuilder.setIdentity(itemSets[index] ?? [], true), index);
175
- }
176
- this.indexByIdentity = builtIndex;
177
- }
178
- /**
179
- * Returns the index of an item set matching `items`, or null when absent.
180
- *
181
- * @param items - Closed item set to locate.
182
- */
183
- indexOf(items) {
184
- const target = Lr0ItemSetBuilder.setIdentity(items, true);
185
- return this.indexByIdentity.get(target) ?? null;
186
- }
187
- }
188
- exports.Lr0ItemSetCollection = Lr0ItemSetCollection;
189
- /**
190
- * Builds LR(0) item sets for a BNF grammar.
191
- */
192
- class Lr0ItemSetBuilder {
193
- /**
194
- * Builds the canonical LR(0) collection for a grammar.
195
- *
196
- * @param grammar - Augmented or plain BNF grammar.
197
- * @returns The canonical LR(0) item set collection for the grammar.
198
- */
199
- static build(grammar) {
200
- const startProductions = grammar.productionsFor(grammar.startSymbol);
201
- if (startProductions.length === 0) {
202
- return new Lr0ItemSetCollection(grammar, []);
203
- }
204
- // Seed state 0 from the start production at dot zero.
205
- const initial = lr0Closure(grammar, [{
206
- productionId: startProductions[0].id,
207
- dot: 0,
208
- }]);
209
- const itemSets = [[...initial]];
210
- const indexByIdentity = new Map([
211
- [Lr0ItemSetBuilder.setIdentity(initial, true), 0],
212
- ]);
213
- const pendingStates = [0];
214
- // Discover new states from each state exactly once.
215
- while (pendingStates.length > 0) {
216
- const stateIndex = pendingStates.pop();
217
- const itemSet = itemSets[stateIndex] ?? [];
218
- for (const symbolKey of symbolsAfterDot(grammar, itemSet)) {
219
- const gotoSet = lr0Goto(grammar, itemSet, symbolKey);
220
- if (gotoSet.length === 0) {
221
- continue;
222
- }
223
- const gotoKey = Lr0ItemSetBuilder.setIdentity(gotoSet, true);
224
- if (!indexByIdentity.has(gotoKey)) {
225
- const nextIndex = itemSets.length;
226
- indexByIdentity.set(gotoKey, nextIndex);
227
- itemSets.push([...gotoSet]);
228
- pendingStates.push(nextIndex);
229
- }
230
- }
231
- }
232
- return new Lr0ItemSetCollection(grammar, itemSets, indexByIdentity);
233
- }
234
- /**
235
- * Returns every terminal and non-terminal key that can appear in GOTO.
236
- *
237
- * @param grammar - BNF grammar to inspect.
238
- */
239
- static grammarSymbolKeys(grammar) {
240
- const keys = new Set(grammar.terminalKeys());
241
- for (const name of grammar.nonTerminalNames()) {
242
- keys.add(name);
243
- }
244
- return [...keys].sort();
245
- }
246
- /**
247
- * Returns a stable identity string for one LR(0) item.
248
- *
249
- * @param item - Item to encode.
250
- */
251
- static itemIdentity(item) {
252
- return `${String(item.productionId)}:${String(item.dot)}`;
253
- }
254
- /**
255
- * Returns a stable identity string for an item set.
256
- *
257
- * @param items - Closed item set.
258
- * @param alreadySorted - When true, skips re-sorting because items are canonical.
259
- */
260
- static setIdentity(items, alreadySorted = false) {
261
- const sorted = alreadySorted ? items : sortLr0Items(items);
262
- return sorted
263
- .map((item) => Lr0ItemSetBuilder.itemIdentity(item))
264
- .join('|');
265
- }
266
- }
267
- exports.Lr0ItemSetBuilder = Lr0ItemSetBuilder;
268
- /**
269
- * Builds the canonical LR(0) item set collection for a grammar.
270
- *
271
- * @param grammar - Augmented or plain BNF grammar.
272
- * @returns The canonical LR(0) item set collection for the grammar.
273
- */
274
- function buildLr0ItemSets(grammar) {
275
- return Lr0ItemSetBuilder.build(grammar);
276
- }
277
- /**
278
- * Returns readable item set labels for tests and diagnostics.
279
- *
280
- * @param grammar - Grammar containing referenced productions.
281
- * @param items - Closed item set.
282
- */
283
- function formatLr0ItemSet(grammar, items) {
284
- return sortLr0Items(items).map((item) => lr0ItemKey(grammar, item));
285
- }
286
- //# sourceMappingURL=lr0-item-set.js.map
@@ -1 +0,0 @@
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,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.sortLr1Items = exports.mergeLalrItemSets = exports.Lr1ItemSetCollection = exports.Lr1ItemSetBuilder = exports.lr1SetIdentity = exports.lr1ItemIdentity = exports.lr1Goto = exports.lr1CoreSetIdentity = exports.lr1CoreKey = exports.lr1Closure = exports.firstAfterSymbols = exports.buildLr1ItemSets = exports.buildLalrGotoTargets = void 0;
4
- var lr1_item_set_js_1 = require("./lr1-item-set.js");
5
- Object.defineProperty(exports, "buildLalrGotoTargets", { enumerable: true, get: function () { return lr1_item_set_js_1.buildLalrGotoTargets; } });
6
- Object.defineProperty(exports, "buildLr1ItemSets", { enumerable: true, get: function () { return lr1_item_set_js_1.buildLr1ItemSets; } });
7
- Object.defineProperty(exports, "firstAfterSymbols", { enumerable: true, get: function () { return lr1_item_set_js_1.firstAfterSymbols; } });
8
- Object.defineProperty(exports, "lr1Closure", { enumerable: true, get: function () { return lr1_item_set_js_1.lr1Closure; } });
9
- Object.defineProperty(exports, "lr1CoreKey", { enumerable: true, get: function () { return lr1_item_set_js_1.lr1CoreKey; } });
10
- Object.defineProperty(exports, "lr1CoreSetIdentity", { enumerable: true, get: function () { return lr1_item_set_js_1.lr1CoreSetIdentity; } });
11
- Object.defineProperty(exports, "lr1Goto", { enumerable: true, get: function () { return lr1_item_set_js_1.lr1Goto; } });
12
- Object.defineProperty(exports, "lr1ItemIdentity", { enumerable: true, get: function () { return lr1_item_set_js_1.lr1ItemIdentity; } });
13
- Object.defineProperty(exports, "lr1SetIdentity", { enumerable: true, get: function () { return lr1_item_set_js_1.lr1SetIdentity; } });
14
- Object.defineProperty(exports, "Lr1ItemSetBuilder", { enumerable: true, get: function () { return lr1_item_set_js_1.Lr1ItemSetBuilder; } });
15
- Object.defineProperty(exports, "Lr1ItemSetCollection", { enumerable: true, get: function () { return lr1_item_set_js_1.Lr1ItemSetCollection; } });
16
- Object.defineProperty(exports, "mergeLalrItemSets", { enumerable: true, get: function () { return lr1_item_set_js_1.mergeLalrItemSets; } });
17
- Object.defineProperty(exports, "sortLr1Items", { enumerable: true, get: function () { return lr1_item_set_js_1.sortLr1Items; } });
18
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/lr1/index.ts"],"names":[],"mappings":";;;AAAA,qDAc2B;AAbvB,uHAAA,oBAAoB,OAAA;AACpB,mHAAA,gBAAgB,OAAA;AAChB,oHAAA,iBAAiB,OAAA;AACjB,6GAAA,UAAU,OAAA;AACV,6GAAA,UAAU,OAAA;AACV,qHAAA,kBAAkB,OAAA;AAClB,0GAAA,OAAO,OAAA;AACP,kHAAA,eAAe,OAAA;AACf,iHAAA,cAAc,OAAA;AACd,oHAAA,iBAAiB,OAAA;AACjB,uHAAA,oBAAoB,OAAA;AACpB,oHAAA,iBAAiB,OAAA;AACjB,+GAAA,YAAY,OAAA"}