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
|
@@ -22,11 +22,11 @@ export declare class LrParseTable {
|
|
|
22
22
|
* @param stateCount - Number of parser states in the item set collection.
|
|
23
23
|
* @param actions - ACTION entries keyed by state and terminal symbol.
|
|
24
24
|
* @param gotos - GOTO entries keyed by state and non-terminal name.
|
|
25
|
-
* @param conflicts - Shift/reduce and reduce/reduce conflicts
|
|
25
|
+
* @param conflicts - Shift/reduce and reduce/reduce conflicts resolved during construction.
|
|
26
26
|
*/
|
|
27
27
|
constructor(algorithm: LrAlgorithm, grammar: BnfGrammar, productions: readonly BnfProduction[], stateCount: number, actions: ReadonlyMap<number, ReadonlyMap<string, ParseAction>>, gotos: ReadonlyMap<number, ReadonlyMap<string, number>>, conflicts: readonly ParseConflict[]);
|
|
28
28
|
/**
|
|
29
|
-
* Whether the table
|
|
29
|
+
* Whether the table was built without conflicts.
|
|
30
30
|
*/
|
|
31
31
|
get isConflictFree(): boolean;
|
|
32
32
|
/**
|
|
@@ -64,6 +64,18 @@ export declare function formatLrGotos(table: LrParseTable, state: number): reado
|
|
|
64
64
|
* @param table - LR parse table to format.
|
|
65
65
|
*/
|
|
66
66
|
export declare function formatLrConflicts(table: LrParseTable): readonly string[];
|
|
67
|
+
/**
|
|
68
|
+
* Returns conflict warning lines for a built parse table.
|
|
69
|
+
*
|
|
70
|
+
* @param table - LR parse table to format.
|
|
71
|
+
*/
|
|
72
|
+
export declare function formatLrConflictWarnings(table: LrParseTable): readonly string[];
|
|
73
|
+
/**
|
|
74
|
+
* Formats one resolved conflict as a warning line.
|
|
75
|
+
*
|
|
76
|
+
* @param conflict - Resolved shift/reduce or reduce/reduce conflict.
|
|
77
|
+
*/
|
|
78
|
+
export declare function formatParseConflictWarning(conflict: ParseConflict): string;
|
|
67
79
|
/**
|
|
68
80
|
* Returns encoded terminal keys used in ACTION rows, including `$eof`.
|
|
69
81
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lr-parse-table.d.ts","sourceRoot":"","sources":["../../../../src/lib/parse-table/table/lr-parse-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG9D,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGpE;;GAEG;AACH,qBAAa,YAAY;aAcD,SAAS,EAAE,WAAW;aACtB,OAAO,EAAE,UAAU;aACnB,WAAW,EAAE,SAAS,aAAa,EAAE;aACrC,UAAU,EAAE,MAAM;aAClB,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;aAC9D,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;aACvD,SAAS,EAAE,SAAS,aAAa,EAAE;IAlBvD;;;;;;;;;;OAUG;gBAEiB,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,UAAU,EACnB,WAAW,EAAE,SAAS,aAAa,EAAE,EACrC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAC9D,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACvD,SAAS,EAAE,SAAS,aAAa,EAAE;IAKvD;;OAEG;IACH,IAAW,cAAc,IAAI,OAAO,CAGnC;IAED;;;;;OAKG;IACI,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAKhE;;;;;OAKG;IACI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAIjE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAYrF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAYnF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,MAAM,EAAE,CAMxE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,MAAM,EAAE,CAa3E;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,MAAM,EAAE,CAa7E;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAG5F;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,aAAa,GAAG,SAAS,MAAM,EAAE,CAGhF"}
|
|
1
|
+
{"version":3,"file":"lr-parse-table.d.ts","sourceRoot":"","sources":["../../../../src/lib/parse-table/table/lr-parse-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG9D,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGpE;;GAEG;AACH,qBAAa,YAAY;aAcD,SAAS,EAAE,WAAW;aACtB,OAAO,EAAE,UAAU;aACnB,WAAW,EAAE,SAAS,aAAa,EAAE;aACrC,UAAU,EAAE,MAAM;aAClB,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;aAC9D,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;aACvD,SAAS,EAAE,SAAS,aAAa,EAAE;IAlBvD;;;;;;;;;;OAUG;gBAEiB,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,UAAU,EACnB,WAAW,EAAE,SAAS,aAAa,EAAE,EACrC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAC9D,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACvD,SAAS,EAAE,SAAS,aAAa,EAAE;IAKvD;;OAEG;IACH,IAAW,cAAc,IAAI,OAAO,CAGnC;IAED;;;;;OAKG;IACI,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAKhE;;;;;OAKG;IACI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAIjE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAYrF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAYnF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,MAAM,EAAE,CAMxE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,MAAM,EAAE,CAG/E;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAe1E;AAiBD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,MAAM,EAAE,CAa3E;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,MAAM,EAAE,CAa7E;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAG5F;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,aAAa,GAAG,SAAS,MAAM,EAAE,CAGhF"}
|
|
@@ -20,7 +20,7 @@ export class LrParseTable {
|
|
|
20
20
|
* @param stateCount - Number of parser states in the item set collection.
|
|
21
21
|
* @param actions - ACTION entries keyed by state and terminal symbol.
|
|
22
22
|
* @param gotos - GOTO entries keyed by state and non-terminal name.
|
|
23
|
-
* @param conflicts - Shift/reduce and reduce/reduce conflicts
|
|
23
|
+
* @param conflicts - Shift/reduce and reduce/reduce conflicts resolved during construction.
|
|
24
24
|
*/
|
|
25
25
|
constructor(algorithm, grammar, productions, stateCount, actions, gotos, conflicts) {
|
|
26
26
|
this.algorithm = algorithm;
|
|
@@ -32,7 +32,7 @@ export class LrParseTable {
|
|
|
32
32
|
this.conflicts = conflicts;
|
|
33
33
|
}
|
|
34
34
|
/**
|
|
35
|
-
* Whether the table
|
|
35
|
+
* Whether the table was built without conflicts.
|
|
36
36
|
*/
|
|
37
37
|
get isConflictFree() {
|
|
38
38
|
return this.conflicts.length === 0;
|
|
@@ -94,7 +94,42 @@ export function formatLrGotos(table, state) {
|
|
|
94
94
|
export function formatLrConflicts(table) {
|
|
95
95
|
return table.conflicts.map((conflict) => `${String(conflict.state)}/${conflict.symbol} `
|
|
96
96
|
+ `${formatParseAction(conflict.existing)} vs ${formatParseAction(conflict.incoming)} `
|
|
97
|
-
+ `(${conflict.kind})`);
|
|
97
|
+
+ `(${conflict.kind}, resolved as ${conflict.resolution})`);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Returns conflict warning lines for a built parse table.
|
|
101
|
+
*
|
|
102
|
+
* @param table - LR parse table to format.
|
|
103
|
+
*/
|
|
104
|
+
export function formatLrConflictWarnings(table) {
|
|
105
|
+
return table.conflicts.map((conflict) => formatParseConflictWarning(conflict));
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Formats one resolved conflict as a warning line.
|
|
109
|
+
*
|
|
110
|
+
* @param conflict - Resolved shift/reduce or reduce/reduce conflict.
|
|
111
|
+
*/
|
|
112
|
+
export function formatParseConflictWarning(conflict) {
|
|
113
|
+
const tokenLabel = formatConflictTokenLabel(conflict.symbol);
|
|
114
|
+
if (conflict.kind === 'shift-reduce') {
|
|
115
|
+
return `state ${String(conflict.state)}: shift/reduce conflict on ${tokenLabel} resolved as shift`;
|
|
116
|
+
}
|
|
117
|
+
const keptProduction = conflict.existing.kind === 'reduce'
|
|
118
|
+
? conflict.existing.productionId
|
|
119
|
+
: conflict.incoming.productionId;
|
|
120
|
+
return `state ${String(conflict.state)}: reduce/reduce conflict on ${tokenLabel} `
|
|
121
|
+
+ `resolved using rule ${String(keptProduction)}`;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Returns a readable terminal label for conflict warning text.
|
|
125
|
+
*
|
|
126
|
+
* @param symbol - Encoded terminal or `$eof` key from the ACTION table.
|
|
127
|
+
*/
|
|
128
|
+
function formatConflictTokenLabel(symbol) {
|
|
129
|
+
if (symbol === '$eof') {
|
|
130
|
+
return 'token $eof';
|
|
131
|
+
}
|
|
132
|
+
return `token ${symbol}`;
|
|
98
133
|
}
|
|
99
134
|
/**
|
|
100
135
|
* Returns encoded terminal keys used in ACTION rows, including `$eof`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lr-parse-table.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/table/lr-parse-table.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"lr-parse-table.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/table/lr-parse-table.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ export type ParseAction = {
|
|
|
15
15
|
*/
|
|
16
16
|
export type ParseConflictKind = 'shift-reduce' | 'reduce-reduce';
|
|
17
17
|
/**
|
|
18
|
-
* Records
|
|
18
|
+
* Records a shift/reduce or reduce/reduce conflict and how it was resolved.
|
|
19
19
|
*/
|
|
20
20
|
export interface ParseConflict {
|
|
21
21
|
readonly kind: ParseConflictKind;
|
|
@@ -23,6 +23,8 @@ export interface ParseConflict {
|
|
|
23
23
|
readonly symbol: string;
|
|
24
24
|
readonly existing: ParseAction;
|
|
25
25
|
readonly incoming: ParseAction;
|
|
26
|
+
/** Action kept in the table after conflict resolution. */
|
|
27
|
+
readonly resolution: 'shift' | 'reduce';
|
|
26
28
|
}
|
|
27
29
|
/**
|
|
28
30
|
* Returns whether two parse actions are identical.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-action.d.ts","sourceRoot":"","sources":["../../../../src/lib/parse-table/table/parse-action.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,WAAW,GACjB;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B,GACC;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CACjC,GACC;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;CAC3B,CAAC;AAEN;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG,eAAe,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,aAAa;IAE1B,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"parse-action.d.ts","sourceRoot":"","sources":["../../../../src/lib/parse-table/table/parse-action.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,WAAW,GACjB;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B,GACC;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CACjC,GACC;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;CAC3B,CAAC;AAEN;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG,eAAe,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,aAAa;IAE1B,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC3C;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAkBhF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAa7D;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACjC,QAAQ,EAAE,WAAW,EACrB,QAAQ,EAAE,WAAW,GACtB,iBAAiB,CAWnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-action.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/table/parse-action.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parse-action.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/table/parse-action.ts"],"names":[],"mappings":"AAmCA;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAiB,EAAE,KAAkB;IAEnE,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAC5B,CAAC;QACG,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,QAAQ,IAAI,CAAC,IAAI,EACjB,CAAC;QACG,KAAK,OAAO;YACR,OAAO,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC;QAEhE,KAAK,QAAQ;YACT,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY,CAAC;QAE/E,KAAK,QAAQ;YACT,OAAO,IAAI,CAAC;IACpB,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IAEjD,QAAQ,MAAM,CAAC,IAAI,EACnB,CAAC;QACG,KAAK,OAAO;YACR,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAEtC,KAAK,QAAQ;YACT,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QAE7C,KAAK,QAAQ;YACT,OAAO,KAAK,CAAC;IACrB,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACjC,QAAqB,EACrB,QAAqB;IAGrB,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC;IAClD,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC;IAElD,IAAI,eAAe,KAAK,eAAe,EACvC,CAAC;QACG,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED,OAAO,eAAe,CAAC;AAC3B,CAAC"}
|
|
@@ -11,6 +11,7 @@ export declare class TableBuilderBase {
|
|
|
11
11
|
* @param grammar - Augmented BNF grammar.
|
|
12
12
|
* @param itemSets - Canonical item set collection.
|
|
13
13
|
* @param gotoItems - Computes the GOTO item set for one state and symbol.
|
|
14
|
+
* @returns Map from `state:symbol` keys to target state indices.
|
|
14
15
|
*/
|
|
15
16
|
static buildGotoTargets(grammar: BnfGrammar, itemSets: readonly (readonly Lr0Item[])[], indexOf: (items: readonly Lr0Item[]) => number | null, gotoItems: (grammar: BnfGrammar, items: readonly Lr0Item[], symbolKey: string) => readonly Lr0Item[]): ReadonlyMap<string, number>;
|
|
16
17
|
/**
|
|
@@ -22,7 +23,7 @@ export declare class TableBuilderBase {
|
|
|
22
23
|
* @param gotoTargets - Precomputed GOTO target indices.
|
|
23
24
|
* @param stateActions - ACTION map for the state.
|
|
24
25
|
* @param stateGotos - GOTO map for the state.
|
|
25
|
-
* @param conflicts -
|
|
26
|
+
* @param conflicts - Resolved conflict list to append to when actions disagree.
|
|
26
27
|
*/
|
|
27
28
|
static fillShiftsAndGotos(grammar: BnfGrammar, state: number, itemSet: readonly Lr0Item[], gotoTargets: ReadonlyMap<string, number>, stateActions: Map<string, ParseAction>, stateGotos: Map<string, number>, conflicts: ParseConflict[]): void;
|
|
28
29
|
/**
|
|
@@ -31,7 +32,7 @@ export declare class TableBuilderBase {
|
|
|
31
32
|
* @param state - Parser state index.
|
|
32
33
|
* @param productionName - Left-hand side of the completed production.
|
|
33
34
|
* @param stateActions - ACTION map for the state.
|
|
34
|
-
* @param conflicts -
|
|
35
|
+
* @param conflicts - Resolved conflict list to append to when actions disagree.
|
|
35
36
|
*/
|
|
36
37
|
static setAcceptAction(state: number, productionName: string, stateActions: Map<string, ParseAction>, conflicts: ParseConflict[]): void;
|
|
37
38
|
/**
|
|
@@ -42,10 +43,10 @@ export declare class TableBuilderBase {
|
|
|
42
43
|
*/
|
|
43
44
|
static gotoKey(state: number, symbolKey: string): string;
|
|
44
45
|
/**
|
|
45
|
-
* Inserts one ACTION entry,
|
|
46
|
+
* Inserts one ACTION entry, resolving shift/reduce and reduce/reduce conflicts.
|
|
46
47
|
*
|
|
47
48
|
* @param stateActions - ACTION map for the current state.
|
|
48
|
-
* @param conflicts -
|
|
49
|
+
* @param conflicts - Resolved conflict list to append to when actions disagree.
|
|
49
50
|
* @param state - Parser state index.
|
|
50
51
|
* @param symbol - Encoded terminal or `$eof` key.
|
|
51
52
|
* @param incoming - Candidate parse action.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-builder-base.d.ts","sourceRoot":"","sources":["../../../../src/lib/parse-table/table/table-builder-base.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEhF,OAAO,
|
|
1
|
+
{"version":3,"file":"table-builder-base.d.ts","sourceRoot":"","sources":["../../../../src/lib/parse-table/table/table-builder-base.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEhF,OAAO,EAA4B,KAAK,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEhF,OAAO,EAGH,KAAK,WAAW,EAChB,KAAK,aAAa,EACrB,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,qBAAa,gBAAgB;IAEzB;;;;;;;OAOG;WACW,gBAAgB,CAC1B,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,SAAS,CAAC,SAAS,OAAO,EAAE,CAAC,EAAE,EACzC,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,KAAK,MAAM,GAAG,IAAI,EACrD,SAAS,EAAE,CACP,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,SAAS,EAAE,MAAM,KAChB,SAAS,OAAO,EAAE,GACxB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;IAgC9B;;;;;;;;;;OAUG;WACW,kBAAkB,CAC5B,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,SAAS,OAAO,EAAE,EAC3B,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EACxC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EACtC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,SAAS,EAAE,aAAa,EAAE,GAC3B,IAAI;IA4CP;;;;;;;OAOG;WACW,eAAe,CACzB,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EACtC,SAAS,EAAE,aAAa,EAAE,GAC3B,IAAI;IAgBP;;;;;OAKG;WACW,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAK/D;;;;;;;;OAQG;WACW,SAAS,CACnB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EACtC,SAAS,EAAE,aAAa,EAAE,EAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,WAAW,GACtB,IAAI;IA4CP;;;;;;OAMG;WACW,YAAY,CACtB,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,SAAS,EAAE,MAAM,GAClB,SAAS,OAAO,EAAE;CAIxB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EOF_TOKEN_NAME } from '../../lexer/token.js';
|
|
2
2
|
import { AUGMENTED_START_SYMBOL } from '../bnf/bnf-grammar.js';
|
|
3
3
|
import { bnfParserSymbolKey } from '../bnf/bnf-symbol.js';
|
|
4
|
-
import { lr0Goto,
|
|
4
|
+
import { lr0Goto, symbolsAfterDot } from '../lr0/lr0-item-set.js';
|
|
5
5
|
import { classifyParseConflict, parseActionsEqual, } from './parse-action.js';
|
|
6
6
|
/**
|
|
7
7
|
* Shared helpers for constructing LR parse tables from item sets.
|
|
@@ -13,13 +13,14 @@ export class TableBuilderBase {
|
|
|
13
13
|
* @param grammar - Augmented BNF grammar.
|
|
14
14
|
* @param itemSets - Canonical item set collection.
|
|
15
15
|
* @param gotoItems - Computes the GOTO item set for one state and symbol.
|
|
16
|
+
* @returns Map from `state:symbol` keys to target state indices.
|
|
16
17
|
*/
|
|
17
18
|
static buildGotoTargets(grammar, itemSets, indexOf, gotoItems) {
|
|
18
19
|
const targets = new Map();
|
|
19
|
-
|
|
20
|
+
// Precompute GOTO for every state and symbol reachable from its items.
|
|
20
21
|
for (let state = 0; state < itemSets.length; state += 1) {
|
|
21
22
|
const itemSet = itemSets[state] ?? [];
|
|
22
|
-
for (const symbolKey of
|
|
23
|
+
for (const symbolKey of symbolsAfterDot(grammar, itemSet)) {
|
|
23
24
|
const gotoSet = gotoItems(grammar, itemSet, symbolKey);
|
|
24
25
|
if (gotoSet.length === 0) {
|
|
25
26
|
continue;
|
|
@@ -42,9 +43,10 @@ export class TableBuilderBase {
|
|
|
42
43
|
* @param gotoTargets - Precomputed GOTO target indices.
|
|
43
44
|
* @param stateActions - ACTION map for the state.
|
|
44
45
|
* @param stateGotos - GOTO map for the state.
|
|
45
|
-
* @param conflicts -
|
|
46
|
+
* @param conflicts - Resolved conflict list to append to when actions disagree.
|
|
46
47
|
*/
|
|
47
48
|
static fillShiftsAndGotos(grammar, state, itemSet, gotoTargets, stateActions, stateGotos, conflicts) {
|
|
49
|
+
// Derive shift and GOTO entries from every incomplete item in the state.
|
|
48
50
|
for (const item of itemSet) {
|
|
49
51
|
const production = grammar.production(item.productionId);
|
|
50
52
|
if (production === null) {
|
|
@@ -59,6 +61,7 @@ export class TableBuilderBase {
|
|
|
59
61
|
if (targetState === undefined) {
|
|
60
62
|
continue;
|
|
61
63
|
}
|
|
64
|
+
// Non-terminal symbols populate GOTO; terminals populate ACTION shift entries.
|
|
62
65
|
if (nextSymbol.kind === 'nonTerminal') {
|
|
63
66
|
stateGotos.set(nextSymbol.name, targetState);
|
|
64
67
|
continue;
|
|
@@ -72,7 +75,7 @@ export class TableBuilderBase {
|
|
|
72
75
|
* @param state - Parser state index.
|
|
73
76
|
* @param productionName - Left-hand side of the completed production.
|
|
74
77
|
* @param stateActions - ACTION map for the state.
|
|
75
|
-
* @param conflicts -
|
|
78
|
+
* @param conflicts - Resolved conflict list to append to when actions disagree.
|
|
76
79
|
*/
|
|
77
80
|
static setAcceptAction(state, productionName, stateActions, conflicts) {
|
|
78
81
|
if (productionName !== AUGMENTED_START_SYMBOL) {
|
|
@@ -90,10 +93,10 @@ export class TableBuilderBase {
|
|
|
90
93
|
return `${String(state)}:${symbolKey}`;
|
|
91
94
|
}
|
|
92
95
|
/**
|
|
93
|
-
* Inserts one ACTION entry,
|
|
96
|
+
* Inserts one ACTION entry, resolving shift/reduce and reduce/reduce conflicts.
|
|
94
97
|
*
|
|
95
98
|
* @param stateActions - ACTION map for the current state.
|
|
96
|
-
* @param conflicts -
|
|
99
|
+
* @param conflicts - Resolved conflict list to append to when actions disagree.
|
|
97
100
|
* @param state - Parser state index.
|
|
98
101
|
* @param symbol - Encoded terminal or `$eof` key.
|
|
99
102
|
* @param incoming - Candidate parse action.
|
|
@@ -104,15 +107,32 @@ export class TableBuilderBase {
|
|
|
104
107
|
stateActions.set(symbol, incoming);
|
|
105
108
|
return;
|
|
106
109
|
}
|
|
110
|
+
// Identical re-insertions are ignored; disagreeing actions are resolved by conflict kind.
|
|
107
111
|
if (parseActionsEqual(existing, incoming)) {
|
|
108
112
|
return;
|
|
109
113
|
}
|
|
114
|
+
const conflictKind = classifyParseConflict(existing, incoming);
|
|
115
|
+
if (conflictKind === 'shift-reduce') {
|
|
116
|
+
const shiftAction = existing.kind === 'shift' ? existing : incoming;
|
|
117
|
+
stateActions.set(symbol, shiftAction);
|
|
118
|
+
conflicts.push({
|
|
119
|
+
kind: 'shift-reduce',
|
|
120
|
+
state,
|
|
121
|
+
symbol,
|
|
122
|
+
existing,
|
|
123
|
+
incoming,
|
|
124
|
+
resolution: 'shift',
|
|
125
|
+
});
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
// Reduce/reduce: keep the first reduce action already in the table.
|
|
110
129
|
conflicts.push({
|
|
111
|
-
kind:
|
|
130
|
+
kind: 'reduce-reduce',
|
|
112
131
|
state,
|
|
113
132
|
symbol,
|
|
114
133
|
existing,
|
|
115
134
|
incoming,
|
|
135
|
+
resolution: 'reduce',
|
|
116
136
|
});
|
|
117
137
|
}
|
|
118
138
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-builder-base.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/table/table-builder-base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAmB,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"table-builder-base.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/table/table-builder-base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAmB,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,eAAe,EAAgB,MAAM,wBAAwB,CAAC;AAEhF,OAAO,EACH,qBAAqB,EACrB,iBAAiB,GAGpB,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAEzB;;;;;;;OAOG;IACI,MAAM,CAAC,gBAAgB,CAC1B,OAAmB,EACnB,QAAyC,EACzC,OAAqD,EACrD,SAIuB;QAGvB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;QAE1C,uEAAuE;QACvE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EACvD,CAAC;YACG,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAEtC,KAAK,MAAM,SAAS,IAAI,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,EACzD,CAAC;gBACG,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;gBAEvD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EACxB,CAAC;oBACG,SAAS;gBACb,CAAC;gBAED,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;gBAErC,IAAI,WAAW,KAAK,IAAI,EACxB,CAAC;oBACG,SAAS;gBACb,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,WAAW,CAAC,CAAC;YACzE,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAED;;;;;;;;;;OAUG;IACI,MAAM,CAAC,kBAAkB,CAC5B,OAAmB,EACnB,KAAa,EACb,OAA2B,EAC3B,WAAwC,EACxC,YAAsC,EACtC,UAA+B,EAC/B,SAA0B;QAG1B,yEAAyE;QACzE,KAAK,MAAM,IAAI,IAAI,OAAO,EAC1B,CAAC;YACG,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAEzD,IAAI,UAAU,KAAK,IAAI,EACvB,CAAC;gBACG,SAAS;YACb,CAAC;YAED,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAE5C,IAAI,UAAU,KAAK,SAAS,EAC5B,CAAC;gBACG,SAAS;YACb,CAAC;YAED,MAAM,SAAS,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;YACjD,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;YAEhF,IAAI,WAAW,KAAK,SAAS,EAC7B,CAAC;gBACG,SAAS;YACb,CAAC;YAED,+EAA+E;YAC/E,IAAI,UAAU,CAAC,IAAI,KAAK,aAAa,EACrC,CAAC;gBACG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBAC7C,SAAS;YACb,CAAC;YAED,gBAAgB,CAAC,SAAS,CACtB,YAAY,EACZ,SAAS,EACT,KAAK,EACL,SAAS,EACT,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CACxC,CAAC;QACN,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,eAAe,CACzB,KAAa,EACb,cAAsB,EACtB,YAAsC,EACtC,SAA0B;QAG1B,IAAI,cAAc,KAAK,sBAAsB,EAC7C,CAAC;YACG,OAAO;QACX,CAAC;QAED,gBAAgB,CAAC,SAAS,CACtB,YAAY,EACZ,SAAS,EACT,KAAK,EACL,cAAc,EACd,EAAE,IAAI,EAAE,QAAQ,EAAE,CACrB,CAAC;IACN,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,OAAO,CAAC,KAAa,EAAE,SAAiB;QAElD,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;IAC3C,CAAC;IAED;;;;;;;;OAQG;IACI,MAAM,CAAC,SAAS,CACnB,YAAsC,EACtC,SAA0B,EAC1B,KAAa,EACb,MAAc,EACd,QAAqB;QAGrB,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE1C,IAAI,QAAQ,KAAK,SAAS,EAC1B,CAAC;YACG,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACnC,OAAO;QACX,CAAC;QAED,0FAA0F;QAC1F,IAAI,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EACzC,CAAC;YACG,OAAO;QACX,CAAC;QAED,MAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE/D,IAAI,YAAY,KAAK,cAAc,EACnC,CAAC;YACG,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;YACpE,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACtC,SAAS,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,cAAc;gBACpB,KAAK;gBACL,MAAM;gBACN,QAAQ;gBACR,QAAQ;gBACR,UAAU,EAAE,OAAO;aACtB,CAAC,CAAC;YACH,OAAO;QACX,CAAC;QAED,oEAAoE;QACpE,SAAS,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,eAAe;YACrB,KAAK;YACL,MAAM;YACN,QAAQ;YACR,QAAQ;YACR,UAAU,EAAE,QAAQ;SACvB,CAAC,CAAC;IACP,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,YAAY,CACtB,OAAmB,EACnB,KAAyB,EACzB,SAAiB;QAGjB,OAAO,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC;CACJ"}
|
|
@@ -6,26 +6,32 @@ import type { ParseTable } from '../parse-table/parse-table.js';
|
|
|
6
6
|
* Returns the ACTION table key for a lexer token.
|
|
7
7
|
*
|
|
8
8
|
* @param token - Current input token.
|
|
9
|
+
* @returns The ACTION table key for the token, or `$eof` for end-of-input.
|
|
9
10
|
*/
|
|
10
11
|
export declare function tokenActionKey(token: Token): string;
|
|
11
12
|
/**
|
|
12
13
|
* Builds a terminal CST node from a shifted token.
|
|
13
14
|
*
|
|
14
15
|
* @param token - Lexer token that was shifted.
|
|
16
|
+
* @returns A terminal CST node carrying the token name, text, and location.
|
|
15
17
|
*/
|
|
16
18
|
export declare function astNodeFromToken(token: Token): AstNode;
|
|
17
19
|
/**
|
|
18
20
|
* Merges child spans into one source location.
|
|
19
21
|
*
|
|
20
22
|
* @param children - Reduced child subtrees.
|
|
23
|
+
* @returns The smallest span covering all child locations, or null when none exist.
|
|
21
24
|
*/
|
|
22
25
|
export declare function mergeChildLocations(children: readonly AstNode[]): SourceLocation | null;
|
|
23
26
|
/**
|
|
24
27
|
* Outcome of a shift-reduce parse attempt.
|
|
25
28
|
*/
|
|
26
29
|
export interface ShiftReduceParseResult {
|
|
30
|
+
/** Concrete syntax tree on success, or null on syntax error. */
|
|
27
31
|
readonly cst: AstNode | null;
|
|
32
|
+
/** Source offset of the first error token, or null on success. */
|
|
28
33
|
readonly errorOffset: number | null;
|
|
34
|
+
/** Human-readable syntax error message, or null on success. */
|
|
29
35
|
readonly errorMessage: string | null;
|
|
30
36
|
}
|
|
31
37
|
/**
|
|
@@ -55,6 +61,7 @@ export declare class ShiftReduceEngine {
|
|
|
55
61
|
* @param productionId - Production to reduce by.
|
|
56
62
|
* @param stateStack - Parser state stack.
|
|
57
63
|
* @param valueStack - Semantic value stack.
|
|
64
|
+
* @returns The reduced subtree pushed onto the value stack, or null on stack underflow.
|
|
58
65
|
*/
|
|
59
66
|
private static reduce;
|
|
60
67
|
/**
|
|
@@ -62,6 +69,7 @@ export declare class ShiftReduceEngine {
|
|
|
62
69
|
*
|
|
63
70
|
* @param production - Reduced production metadata.
|
|
64
71
|
* @param children - Child subtrees matching the production right-hand side.
|
|
72
|
+
* @returns A rule CST node spanning the reduced children.
|
|
65
73
|
*/
|
|
66
74
|
private static nodeFromProduction;
|
|
67
75
|
}
|
|
@@ -70,6 +78,7 @@ export declare class ShiftReduceEngine {
|
|
|
70
78
|
*
|
|
71
79
|
* @param table - Parse table with ACTION, GOTO, and production metadata.
|
|
72
80
|
* @param tokens - Token stream ending with `$eof`.
|
|
81
|
+
* @returns The start symbol parse tree, or null on syntax error.
|
|
73
82
|
*/
|
|
74
83
|
export declare function parseWithTable(table: ParseTable, tokens: readonly Token[]): AstNode | null;
|
|
75
84
|
/**
|
|
@@ -77,6 +86,7 @@ export declare function parseWithTable(table: ParseTable, tokens: readonly Token
|
|
|
77
86
|
*
|
|
78
87
|
* @param table - Parse table with ACTION, GOTO, and production metadata.
|
|
79
88
|
* @param tokens - Token stream ending with `$eof`.
|
|
89
|
+
* @returns Parse tree on success, or error offset and message on failure.
|
|
80
90
|
*/
|
|
81
91
|
export declare function parseWithTableResult(table: ParseTable, tokens: readonly Token[]): ShiftReduceParseResult;
|
|
82
92
|
//# sourceMappingURL=shift-reduce-engine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shift-reduce-engine.d.ts","sourceRoot":"","sources":["../../../src/lib/shift-reduce/shift-reduce-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAA8B,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE
|
|
1
|
+
{"version":3,"file":"shift-reduce-engine.d.ts","sourceRoot":"","sources":["../../../src/lib/shift-reduce/shift-reduce-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAA8B,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAQnD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAGtD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,cAAc,GAAG,IAAI,CAiCvF;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IAEnC,gEAAgE;IAChE,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IAE7B,kEAAkE;IAClE,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpC,+DAA+D;IAC/D,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAE1B;;;;;;OAMG;WACW,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,OAAO,GAAG,IAAI;IAKhF;;;;;;OAMG;WACW,eAAe,CACzB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,SAAS,KAAK,EAAE,GACzB,sBAAsB;IA4FzB;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,MAAM;IAwDrB;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;CAcpC;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,OAAO,GAAG,IAAI,CAG1F;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAChC,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,SAAS,KAAK,EAAE,GACzB,sBAAsB,CAGxB"}
|
|
@@ -4,6 +4,7 @@ import { EOF_TOKEN_NAME, isEofToken } from '../lexer/token.js';
|
|
|
4
4
|
* Returns the ACTION table key for a lexer token.
|
|
5
5
|
*
|
|
6
6
|
* @param token - Current input token.
|
|
7
|
+
* @returns The ACTION table key for the token, or `$eof` for end-of-input.
|
|
7
8
|
*/
|
|
8
9
|
export function tokenActionKey(token) {
|
|
9
10
|
if (isEofToken(token)) {
|
|
@@ -15,6 +16,7 @@ export function tokenActionKey(token) {
|
|
|
15
16
|
* Builds a terminal CST node from a shifted token.
|
|
16
17
|
*
|
|
17
18
|
* @param token - Lexer token that was shifted.
|
|
19
|
+
* @returns A terminal CST node carrying the token name, text, and location.
|
|
18
20
|
*/
|
|
19
21
|
export function astNodeFromToken(token) {
|
|
20
22
|
return AstNode.terminal(token.name, token.text, token.location);
|
|
@@ -23,10 +25,12 @@ export function astNodeFromToken(token) {
|
|
|
23
25
|
* Merges child spans into one source location.
|
|
24
26
|
*
|
|
25
27
|
* @param children - Reduced child subtrees.
|
|
28
|
+
* @returns The smallest span covering all child locations, or null when none exist.
|
|
26
29
|
*/
|
|
27
30
|
export function mergeChildLocations(children) {
|
|
28
31
|
let offset = null;
|
|
29
32
|
let end = null;
|
|
33
|
+
// Walk children to find the earliest offset and latest end position.
|
|
30
34
|
for (const child of children) {
|
|
31
35
|
if (child.location === null) {
|
|
32
36
|
continue;
|
|
@@ -86,6 +90,7 @@ export class ShiftReduceEngine {
|
|
|
86
90
|
const stateStack = [0];
|
|
87
91
|
const valueStack = [];
|
|
88
92
|
let tokenIndex = 0;
|
|
93
|
+
// Drive the parser until accept, error, or an unrecoverable reduce failure.
|
|
89
94
|
while (true) {
|
|
90
95
|
const state = stateStack[stateStack.length - 1];
|
|
91
96
|
const currentToken = tokens[tokenIndex];
|
|
@@ -142,6 +147,7 @@ export class ShiftReduceEngine {
|
|
|
142
147
|
* @param productionId - Production to reduce by.
|
|
143
148
|
* @param stateStack - Parser state stack.
|
|
144
149
|
* @param valueStack - Semantic value stack.
|
|
150
|
+
* @returns The reduced subtree pushed onto the value stack, or null on stack underflow.
|
|
145
151
|
*/
|
|
146
152
|
static reduce(table, productionId, stateStack, valueStack) {
|
|
147
153
|
const production = table.production(productionId);
|
|
@@ -150,6 +156,7 @@ export class ShiftReduceEngine {
|
|
|
150
156
|
}
|
|
151
157
|
const rhsLength = production.rhs.length;
|
|
152
158
|
const children = [];
|
|
159
|
+
// Pop one state and value per right-hand side symbol.
|
|
153
160
|
for (let index = 0; index < rhsLength; index += 1) {
|
|
154
161
|
if (stateStack.length === 0 || valueStack.length === 0) {
|
|
155
162
|
return null;
|
|
@@ -164,6 +171,7 @@ export class ShiftReduceEngine {
|
|
|
164
171
|
if (stateStack.length === 0) {
|
|
165
172
|
return null;
|
|
166
173
|
}
|
|
174
|
+
// Follow GOTO for the production left-hand side and push the new subtree.
|
|
167
175
|
const gotoState = table.goto(stateStack[stateStack.length - 1], production.name);
|
|
168
176
|
if (gotoState === null) {
|
|
169
177
|
return null;
|
|
@@ -178,6 +186,7 @@ export class ShiftReduceEngine {
|
|
|
178
186
|
*
|
|
179
187
|
* @param production - Reduced production metadata.
|
|
180
188
|
* @param children - Child subtrees matching the production right-hand side.
|
|
189
|
+
* @returns A rule CST node spanning the reduced children.
|
|
181
190
|
*/
|
|
182
191
|
static nodeFromProduction(production, children) {
|
|
183
192
|
return AstNode.rule(production.name, children, mergeChildLocations(children), production.variant, production.id, production.origin);
|
|
@@ -188,6 +197,7 @@ export class ShiftReduceEngine {
|
|
|
188
197
|
*
|
|
189
198
|
* @param table - Parse table with ACTION, GOTO, and production metadata.
|
|
190
199
|
* @param tokens - Token stream ending with `$eof`.
|
|
200
|
+
* @returns The start symbol parse tree, or null on syntax error.
|
|
191
201
|
*/
|
|
192
202
|
export function parseWithTable(table, tokens) {
|
|
193
203
|
return ShiftReduceEngine.parse(table, tokens);
|
|
@@ -197,6 +207,7 @@ export function parseWithTable(table, tokens) {
|
|
|
197
207
|
*
|
|
198
208
|
* @param table - Parse table with ACTION, GOTO, and production metadata.
|
|
199
209
|
* @param tokens - Token stream ending with `$eof`.
|
|
210
|
+
* @returns Parse tree on success, or error offset and message on failure.
|
|
200
211
|
*/
|
|
201
212
|
export function parseWithTableResult(table, tokens) {
|
|
202
213
|
return ShiftReduceEngine.parseWithResult(table, tokens);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shift-reduce-engine.js","sourceRoot":"","sources":["../../../src/lib/shift-reduce/shift-reduce-engine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAc,MAAM,mBAAmB,CAAC;AAI3E
|
|
1
|
+
{"version":3,"file":"shift-reduce-engine.js","sourceRoot":"","sources":["../../../src/lib/shift-reduce/shift-reduce-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,12 @@ export declare function parseRhsSymbolKey(key: string): {
|
|
|
22
22
|
* @param production - Parse table production metadata.
|
|
23
23
|
*/
|
|
24
24
|
export declare function productionSlots(production: ParseTableProductionJson): readonly ProductionSlot[];
|
|
25
|
+
/**
|
|
26
|
+
* Returns the shared `$repeat` prefix for a numbered synthetic repeat symbol or reference.
|
|
27
|
+
*
|
|
28
|
+
* @param name - Repeat non-terminal or transform reference name.
|
|
29
|
+
*/
|
|
30
|
+
export declare function repeatSymbolPrefix(name: string): string | null;
|
|
25
31
|
/**
|
|
26
32
|
* Finds the child index for a transform reference name.
|
|
27
33
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binding-map.d.ts","sourceRoot":"","sources":["../../../src/lib/transform/binding-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,cAAc;IAE3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAwBzF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,wBAAwB,GAAG,SAAS,cAAc,EAAE,CAY/F;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAC9B,UAAU,EAAE,wBAAwB,EACpC,SAAS,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"binding-map.d.ts","sourceRoot":"","sources":["../../../src/lib/transform/binding-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,cAAc;IAE3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAwBzF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,wBAAwB,GAAG,SAAS,cAAc,EAAE,CAY/F;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK9D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAC9B,UAAU,EAAE,wBAAwB,EACpC,SAAS,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CAgCf"}
|
|
@@ -37,6 +37,15 @@ export function productionSlots(production) {
|
|
|
37
37
|
};
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Returns the shared `$repeat` prefix for a numbered synthetic repeat symbol or reference.
|
|
42
|
+
*
|
|
43
|
+
* @param name - Repeat non-terminal or transform reference name.
|
|
44
|
+
*/
|
|
45
|
+
export function repeatSymbolPrefix(name) {
|
|
46
|
+
const match = /^(.+\$repeat)_\d+$/.exec(name);
|
|
47
|
+
return match?.[1] ?? null;
|
|
48
|
+
}
|
|
40
49
|
/**
|
|
41
50
|
* Finds the child index for a transform reference name.
|
|
42
51
|
*
|
|
@@ -54,6 +63,14 @@ export function referenceSlotIndex(production, reference) {
|
|
|
54
63
|
return slot.index;
|
|
55
64
|
}
|
|
56
65
|
}
|
|
66
|
+
const repeatPrefix = repeatSymbolPrefix(reference);
|
|
67
|
+
if (repeatPrefix !== null) {
|
|
68
|
+
for (const slot of productionSlots(production)) {
|
|
69
|
+
if (slot.binding === null && repeatSymbolPrefix(slot.symbol) === repeatPrefix) {
|
|
70
|
+
return slot.index;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
57
74
|
return null;
|
|
58
75
|
}
|
|
59
76
|
//# sourceMappingURL=binding-map.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binding-map.js","sourceRoot":"","sources":["../../../src/lib/transform/binding-map.ts"],"names":[],"mappings":"AAYA;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAEzC,MAAM,YAAY,GAAG,qCAAqC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAErE,IAAI,YAAY,KAAK,IAAI,EACzB,CAAC;QACG,OAAO;YACH,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;YACxB,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;SAC1B,CAAC;IACN,CAAC;IAED,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC5C,CAAC;QACG,OAAO;YACH,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC3B,CAAC;IACN,CAAC;IAED,OAAO;QACH,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,GAAG;KACd,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,UAAoC;IAEhE,OAAO,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAErC,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAEtC,OAAO;YACH,KAAK;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;SACxB,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAC9B,UAAoC,EACpC,SAAiB;IAGjB,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,UAAU,CAAC,EAC9C,CAAC;QACG,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAC9B,CAAC;YACG,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;IACL,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,UAAU,CAAC,EAC9C,CAAC;QACG,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EACtD,CAAC;YACG,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"binding-map.js","sourceRoot":"","sources":["../../../src/lib/transform/binding-map.ts"],"names":[],"mappings":"AAYA;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAEzC,MAAM,YAAY,GAAG,qCAAqC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAErE,IAAI,YAAY,KAAK,IAAI,EACzB,CAAC;QACG,OAAO;YACH,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;YACxB,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;SAC1B,CAAC;IACN,CAAC;IAED,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC5C,CAAC;QACG,OAAO;YACH,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC3B,CAAC;IACN,CAAC;IAED,OAAO;QACH,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,GAAG;KACd,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,UAAoC;IAEhE,OAAO,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAErC,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAEtC,OAAO;YACH,KAAK;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;SACxB,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAE3C,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE9C,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC9B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAC9B,UAAoC,EACpC,SAAiB;IAGjB,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,UAAU,CAAC,EAC9C,CAAC;QACG,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAC9B,CAAC;YACG,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;IACL,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,UAAU,CAAC,EAC9C,CAAC;QACG,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EACtD,CAAC;YACG,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;IACL,CAAC;IAED,MAAM,YAAY,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAEnD,IAAI,YAAY,KAAK,IAAI,EACzB,CAAC;QACG,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,UAAU,CAAC,EAC9C,CAAC;YACG,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,YAAY,EAC7E,CAAC;gBACG,OAAO,IAAI,CAAC,KAAK,CAAC;YACtB,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -112,6 +112,12 @@ export declare class CstTransformer {
|
|
|
112
112
|
* @param resolved - Resolved reference child nodes.
|
|
113
113
|
*/
|
|
114
114
|
private findRepeatTail;
|
|
115
|
+
/**
|
|
116
|
+
* Resolves a transform rule for a CST node, aliasing numbered repeat symbols to `$repeat_0`.
|
|
117
|
+
*
|
|
118
|
+
* @param node - CST node being transformed.
|
|
119
|
+
*/
|
|
120
|
+
private resolveTransformRule;
|
|
115
121
|
/**
|
|
116
122
|
* Returns whether a CST node represents an epsilon production.
|
|
117
123
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cst-transformer.d.ts","sourceRoot":"","sources":["../../../src/lib/transform/cst-transformer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,
|
|
1
|
+
{"version":3,"file":"cst-transformer.d.ts","sourceRoot":"","sources":["../../../src/lib/transform/cst-transformer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,EAA2D,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEhH;;GAEG;AACH,qBAAa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IAEnC;;;;;OAKG;gBACgB,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU;IAM7D;;;;;OAKG;IACI,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI;IAUrD;;;;;;OAMG;WACW,SAAS,CACnB,GAAG,EAAE,OAAO,GAAG,IAAI,EACnB,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,UAAU,GAClB,OAAO,GAAG,IAAI;IAUjB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IA+BrB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAwBvB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IA2BlB;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IA2DrB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAsEtB;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IA6BpB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IA2BxB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAiBzB;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAyB5B;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAsBzB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAoBtB;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IA6B5B;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAiBrB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAUrB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAuBvB;;;;;;;OAOG;IACH,OAAO,CAAC,YAAY;CAcvB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CACxB,GAAG,EAAE,OAAO,GAAG,IAAI,EACnB,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,UAAU,GAClB,OAAO,GAAG,IAAI,CAGhB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACnC,UAAU,EAAE,wBAAwB,GACrC,SAAS,cAAc,EAAE,CAG3B"}
|