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.
- package/README.md +85 -3
- package/bin/parser-lr.js +336 -171
- package/bin/parser-lr.js.map +1 -1
- package/dist/lib/parse-table/analysis/first-follow.d.ts +6 -0
- package/dist/lib/parse-table/analysis/first-follow.d.ts.map +1 -1
- package/dist/lib/parse-table/analysis/first-follow.js +13 -0
- package/dist/lib/parse-table/analysis/first-follow.js.map +1 -1
- package/dist/lib/parse-table/bnf/desugar-ebnf.d.ts.map +1 -1
- package/dist/lib/parse-table/bnf/desugar-ebnf.js +2 -0
- package/dist/lib/parse-table/bnf/desugar-ebnf.js.map +1 -1
- package/dist/lib/parse-table/build-lr-table.d.ts +1 -0
- package/dist/lib/parse-table/build-lr-table.d.ts.map +1 -1
- package/dist/lib/parse-table/build-lr-table.js +11 -1
- package/dist/lib/parse-table/build-lr-table.js.map +1 -1
- package/dist/lib/parse-table/index.d.ts +1 -1
- package/dist/lib/parse-table/index.d.ts.map +1 -1
- package/dist/lib/parse-table/index.js +1 -1
- package/dist/lib/parse-table/index.js.map +1 -1
- package/dist/lib/parse-table/lr0/lr0-item-set.d.ts +26 -2
- package/dist/lib/parse-table/lr0/lr0-item-set.d.ts.map +1 -1
- package/dist/lib/parse-table/lr0/lr0-item-set.js +92 -54
- package/dist/lib/parse-table/lr0/lr0-item-set.js.map +1 -1
- package/dist/lib/parse-table/lr1/lr1-item-set.d.ts +31 -2
- package/dist/lib/parse-table/lr1/lr1-item-set.d.ts.map +1 -1
- package/dist/lib/parse-table/lr1/lr1-item-set.js +95 -60
- package/dist/lib/parse-table/lr1/lr1-item-set.js.map +1 -1
- package/dist/lib/parse-table/parse-table.d.ts +13 -3
- package/dist/lib/parse-table/parse-table.d.ts.map +1 -1
- package/dist/lib/parse-table/parse-table.js +19 -8
- package/dist/lib/parse-table/parse-table.js.map +1 -1
- package/dist/lib/parse-table/table/index.d.ts +1 -1
- package/dist/lib/parse-table/table/index.d.ts.map +1 -1
- package/dist/lib/parse-table/table/index.js +1 -1
- package/dist/lib/parse-table/table/index.js.map +1 -1
- package/dist/lib/parse-table/table/lr-parse-table.d.ts +14 -2
- package/dist/lib/parse-table/table/lr-parse-table.d.ts.map +1 -1
- package/dist/lib/parse-table/table/lr-parse-table.js +38 -3
- package/dist/lib/parse-table/table/lr-parse-table.js.map +1 -1
- package/dist/lib/parse-table/table/parse-action.d.ts +3 -1
- package/dist/lib/parse-table/table/parse-action.d.ts.map +1 -1
- package/dist/lib/parse-table/table/parse-action.js.map +1 -1
- package/dist/lib/parse-table/table/table-builder-base.d.ts +5 -4
- package/dist/lib/parse-table/table/table-builder-base.d.ts.map +1 -1
- package/dist/lib/parse-table/table/table-builder-base.js +28 -8
- package/dist/lib/parse-table/table/table-builder-base.js.map +1 -1
- package/dist/lib/shift-reduce/shift-reduce-engine.d.ts +10 -0
- package/dist/lib/shift-reduce/shift-reduce-engine.d.ts.map +1 -1
- package/dist/lib/shift-reduce/shift-reduce-engine.js +11 -0
- package/dist/lib/shift-reduce/shift-reduce-engine.js.map +1 -1
- package/dist/lib/transform/binding-map.d.ts +6 -0
- package/dist/lib/transform/binding-map.d.ts.map +1 -1
- package/dist/lib/transform/binding-map.js +17 -0
- package/dist/lib/transform/binding-map.js.map +1 -1
- package/dist/lib/transform/cst-transformer.d.ts +6 -0
- package/dist/lib/transform/cst-transformer.d.ts.map +1 -1
- package/dist/lib/transform/cst-transformer.js +24 -2
- package/dist/lib/transform/cst-transformer.js.map +1 -1
- package/package.json +12 -3
|
@@ -18,6 +18,7 @@ export declare class GrammarAnalysis {
|
|
|
18
18
|
* Returns whether a non-terminal can derive the empty string.
|
|
19
19
|
*
|
|
20
20
|
* @param name - Non-terminal name to test.
|
|
21
|
+
* @returns True when the non-terminal can derive ε.
|
|
21
22
|
*/
|
|
22
23
|
isNullable(name: string): boolean;
|
|
23
24
|
/**
|
|
@@ -36,6 +37,7 @@ export declare class GrammarAnalysis {
|
|
|
36
37
|
* Returns FIRST symbols for a symbol sequence.
|
|
37
38
|
*
|
|
38
39
|
* @param symbols - Right-hand side prefix or full sequence.
|
|
40
|
+
* @returns Encoded terminal keys in FIRST of the sequence.
|
|
39
41
|
*/
|
|
40
42
|
firstOfSequence(symbols: readonly BnfSymbol[]): ReadonlySet<string>;
|
|
41
43
|
/**
|
|
@@ -54,6 +56,7 @@ export declare class GrammarAnalysis {
|
|
|
54
56
|
* Computes nullable non-terminals by fixed-point iteration.
|
|
55
57
|
*
|
|
56
58
|
* @param grammar - Plain BNF grammar to analyze.
|
|
59
|
+
* @returns The set of non-terminal names that derive ε.
|
|
57
60
|
*/
|
|
58
61
|
private static computeNullable;
|
|
59
62
|
/**
|
|
@@ -61,6 +64,7 @@ export declare class GrammarAnalysis {
|
|
|
61
64
|
*
|
|
62
65
|
* @param grammar - Plain BNF grammar to analyze.
|
|
63
66
|
* @param nullable - Nullable non-terminal names.
|
|
67
|
+
* @returns FIRST set for every non-terminal name.
|
|
64
68
|
*/
|
|
65
69
|
private static computeFirst;
|
|
66
70
|
/**
|
|
@@ -69,6 +73,7 @@ export declare class GrammarAnalysis {
|
|
|
69
73
|
* @param grammar - Plain BNF grammar to analyze.
|
|
70
74
|
* @param firstByNonTerminal - Precomputed FIRST sets.
|
|
71
75
|
* @param nullable - Nullable non-terminal names.
|
|
76
|
+
* @returns FOLLOW set for every non-terminal name.
|
|
72
77
|
*/
|
|
73
78
|
private static computeFollow;
|
|
74
79
|
/**
|
|
@@ -107,6 +112,7 @@ export declare class GrammarAnalysis {
|
|
|
107
112
|
* Computes nullable, FIRST, and FOLLOW sets for a BNF grammar.
|
|
108
113
|
*
|
|
109
114
|
* @param grammar - Plain BNF grammar to analyze.
|
|
115
|
+
* @returns Nullable, FIRST, and FOLLOW analysis for the grammar.
|
|
110
116
|
*/
|
|
111
117
|
export declare function analyzeGrammar(grammar: BnfGrammar): GrammarAnalysis;
|
|
112
118
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"first-follow.d.ts","sourceRoot":"","sources":["../../../../src/lib/parse-table/analysis/first-follow.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAExF;;GAEG;AACH,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAC/C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA2C;IAC9E,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA2C;IAE/E;;;;OAIG;gBACgB,OAAO,EAAE,UAAU;IAWtC
|
|
1
|
+
{"version":3,"file":"first-follow.d.ts","sourceRoot":"","sources":["../../../../src/lib/parse-table/analysis/first-follow.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAExF;;GAEG;AACH,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAC/C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA2C;IAC9E,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA2C;IAE/E;;;;OAIG;gBACgB,OAAO,EAAE,UAAU;IAWtC;;;;;OAKG;IACI,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAKxC;;;;OAIG;IACI,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IAK5D;;;;OAIG;IACI,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IAK7D;;;;;OAKG;IACI,eAAe,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC;IA2B1E;;;;OAIG;IACI,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC;IAU5D;;;;OAIG;IACI,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO;IAUnD;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAkC9B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAqC3B;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAmE5B;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAajC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAqCpC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAcvC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,MAAM;CAOxB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,eAAe,CAGnE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,aAAa,GAAG,MAAM,CAUrE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAG/D"}
|
|
@@ -22,6 +22,7 @@ export class GrammarAnalysis {
|
|
|
22
22
|
* Returns whether a non-terminal can derive the empty string.
|
|
23
23
|
*
|
|
24
24
|
* @param name - Non-terminal name to test.
|
|
25
|
+
* @returns True when the non-terminal can derive ε.
|
|
25
26
|
*/
|
|
26
27
|
isNullable(name) {
|
|
27
28
|
return this.nullable.has(name);
|
|
@@ -46,10 +47,12 @@ export class GrammarAnalysis {
|
|
|
46
47
|
* Returns FIRST symbols for a symbol sequence.
|
|
47
48
|
*
|
|
48
49
|
* @param symbols - Right-hand side prefix or full sequence.
|
|
50
|
+
* @returns Encoded terminal keys in FIRST of the sequence.
|
|
49
51
|
*/
|
|
50
52
|
firstOfSequence(symbols) {
|
|
51
53
|
const result = new Set();
|
|
52
54
|
let allNullable = true;
|
|
55
|
+
// Accumulate FIRST of each prefix symbol until a non-nullable symbol stops propagation.
|
|
53
56
|
for (const symbol of symbols) {
|
|
54
57
|
const symbolFirst = this.firstOfSymbol(symbol);
|
|
55
58
|
GrammarAnalysis.addAll(result, symbolFirst);
|
|
@@ -58,6 +61,7 @@ export class GrammarAnalysis {
|
|
|
58
61
|
break;
|
|
59
62
|
}
|
|
60
63
|
}
|
|
64
|
+
// Every symbol is nullable, so end-of-input is in FIRST.
|
|
61
65
|
if (allNullable) {
|
|
62
66
|
result.add(EOF_TOKEN_NAME);
|
|
63
67
|
}
|
|
@@ -89,10 +93,12 @@ export class GrammarAnalysis {
|
|
|
89
93
|
* Computes nullable non-terminals by fixed-point iteration.
|
|
90
94
|
*
|
|
91
95
|
* @param grammar - Plain BNF grammar to analyze.
|
|
96
|
+
* @returns The set of non-terminal names that derive ε.
|
|
92
97
|
*/
|
|
93
98
|
static computeNullable(grammar) {
|
|
94
99
|
const nullable = new Set();
|
|
95
100
|
let changed = true;
|
|
101
|
+
// Fixed-point: mark A nullable when every production A → α has nullable α.
|
|
96
102
|
while (changed) {
|
|
97
103
|
changed = false;
|
|
98
104
|
for (const production of grammar.productions) {
|
|
@@ -116,6 +122,7 @@ export class GrammarAnalysis {
|
|
|
116
122
|
*
|
|
117
123
|
* @param grammar - Plain BNF grammar to analyze.
|
|
118
124
|
* @param nullable - Nullable non-terminal names.
|
|
125
|
+
* @returns FIRST set for every non-terminal name.
|
|
119
126
|
*/
|
|
120
127
|
static computeFirst(grammar, nullable) {
|
|
121
128
|
const firstByNonTerminal = new Map();
|
|
@@ -123,6 +130,7 @@ export class GrammarAnalysis {
|
|
|
123
130
|
firstByNonTerminal.set(name, new Set());
|
|
124
131
|
}
|
|
125
132
|
let changed = true;
|
|
133
|
+
// Fixed-point: add FIRST(α) into FIRST(A) for each production A → α.
|
|
126
134
|
while (changed) {
|
|
127
135
|
changed = false;
|
|
128
136
|
for (const production of grammar.productions) {
|
|
@@ -143,16 +151,19 @@ export class GrammarAnalysis {
|
|
|
143
151
|
* @param grammar - Plain BNF grammar to analyze.
|
|
144
152
|
* @param firstByNonTerminal - Precomputed FIRST sets.
|
|
145
153
|
* @param nullable - Nullable non-terminal names.
|
|
154
|
+
* @returns FOLLOW set for every non-terminal name.
|
|
146
155
|
*/
|
|
147
156
|
static computeFollow(grammar, firstByNonTerminal, nullable) {
|
|
148
157
|
const followByNonTerminal = new Map();
|
|
149
158
|
for (const name of grammar.nonTerminalNames()) {
|
|
150
159
|
followByNonTerminal.set(name, new Set());
|
|
151
160
|
}
|
|
161
|
+
// Seed FOLLOW of the start symbol with end-of-input.
|
|
152
162
|
const startFollow = followByNonTerminal.get(grammar.startSymbol) ?? new Set();
|
|
153
163
|
startFollow.add(EOF_TOKEN_NAME);
|
|
154
164
|
followByNonTerminal.set(grammar.startSymbol, startFollow);
|
|
155
165
|
let changed = true;
|
|
166
|
+
// Fixed-point: propagate FOLLOW through every production A → α B β.
|
|
156
167
|
while (changed) {
|
|
157
168
|
changed = false;
|
|
158
169
|
for (const production of grammar.productions) {
|
|
@@ -166,6 +177,7 @@ export class GrammarAnalysis {
|
|
|
166
177
|
const beta = production.rhs.slice(index + 1);
|
|
167
178
|
const betaFirst = GrammarAnalysis.firstOfSequenceStatic(beta, firstByNonTerminal, nullable);
|
|
168
179
|
GrammarAnalysis.addAll(follow, betaFirst);
|
|
180
|
+
// When β is empty or nullable, inherit FOLLOW of the production lhs.
|
|
169
181
|
if (beta.length === 0 || GrammarAnalysis.isSequenceNullableStatic(beta, nullable)) {
|
|
170
182
|
const lhsFollow = followByNonTerminal.get(production.name) ?? new Set();
|
|
171
183
|
GrammarAnalysis.addAll(follow, lhsFollow);
|
|
@@ -247,6 +259,7 @@ export class GrammarAnalysis {
|
|
|
247
259
|
* Computes nullable, FIRST, and FOLLOW sets for a BNF grammar.
|
|
248
260
|
*
|
|
249
261
|
* @param grammar - Plain BNF grammar to analyze.
|
|
262
|
+
* @returns Nullable, FIRST, and FOLLOW analysis for the grammar.
|
|
250
263
|
*/
|
|
251
264
|
export function analyzeGrammar(grammar) {
|
|
252
265
|
return new GrammarAnalysis(grammar);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"first-follow.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/analysis/first-follow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAmB,MAAM,uBAAuB,CAAC;AAEhF,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAkB,MAAM,sBAAsB,CAAC;AAExF;;GAEG;AACH,MAAM,OAAO,eAAe;IAEP,QAAQ,CAAsB;IAC9B,kBAAkB,CAA2C;IAC7D,mBAAmB,CAA2C;IAE/E;;;;OAIG;IACH,YAAmB,OAAmB;QAElC,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACzD,IAAI,CAAC,kBAAkB,GAAG,eAAe,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/E,IAAI,CAAC,mBAAmB,GAAG,eAAe,CAAC,aAAa,CACpD,OAAO,EACP,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,QAAQ,CAChB,CAAC;IACN,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"first-follow.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/analysis/first-follow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"desugar-ebnf.d.ts","sourceRoot":"","sources":["../../../../src/lib/parse-table/bnf/desugar-ebnf.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAGnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"desugar-ebnf.d.ts","sourceRoot":"","sources":["../../../../src/lib/parse-table/bnf/desugar-ebnf.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAGnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAiB9C;;GAEG;AACH,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuB;IACnD,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,eAAe,CAAK;IAE5B;;;;OAIG;gBACgB,OAAO,EAAE,OAAO;IAMnC;;;;OAIG;IACI,OAAO,IAAI,UAAU;IAe5B;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa;IAiBrB;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAQjB;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAgDxB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IA+BtB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IActB;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IA8BpB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IASzB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IASnB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;CAc3B;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAGxD"}
|
|
@@ -37,6 +37,7 @@ export class EbnfDesugarer {
|
|
|
37
37
|
*/
|
|
38
38
|
desugarProduction(production) {
|
|
39
39
|
const alternatives = this.expandExpression(production.name, production.expression, null);
|
|
40
|
+
// Record one BNF production per desugared alternative.
|
|
40
41
|
for (const alternative of alternatives) {
|
|
41
42
|
this.addProduction(production.name, alternative.symbols, alternative.variant, production.name);
|
|
42
43
|
}
|
|
@@ -114,6 +115,7 @@ export class EbnfDesugarer {
|
|
|
114
115
|
*/
|
|
115
116
|
expandSequence(ownerName, elements, variant) {
|
|
116
117
|
let results = [{ symbols: [], variant }];
|
|
118
|
+
// Cartesian product: combine each prefix alternative with each next-element alternative.
|
|
117
119
|
for (const element of elements) {
|
|
118
120
|
const elementAlternatives = this.expandExpression(ownerName, element, variant);
|
|
119
121
|
const combined = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"desugar-ebnf.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/bnf/desugar-ebnf.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"desugar-ebnf.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/bnf/desugar-ebnf.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ import { LrParseTable } from './table/lr-parse-table.js';
|
|
|
6
6
|
*
|
|
7
7
|
* @param grammar - Plain BNF grammar to analyze.
|
|
8
8
|
* @param algorithm - LR table construction algorithm.
|
|
9
|
+
* @returns A populated LR parse table, possibly recording conflicts.
|
|
9
10
|
*/
|
|
10
11
|
export declare function buildLrTable(grammar: BnfGrammar, algorithm: LrAlgorithm): LrParseTable;
|
|
11
12
|
//# sourceMappingURL=build-lr-table.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-lr-table.d.ts","sourceRoot":"","sources":["../../../src/lib/parse-table/build-lr-table.ts"],"names":[],"mappings":"AAGA,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAgBrD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD
|
|
1
|
+
{"version":3,"file":"build-lr-table.d.ts","sourceRoot":"","sources":["../../../src/lib/parse-table/build-lr-table.ts"],"names":[],"mappings":"AAGA,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAgBrD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,GAAG,YAAY,CAmBtF"}
|
|
@@ -10,6 +10,7 @@ import { TableBuilderBase } from './table/table-builder-base.js';
|
|
|
10
10
|
*
|
|
11
11
|
* @param grammar - Plain BNF grammar to analyze.
|
|
12
12
|
* @param algorithm - LR table construction algorithm.
|
|
13
|
+
* @returns A populated LR parse table, possibly recording conflicts.
|
|
13
14
|
*/
|
|
14
15
|
export function buildLrTable(grammar, algorithm) {
|
|
15
16
|
const augmented = grammar.augment();
|
|
@@ -33,7 +34,7 @@ class LrTableBuilder {
|
|
|
33
34
|
* Builds an LR(0) parse table.
|
|
34
35
|
*
|
|
35
36
|
* @param grammar - Augmented BNF grammar.
|
|
36
|
-
* @
|
|
37
|
+
* @returns An LR(0) parse table using all terminals as reduce lookaheads.
|
|
37
38
|
*/
|
|
38
39
|
static buildLr0(grammar) {
|
|
39
40
|
const itemSets = buildLr0ItemSets(grammar);
|
|
@@ -50,6 +51,7 @@ class LrTableBuilder {
|
|
|
50
51
|
*
|
|
51
52
|
* @param grammar - Augmented BNF grammar.
|
|
52
53
|
* @param analysis - Nullable, FIRST, and FOLLOW analysis for the grammar.
|
|
54
|
+
* @returns An SLR parse table using FOLLOW sets as reduce lookaheads.
|
|
53
55
|
*/
|
|
54
56
|
static buildSlr(grammar, analysis) {
|
|
55
57
|
const itemSets = buildLr0ItemSets(grammar);
|
|
@@ -65,6 +67,7 @@ class LrTableBuilder {
|
|
|
65
67
|
*
|
|
66
68
|
* @param grammar - Augmented BNF grammar.
|
|
67
69
|
* @param analysis - Nullable, FIRST, and FOLLOW analysis for the grammar.
|
|
70
|
+
* @returns An LR(1) parse table with per-item lookaheads.
|
|
68
71
|
*/
|
|
69
72
|
static buildLr1(grammar, analysis) {
|
|
70
73
|
const itemSets = buildLr1ItemSets(grammar, analysis, EOF_TOKEN_NAME);
|
|
@@ -75,6 +78,7 @@ class LrTableBuilder {
|
|
|
75
78
|
*
|
|
76
79
|
* @param grammar - Augmented BNF grammar.
|
|
77
80
|
* @param analysis - Nullable, FIRST, and FOLLOW analysis for the grammar.
|
|
81
|
+
* @returns An LALR parse table merged from the canonical LR(1) collection.
|
|
78
82
|
*/
|
|
79
83
|
static buildLalr(grammar, analysis) {
|
|
80
84
|
const lr1ItemSets = buildLr1ItemSets(grammar, analysis, EOF_TOKEN_NAME);
|
|
@@ -90,12 +94,14 @@ class LrTableBuilder {
|
|
|
90
94
|
* @param grammar - Augmented BNF grammar.
|
|
91
95
|
* @param itemSets - Canonical LR(0) item set collection.
|
|
92
96
|
* @param reduceLookaheads - Returns terminal keys for one completed production.
|
|
97
|
+
* @returns A parse table with ACTION, GOTO, and any recorded conflicts.
|
|
93
98
|
*/
|
|
94
99
|
static buildFromLr0ItemSets(algorithm, grammar, itemSets, reduceLookaheads) {
|
|
95
100
|
const gotoTargets = TableBuilderBase.buildGotoTargets(grammar, itemSets.itemSets, (items) => itemSets.indexOf(items), TableBuilderBase.lr0GotoItems);
|
|
96
101
|
const actions = new Map();
|
|
97
102
|
const gotos = new Map();
|
|
98
103
|
const conflicts = [];
|
|
104
|
+
// Fill ACTION and GOTO rows for every LR(0) state.
|
|
99
105
|
for (let state = 0; state < itemSets.itemSets.length; state += 1) {
|
|
100
106
|
const itemSet = itemSets.itemSets[state] ?? [];
|
|
101
107
|
const stateActions = new Map();
|
|
@@ -103,6 +109,7 @@ class LrTableBuilder {
|
|
|
103
109
|
actions.set(state, stateActions);
|
|
104
110
|
gotos.set(state, stateGotos);
|
|
105
111
|
TableBuilderBase.fillShiftsAndGotos(grammar, state, itemSet, gotoTargets, stateActions, stateGotos, conflicts);
|
|
112
|
+
// Record reduce and accept actions for every completed item in the state.
|
|
106
113
|
for (const item of itemSet) {
|
|
107
114
|
const production = grammar.production(item.productionId);
|
|
108
115
|
if (production === null || item.dot !== production.rhs.length) {
|
|
@@ -127,12 +134,14 @@ class LrTableBuilder {
|
|
|
127
134
|
* @param itemSets - LR(1) or merged LALR item set collection used for ACTION/GOTO rows.
|
|
128
135
|
* @param lr1Collection - Canonical LR(1) collection used for LALR GOTO remapping.
|
|
129
136
|
* @param gotoTargetsOverride - Optional precomputed GOTO indices for LALR.
|
|
137
|
+
* @returns A parse table with ACTION, GOTO, and any recorded conflicts.
|
|
130
138
|
*/
|
|
131
139
|
static buildFromLr1ItemSets(algorithm, grammar, analysis, itemSets, gotoTargetsOverride) {
|
|
132
140
|
const gotoTargets = gotoTargetsOverride ?? TableBuilderBase.buildGotoTargets(grammar, itemSets.itemSets, (items) => itemSets.indexOf(items), (grammarArg, items, symbolKey) => lr1Goto(grammarArg, analysis, items, symbolKey));
|
|
133
141
|
const actions = new Map();
|
|
134
142
|
const gotos = new Map();
|
|
135
143
|
const conflicts = [];
|
|
144
|
+
// Fill ACTION and GOTO rows for every LR(1) or merged LALR state.
|
|
136
145
|
for (let state = 0; state < itemSets.itemSets.length; state += 1) {
|
|
137
146
|
const itemSet = itemSets.itemSets[state] ?? [];
|
|
138
147
|
const stateActions = new Map();
|
|
@@ -140,6 +149,7 @@ class LrTableBuilder {
|
|
|
140
149
|
actions.set(state, stateActions);
|
|
141
150
|
gotos.set(state, stateGotos);
|
|
142
151
|
TableBuilderBase.fillShiftsAndGotos(grammar, state, itemSet, gotoTargets, stateActions, stateGotos, conflicts);
|
|
152
|
+
// Record reduce or accept for each completed item using its lookahead.
|
|
143
153
|
for (const item of itemSet) {
|
|
144
154
|
const production = grammar.production(item.productionId);
|
|
145
155
|
if (production === null || item.dot !== production.rhs.length) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-lr-table.js","sourceRoot":"","sources":["../../../src/lib/parse-table/build-lr-table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAwB,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAmB,MAAM,sBAAsB,CAAC;AAE/E,OAAO,EACH,gBAAgB,GAGnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACH,oBAAoB,EACpB,gBAAgB,EAChB,OAAO,EAGP,iBAAiB,EACjB,iBAAiB,GACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE
|
|
1
|
+
{"version":3,"file":"build-lr-table.js","sourceRoot":"","sources":["../../../src/lib/parse-table/build-lr-table.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@ export { ParseTableError } from './parse-table-error.js';
|
|
|
14
14
|
export { isParseTableJsonV2 } from './parse-table-json.js';
|
|
15
15
|
export type { ParseTableActionJson, ParseTableGotoJson, ParseTableJsonV2, ParseTableProductionJson, } from './parse-table-json.js';
|
|
16
16
|
export { buildSlrTable, formatSlrActions, formatSlrConflicts, SlrTable } from './slr/index.js';
|
|
17
|
-
export { formatLrActions, formatLrConflicts, formatLrGotos, LrParseTable, } from './table/index.js';
|
|
17
|
+
export { formatLrActions, formatLrConflictWarnings, formatLrConflicts, formatLrGotos, formatParseConflictWarning, LrParseTable, } from './table/index.js';
|
|
18
18
|
export type { ParseAction, ParseConflict } from './table/index.js';
|
|
19
19
|
export { tokenInventory } from './token-inventory.js';
|
|
20
20
|
export { PARSE_TABLE_VERSION, PARSE_TABLE_VERSION_FULL, ParseTable } from './parse-table.js';
|
|
@@ -1 +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"}
|
|
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,wBAAwB,EACxB,iBAAiB,EACjB,aAAa,EACb,0BAA0B,EAC1B,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"}
|
|
@@ -9,7 +9,7 @@ export { ParseTableBuildError } from './parse-table-build-error.js';
|
|
|
9
9
|
export { ParseTableError } from './parse-table-error.js';
|
|
10
10
|
export { isParseTableJsonV2 } from './parse-table-json.js';
|
|
11
11
|
export { buildSlrTable, formatSlrActions, formatSlrConflicts } from './slr/index.js';
|
|
12
|
-
export { formatLrActions, formatLrConflicts, formatLrGotos, LrParseTable, } from './table/index.js';
|
|
12
|
+
export { formatLrActions, formatLrConflictWarnings, formatLrConflicts, formatLrGotos, formatParseConflictWarning, LrParseTable, } from './table/index.js';
|
|
13
13
|
export { tokenInventory } from './token-inventory.js';
|
|
14
14
|
export { PARSE_TABLE_VERSION, PARSE_TABLE_VERSION_FULL, ParseTable } from './parse-table.js';
|
|
15
15
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +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"}
|
|
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,wBAAwB,EACxB,iBAAiB,EACjB,aAAa,EACb,0BAA0B,EAC1B,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"}
|
|
@@ -3,7 +3,9 @@ import type { BnfGrammar } from '../bnf/bnf-grammar.js';
|
|
|
3
3
|
* One LR(0) item: a production with the dot before `dot` right-hand side symbols.
|
|
4
4
|
*/
|
|
5
5
|
export interface Lr0Item {
|
|
6
|
+
/** Stable production id assigned during BNF desugaring. */
|
|
6
7
|
readonly productionId: number;
|
|
8
|
+
/** Number of right-hand side symbols before the dot. */
|
|
7
9
|
readonly dot: number;
|
|
8
10
|
}
|
|
9
11
|
/**
|
|
@@ -11,6 +13,7 @@ export interface Lr0Item {
|
|
|
11
13
|
*
|
|
12
14
|
* @param grammar - Grammar containing the referenced production.
|
|
13
15
|
* @param item - LR(0) item to encode.
|
|
16
|
+
* @returns A human-readable dotted production string for diagnostics.
|
|
14
17
|
*/
|
|
15
18
|
export declare function lr0ItemKey(grammar: BnfGrammar, item: Lr0Item): string;
|
|
16
19
|
/**
|
|
@@ -26,11 +29,20 @@ export declare function lr0ItemsEqual(left: Lr0Item, right: Lr0Item): boolean;
|
|
|
26
29
|
* @param items - Items to sort.
|
|
27
30
|
*/
|
|
28
31
|
export declare function sortLr0Items(items: readonly Lr0Item[]): Lr0Item[];
|
|
32
|
+
/**
|
|
33
|
+
* Returns encoded symbol keys that appear immediately after the dot in an item set.
|
|
34
|
+
*
|
|
35
|
+
* @param grammar - BNF grammar containing referenced productions.
|
|
36
|
+
* @param items - Closed item set.
|
|
37
|
+
* @returns Sorted terminal and non-terminal keys eligible for GOTO from this state.
|
|
38
|
+
*/
|
|
39
|
+
export declare function symbolsAfterDot(grammar: BnfGrammar, items: readonly Lr0Item[]): readonly string[];
|
|
29
40
|
/**
|
|
30
41
|
* Computes the LR(0) closure of an item set.
|
|
31
42
|
*
|
|
32
43
|
* @param grammar - Plain or augmented BNF grammar.
|
|
33
44
|
* @param items - Seed items.
|
|
45
|
+
* @returns The seed items plus all items implied by dotted non-terminal prefixes.
|
|
34
46
|
*/
|
|
35
47
|
export declare function lr0Closure(grammar: BnfGrammar, items: readonly Lr0Item[]): readonly Lr0Item[];
|
|
36
48
|
/**
|
|
@@ -39,21 +51,30 @@ export declare function lr0Closure(grammar: BnfGrammar, items: readonly Lr0Item[
|
|
|
39
51
|
* @param grammar - Plain or augmented BNF grammar.
|
|
40
52
|
* @param items - Closed item set.
|
|
41
53
|
* @param symbolKey - Encoded terminal or non-terminal symbol.
|
|
54
|
+
* @returns The closed item set reached after advancing the dot past `symbolKey`.
|
|
42
55
|
*/
|
|
43
56
|
export declare function lr0Goto(grammar: BnfGrammar, items: readonly Lr0Item[], symbolKey: string): readonly Lr0Item[];
|
|
44
57
|
/**
|
|
45
58
|
* Canonical collection of LR(0) item sets for a BNF grammar.
|
|
46
59
|
*/
|
|
47
60
|
export declare class Lr0ItemSetCollection {
|
|
61
|
+
/** Grammar analyzed when the item sets were constructed. */
|
|
48
62
|
readonly grammar: BnfGrammar;
|
|
63
|
+
/** Closed LR(0) item sets indexed by parser state number. */
|
|
49
64
|
readonly itemSets: readonly (readonly Lr0Item[])[];
|
|
65
|
+
private readonly indexByIdentity;
|
|
50
66
|
/**
|
|
51
67
|
* Creates a collection from an ordered list of closed item sets.
|
|
52
68
|
*
|
|
53
69
|
* @param grammar - Grammar the item sets were built from.
|
|
54
70
|
* @param itemSets - Closed LR(0) item sets in discovery order.
|
|
71
|
+
* @param indexByIdentity - Optional precomputed identity-to-state map.
|
|
55
72
|
*/
|
|
56
|
-
constructor(
|
|
73
|
+
constructor(
|
|
74
|
+
/** Grammar analyzed when the item sets were constructed. */
|
|
75
|
+
grammar: BnfGrammar,
|
|
76
|
+
/** Closed LR(0) item sets indexed by parser state number. */
|
|
77
|
+
itemSets: readonly (readonly Lr0Item[])[], indexByIdentity?: ReadonlyMap<string, number>);
|
|
57
78
|
/**
|
|
58
79
|
* Returns the index of an item set matching `items`, or null when absent.
|
|
59
80
|
*
|
|
@@ -69,6 +90,7 @@ export declare class Lr0ItemSetBuilder {
|
|
|
69
90
|
* Builds the canonical LR(0) collection for a grammar.
|
|
70
91
|
*
|
|
71
92
|
* @param grammar - Augmented or plain BNF grammar.
|
|
93
|
+
* @returns The canonical LR(0) item set collection for the grammar.
|
|
72
94
|
*/
|
|
73
95
|
static build(grammar: BnfGrammar): Lr0ItemSetCollection;
|
|
74
96
|
/**
|
|
@@ -87,13 +109,15 @@ export declare class Lr0ItemSetBuilder {
|
|
|
87
109
|
* Returns a stable identity string for an item set.
|
|
88
110
|
*
|
|
89
111
|
* @param items - Closed item set.
|
|
112
|
+
* @param alreadySorted - When true, skips re-sorting because items are canonical.
|
|
90
113
|
*/
|
|
91
|
-
static setIdentity(items: readonly Lr0Item[]): string;
|
|
114
|
+
static setIdentity(items: readonly Lr0Item[], alreadySorted?: boolean): string;
|
|
92
115
|
}
|
|
93
116
|
/**
|
|
94
117
|
* Builds the canonical LR(0) item set collection for a grammar.
|
|
95
118
|
*
|
|
96
119
|
* @param grammar - Augmented or plain BNF grammar.
|
|
120
|
+
* @returns The canonical LR(0) item set collection for the grammar.
|
|
97
121
|
*/
|
|
98
122
|
export declare function buildLr0ItemSets(grammar: BnfGrammar): Lr0ItemSetCollection;
|
|
99
123
|
/**
|
|
@@ -1 +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;
|
|
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,2DAA2D;IAC3D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B,wDAAwD;IACxD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;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;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC3B,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,SAAS,OAAO,EAAE,GAC1B,SAAS,MAAM,EAAE,CAwBnB;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,OAAO,EAAE,GAAG,SAAS,OAAO,EAAE,CA0C7F;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CACnB,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,SAAS,EAAE,MAAM,GAClB,SAAS,OAAO,EAAE,CAiCpB;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAYzB,4DAA4D;aAC5C,OAAO,EAAE,UAAU;IACnC,6DAA6D;aAC7C,QAAQ,EAAE,SAAS,CAAC,SAAS,OAAO,EAAE,CAAC,EAAE;IAb7D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA8B;IAE9D;;;;;;OAMG;;IAEC,4DAA4D;IAC5C,OAAO,EAAE,UAAU;IACnC,6DAA6D;IAC7C,QAAQ,EAAE,SAAS,CAAC,SAAS,OAAO,EAAE,CAAC,EAAE,EACzD,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;IAsBjD;;;;OAIG;IACI,OAAO,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,GAAG,IAAI;CAM3D;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAE1B;;;;;OAKG;WACW,KAAK,CAAC,OAAO,EAAE,UAAU,GAAG,oBAAoB;IAkD9D;;;;OAIG;WACW,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,MAAM,EAAE;IAYvE;;;;OAIG;WACW,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM;IAKjD;;;;;OAKG;WACW,WAAW,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,EAAE,aAAa,UAAQ,GAAG,MAAM;CAQtF;AAED;;;;;GAKG;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"}
|