parser-lr 0.4.0 → 0.5.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 +35 -1
- package/bin/parser-lr.js +369 -9068
- package/bin/parser-lr.js.map +1 -1
- package/dist/lib/grammar/grammar-json-path.d.ts +2 -0
- package/dist/lib/grammar/grammar-json-path.d.ts.map +1 -0
- package/dist/lib/grammar/grammar-json-path.esm.d.ts +5 -0
- package/dist/lib/grammar/grammar-json-path.esm.d.ts.map +1 -0
- package/dist/lib/grammar/grammar-json-path.esm.js +9 -0
- package/dist/lib/grammar/grammar-json-path.esm.js.map +1 -0
- package/dist/lib/grammar/grammar-json-path.js +2 -0
- package/dist/lib/grammar/grammar-json-path.js.map +1 -0
- package/dist/lib/grammar/grammar.json +1218 -4476
- package/dist/lib/grammar/index.d.ts +2 -0
- package/dist/lib/grammar/index.d.ts.map +1 -1
- package/dist/lib/grammar/index.js +1 -0
- package/dist/lib/grammar/index.js.map +1 -1
- package/dist/lib/grammar/meta-grammar-table.d.ts.map +1 -1
- package/dist/lib/grammar/meta-grammar-table.js +4 -2
- package/dist/lib/grammar/meta-grammar-table.js.map +1 -1
- package/dist/lib/grammar/table-validator.d.ts +26 -0
- package/dist/lib/grammar/table-validator.d.ts.map +1 -0
- package/dist/lib/grammar/table-validator.js +211 -0
- package/dist/lib/grammar/table-validator.js.map +1 -0
- package/dist/lib/index.d.ts +2 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +1 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/transform/cst-transformer.d.ts +14 -0
- package/dist/lib/transform/cst-transformer.d.ts.map +1 -1
- package/dist/lib/transform/cst-transformer.js +82 -11
- package/dist/lib/transform/cst-transformer.js.map +1 -1
- package/dist/lib/transform/grammar-fixture.d.ts +56 -0
- package/dist/lib/transform/grammar-fixture.d.ts.map +1 -0
- package/dist/lib/transform/grammar-fixture.js +101 -0
- package/dist/lib/transform/grammar-fixture.js.map +1 -0
- package/dist/lib-cjs/ast/ast-node.js +70 -0
- package/dist/lib-cjs/ast/ast-node.js.map +1 -0
- package/dist/lib-cjs/errors/index.js +9 -0
- package/dist/lib-cjs/errors/index.js.map +1 -0
- package/dist/lib-cjs/errors/parser-lr-error.js +52 -0
- package/dist/lib-cjs/errors/parser-lr-error.js.map +1 -0
- package/dist/lib-cjs/grammar/ast-schema.js +43 -0
- package/dist/lib-cjs/grammar/ast-schema.js.map +1 -0
- package/dist/lib-cjs/grammar/ast-type.js +3 -0
- package/dist/lib-cjs/grammar/ast-type.js.map +1 -0
- package/dist/lib-cjs/grammar/expression.js +3 -0
- package/dist/lib-cjs/grammar/expression.js.map +1 -0
- package/dist/lib-cjs/grammar/grammar-from-cst.js +641 -0
- package/dist/lib-cjs/grammar/grammar-from-cst.js.map +1 -0
- package/dist/lib-cjs/grammar/grammar-json-path.js +13 -0
- package/dist/lib-cjs/grammar/grammar-json-path.js.map +1 -0
- package/dist/lib-cjs/grammar/grammar-literals.js +71 -0
- package/dist/lib-cjs/grammar/grammar-literals.js.map +1 -0
- package/dist/lib-cjs/grammar/grammar.js +64 -0
- package/dist/lib-cjs/grammar/grammar.js.map +1 -0
- package/dist/lib-cjs/grammar/grammar.json +5760 -0
- package/dist/lib-cjs/grammar/index.js +19 -0
- package/dist/lib-cjs/grammar/index.js.map +1 -0
- package/dist/lib-cjs/grammar/meta-grammar-table.js +39 -0
- package/dist/lib-cjs/grammar/meta-grammar-table.js.map +1 -0
- package/dist/lib-cjs/grammar/production.js +3 -0
- package/dist/lib-cjs/grammar/production.js.map +1 -0
- package/dist/lib-cjs/grammar/read-grammar-error.js +22 -0
- package/dist/lib-cjs/grammar/read-grammar-error.js.map +1 -0
- package/dist/lib-cjs/grammar/read-grammar.js +24 -0
- package/dist/lib-cjs/grammar/read-grammar.js.map +1 -0
- package/dist/lib-cjs/grammar/table-validator.js +215 -0
- package/dist/lib-cjs/grammar/table-validator.js.map +1 -0
- package/dist/lib-cjs/grammar/token-rule.js +3 -0
- package/dist/lib-cjs/grammar/token-rule.js.map +1 -0
- package/dist/lib-cjs/grammar/transform-expression.js +3 -0
- package/dist/lib-cjs/grammar/transform-expression.js.map +1 -0
- package/dist/lib-cjs/grammar/transform-rule.js +3 -0
- package/dist/lib-cjs/grammar/transform-rule.js.map +1 -0
- package/dist/lib-cjs/grammar/transform-schema.js +43 -0
- package/dist/lib-cjs/grammar/transform-schema.js.map +1 -0
- package/dist/lib-cjs/index.js +66 -0
- package/dist/lib-cjs/index.js.map +1 -0
- package/dist/lib-cjs/lexer/index.js +32 -0
- package/dist/lib-cjs/lexer/index.js.map +1 -0
- package/dist/lib-cjs/lexer/lexer-compile-error.js +22 -0
- package/dist/lib-cjs/lexer/lexer-compile-error.js.map +1 -0
- package/dist/lib-cjs/lexer/lexer-compile.js +201 -0
- package/dist/lib-cjs/lexer/lexer-compile.js.map +1 -0
- package/dist/lib-cjs/lexer/lexer-error.js +22 -0
- package/dist/lib-cjs/lexer/lexer-error.js.map +1 -0
- package/dist/lib-cjs/lexer/lexer-input-error.js +17 -0
- package/dist/lib-cjs/lexer/lexer-input-error.js.map +1 -0
- package/dist/lib-cjs/lexer/lexer-state-error.js +19 -0
- package/dist/lib-cjs/lexer/lexer-state-error.js.map +1 -0
- package/dist/lib-cjs/lexer/lexer.js +278 -0
- package/dist/lib-cjs/lexer/lexer.js.map +1 -0
- package/dist/lib-cjs/lexer/token.js +44 -0
- package/dist/lib-cjs/lexer/token.js.map +1 -0
- package/dist/lib-cjs/package.json +3 -0
- package/dist/lib-cjs/parse-context-error.js +19 -0
- package/dist/lib-cjs/parse-context-error.js.map +1 -0
- package/dist/lib-cjs/parse-context.js +137 -0
- package/dist/lib-cjs/parse-context.js.map +1 -0
- package/dist/lib-cjs/parse-output-error.js +19 -0
- package/dist/lib-cjs/parse-output-error.js.map +1 -0
- package/dist/lib-cjs/parse-output.js +18 -0
- package/dist/lib-cjs/parse-output.js.map +1 -0
- package/dist/lib-cjs/parse-table/analysis/first-follow.js +294 -0
- package/dist/lib-cjs/parse-table/analysis/first-follow.js.map +1 -0
- package/dist/lib-cjs/parse-table/analysis/index.js +9 -0
- package/dist/lib-cjs/parse-table/analysis/index.js.map +1 -0
- package/dist/lib-cjs/parse-table/bnf/bnf-grammar.js +140 -0
- package/dist/lib-cjs/parse-table/bnf/bnf-grammar.js.map +1 -0
- package/dist/lib-cjs/parse-table/bnf/bnf-production.js +3 -0
- package/dist/lib-cjs/parse-table/bnf/bnf-production.js.map +1 -0
- package/dist/lib-cjs/parse-table/bnf/bnf-symbol.js +39 -0
- package/dist/lib-cjs/parse-table/bnf/bnf-symbol.js.map +1 -0
- package/dist/lib-cjs/parse-table/bnf/desugar-ebnf.js +224 -0
- package/dist/lib-cjs/parse-table/bnf/desugar-ebnf.js.map +1 -0
- package/dist/lib-cjs/parse-table/bnf/index.js +13 -0
- package/dist/lib-cjs/parse-table/bnf/index.js.map +1 -0
- package/dist/lib-cjs/parse-table/build-lr-table.js +171 -0
- package/dist/lib-cjs/parse-table/build-lr-table.js.map +1 -0
- package/dist/lib-cjs/parse-table/index.js +49 -0
- package/dist/lib-cjs/parse-table/index.js.map +1 -0
- package/dist/lib-cjs/parse-table/lr-algorithm-error.js +19 -0
- package/dist/lib-cjs/parse-table/lr-algorithm-error.js.map +1 -0
- package/dist/lib-cjs/parse-table/lr-algorithm.js +31 -0
- package/dist/lib-cjs/parse-table/lr-algorithm.js.map +1 -0
- package/dist/lib-cjs/parse-table/lr0/index.js +14 -0
- package/dist/lib-cjs/parse-table/lr0/index.js.map +1 -0
- package/dist/lib-cjs/parse-table/lr0/lr0-item-set.js +286 -0
- package/dist/lib-cjs/parse-table/lr0/lr0-item-set.js.map +1 -0
- package/dist/lib-cjs/parse-table/lr1/index.js +18 -0
- package/dist/lib-cjs/parse-table/lr1/index.js.map +1 -0
- package/dist/lib-cjs/parse-table/lr1/lr1-item-set.js +432 -0
- package/dist/lib-cjs/parse-table/lr1/lr1-item-set.js.map +1 -0
- package/dist/lib-cjs/parse-table/parse-table-build-error.js +24 -0
- package/dist/lib-cjs/parse-table/parse-table-build-error.js.map +1 -0
- package/dist/lib-cjs/parse-table/parse-table-error.js +19 -0
- package/dist/lib-cjs/parse-table/parse-table-error.js.map +1 -0
- package/dist/lib-cjs/parse-table/parse-table-json.js +12 -0
- package/dist/lib-cjs/parse-table/parse-table-json.js.map +1 -0
- package/dist/lib-cjs/parse-table/parse-table.js +345 -0
- package/dist/lib-cjs/parse-table/parse-table.js.map +1 -0
- package/dist/lib-cjs/parse-table/slr/index.js +13 -0
- package/dist/lib-cjs/parse-table/slr/index.js.map +1 -0
- package/dist/lib-cjs/parse-table/slr/parse-action.js +8 -0
- package/dist/lib-cjs/parse-table/slr/parse-action.js.map +1 -0
- package/dist/lib-cjs/parse-table/slr/slr-table.js +18 -0
- package/dist/lib-cjs/parse-table/slr/slr-table.js.map +1 -0
- package/dist/lib-cjs/parse-table/table/index.js +21 -0
- package/dist/lib-cjs/parse-table/table/index.js.map +1 -0
- package/dist/lib-cjs/parse-table/table/lr-parse-table.js +192 -0
- package/dist/lib-cjs/parse-table/table/lr-parse-table.js.map +1 -0
- package/dist/lib-cjs/parse-table/table/parse-action.js +54 -0
- package/dist/lib-cjs/parse-table/table/parse-action.js.map +1 -0
- package/dist/lib-cjs/parse-table/table/table-builder-base.js +153 -0
- package/dist/lib-cjs/parse-table/table/table-builder-base.js.map +1 -0
- package/dist/lib-cjs/parse-table/token-inventory.js +18 -0
- package/dist/lib-cjs/parse-table/token-inventory.js.map +1 -0
- package/dist/lib-cjs/parser-lr.js +143 -0
- package/dist/lib-cjs/parser-lr.js.map +1 -0
- package/dist/lib-cjs/shift-reduce/index.js +11 -0
- package/dist/lib-cjs/shift-reduce/index.js.map +1 -0
- package/dist/lib-cjs/shift-reduce/shift-reduce-engine.js +224 -0
- package/dist/lib-cjs/shift-reduce/shift-reduce-engine.js.map +1 -0
- package/dist/lib-cjs/transform/binding-map.js +82 -0
- package/dist/lib-cjs/transform/binding-map.js.map +1 -0
- package/dist/lib-cjs/transform/cst-transformer.js +480 -0
- package/dist/lib-cjs/transform/cst-transformer.js.map +1 -0
- package/dist/lib-cjs/transform/grammar-fixture.js +109 -0
- package/dist/lib-cjs/transform/grammar-fixture.js.map +1 -0
- package/dist/lib-cjs/transform/index.js +12 -0
- package/dist/lib-cjs/transform/index.js.map +1 -0
- package/docs/grammar.md +80 -0
- package/docs/parser-lr-enhancement-proposals.md +548 -0
- package/grammars/6502.grammar +233 -0
- package/grammars/calc.grammar +30 -0
- package/grammars/ferrite.grammar +991 -0
- package/grammars/fixtures/build-optional/build-optional.grammar +32 -0
- package/grammars/fixtures/build-optional/input.txt +1 -0
- package/grammars/fixtures/comparison-op/comparison-op.grammar +28 -0
- package/grammars/fixtures/comparison-op/input.txt +1 -0
- package/grammars/fixtures/flatten-repeat/flatten-repeat.grammar +28 -0
- package/grammars/fixtures/flatten-repeat/input.txt +1 -0
- package/grammars/fixtures/help-topic/help-topic.grammar +28 -0
- package/grammars/fixtures/help-topic/input.txt +1 -0
- package/grammars/fixtures/let-target/input.txt +1 -0
- package/grammars/fixtures/let-target/let-target.grammar +33 -0
- package/grammars/fixtures/pass-preserves-production/bare-terminal/bare-terminal.grammar +24 -0
- package/grammars/fixtures/pass-preserves-production/bare-terminal/input.txt +1 -0
- package/grammars/fixtures/pass-preserves-production/labeled-variant/input-end-if.txt +1 -0
- package/grammars/fixtures/pass-preserves-production/labeled-variant/input-end.txt +1 -0
- package/grammars/fixtures/pass-preserves-production/labeled-variant/labeled-variant.grammar +24 -0
- package/grammars/fixtures/pass-preserves-production/optional-absent/input.txt +1 -0
- package/grammars/fixtures/pass-preserves-production/optional-absent/optional-absent.grammar +24 -0
- package/grammars/fixtures/pass-preserves-production/optional-present/input.txt +1 -0
- package/grammars/fixtures/pass-preserves-production/optional-present/optional-present.grammar +24 -0
- package/grammars/grammar.grammar +428 -0
- package/grammars/lisp.grammar +95 -0
- package/package.json +10 -5
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseRhsSymbolKey = parseRhsSymbolKey;
|
|
4
|
+
exports.productionSlots = productionSlots;
|
|
5
|
+
exports.repeatSymbolPrefix = repeatSymbolPrefix;
|
|
6
|
+
exports.referenceSlotIndex = referenceSlotIndex;
|
|
7
|
+
/**
|
|
8
|
+
* Parses a serialized production right-hand side symbol key.
|
|
9
|
+
*
|
|
10
|
+
* @param key - Encoded symbol from a parse table production.
|
|
11
|
+
*/
|
|
12
|
+
function parseRhsSymbolKey(key) {
|
|
13
|
+
const bindingMatch = /^\[([A-Za-z_][A-Za-z0-9_]*)\]:(.+)$/.exec(key);
|
|
14
|
+
if (bindingMatch !== null) {
|
|
15
|
+
return {
|
|
16
|
+
binding: bindingMatch[1],
|
|
17
|
+
symbol: bindingMatch[2],
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
if (key.startsWith('"') && key.endsWith('"')) {
|
|
21
|
+
return {
|
|
22
|
+
binding: null,
|
|
23
|
+
symbol: key.slice(1, -1),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
binding: null,
|
|
28
|
+
symbol: key,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Returns indexed slots for one production right-hand side.
|
|
33
|
+
*
|
|
34
|
+
* @param production - Parse table production metadata.
|
|
35
|
+
*/
|
|
36
|
+
function productionSlots(production) {
|
|
37
|
+
return production.rhs.map((key, index) => {
|
|
38
|
+
const parsed = parseRhsSymbolKey(key);
|
|
39
|
+
return {
|
|
40
|
+
index,
|
|
41
|
+
binding: parsed.binding,
|
|
42
|
+
symbol: parsed.symbol,
|
|
43
|
+
};
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Returns the shared `$repeat` prefix for a numbered synthetic repeat symbol or reference.
|
|
48
|
+
*
|
|
49
|
+
* @param name - Repeat non-terminal or transform reference name.
|
|
50
|
+
*/
|
|
51
|
+
function repeatSymbolPrefix(name) {
|
|
52
|
+
const match = /^(.+\$repeat)_\d+$/.exec(name);
|
|
53
|
+
return match?.[1] ?? null;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Finds the child index for a transform reference name.
|
|
57
|
+
*
|
|
58
|
+
* @param production - Parse table production metadata.
|
|
59
|
+
* @param reference - Binding or symbol name from a transform expression.
|
|
60
|
+
*/
|
|
61
|
+
function referenceSlotIndex(production, reference) {
|
|
62
|
+
for (const slot of productionSlots(production)) {
|
|
63
|
+
if (slot.binding === reference) {
|
|
64
|
+
return slot.index;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
for (const slot of productionSlots(production)) {
|
|
68
|
+
if (slot.binding === null && slot.symbol === reference) {
|
|
69
|
+
return slot.index;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const repeatPrefix = repeatSymbolPrefix(reference);
|
|
73
|
+
if (repeatPrefix !== null) {
|
|
74
|
+
for (const slot of productionSlots(production)) {
|
|
75
|
+
if (slot.binding === null && repeatSymbolPrefix(slot.symbol) === repeatPrefix) {
|
|
76
|
+
return slot.index;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=binding-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding-map.js","sourceRoot":"","sources":["../../../src/lib/transform/binding-map.ts"],"names":[],"mappings":";;AAiBA,8CAwBC;AAOD,0CAYC;AAOD,gDAKC;AAQD,gDAmCC;AAvGD;;;;GAIG;AACH,SAAgB,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,SAAgB,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,SAAgB,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,SAAgB,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"}
|
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CstTransformer = void 0;
|
|
4
|
+
exports.transformCst = transformCst;
|
|
5
|
+
exports.describeProductionSlots = describeProductionSlots;
|
|
6
|
+
const ast_node_js_1 = require("../ast/ast-node.js");
|
|
7
|
+
const bnf_grammar_js_1 = require("../parse-table/bnf/bnf-grammar.js");
|
|
8
|
+
const shift_reduce_engine_js_1 = require("../shift-reduce/shift-reduce-engine.js");
|
|
9
|
+
const binding_map_js_1 = require("./binding-map.js");
|
|
10
|
+
/**
|
|
11
|
+
* Applies CST-to-AST transform rules to a concrete syntax tree.
|
|
12
|
+
*/
|
|
13
|
+
class CstTransformer {
|
|
14
|
+
schema;
|
|
15
|
+
table;
|
|
16
|
+
/**
|
|
17
|
+
* Creates a transformer for a transform schema and parse table.
|
|
18
|
+
*
|
|
19
|
+
* @param schema - CST-to-AST rules from the grammar `transform` section.
|
|
20
|
+
* @param table - Parse table supplying production metadata for reference lookup.
|
|
21
|
+
*/
|
|
22
|
+
constructor(schema, table) {
|
|
23
|
+
this.schema = schema;
|
|
24
|
+
this.table = table;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Transforms a concrete syntax tree into an abstract syntax tree.
|
|
28
|
+
*
|
|
29
|
+
* @param cst - Parse tree rooted at the grammar start symbol.
|
|
30
|
+
* @returns Transformed AST, or null when transformation fails.
|
|
31
|
+
*/
|
|
32
|
+
transform(cst) {
|
|
33
|
+
if (cst === null) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
return this.transformNode(cst);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Transforms a CST using a transform schema and parse table.
|
|
40
|
+
*
|
|
41
|
+
* @param cst - Parse tree rooted at the grammar start symbol.
|
|
42
|
+
* @param schema - CST-to-AST rules from the grammar `transform` section.
|
|
43
|
+
* @param table - Parse table supplying production metadata for reference lookup.
|
|
44
|
+
*/
|
|
45
|
+
static transform(cst, schema, table) {
|
|
46
|
+
if (cst === null) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
return new CstTransformer(schema, table).transform(cst);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Transforms one CST node and its descendants.
|
|
53
|
+
*
|
|
54
|
+
* @param node - CST node to transform.
|
|
55
|
+
*/
|
|
56
|
+
transformNode(node) {
|
|
57
|
+
if (node.isTerminal) {
|
|
58
|
+
return node;
|
|
59
|
+
}
|
|
60
|
+
if (node.symbol === bnf_grammar_js_1.AUGMENTED_START_SYMBOL) {
|
|
61
|
+
return node.children.length === 1
|
|
62
|
+
? this.transformNode(node.children[0])
|
|
63
|
+
: null;
|
|
64
|
+
}
|
|
65
|
+
const rule = this.resolveTransformRule(node);
|
|
66
|
+
if (rule === null) {
|
|
67
|
+
return this.defaultTransform(node);
|
|
68
|
+
}
|
|
69
|
+
const alternative = this.findAlternative(rule.alternatives, node);
|
|
70
|
+
if (alternative === null) {
|
|
71
|
+
return this.defaultTransform(node);
|
|
72
|
+
}
|
|
73
|
+
return this.applyExpression(node, alternative.expression);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Applies one transform expression to a CST node.
|
|
77
|
+
*
|
|
78
|
+
* @param node - CST node being transformed.
|
|
79
|
+
* @param expression - Transform expression for the matched alternative.
|
|
80
|
+
*/
|
|
81
|
+
applyExpression(node, expression) {
|
|
82
|
+
switch (expression.kind) {
|
|
83
|
+
case 'drop':
|
|
84
|
+
return null;
|
|
85
|
+
case 'pass':
|
|
86
|
+
return this.applyPass(node, expression.reference);
|
|
87
|
+
case 'build':
|
|
88
|
+
return this.applyBuild(node, expression);
|
|
89
|
+
case 'foldLeft':
|
|
90
|
+
return this.applyFoldLeft(node, expression);
|
|
91
|
+
case 'foldRight':
|
|
92
|
+
return this.applyFoldRight(node, expression);
|
|
93
|
+
case 'flatten':
|
|
94
|
+
return this.applyFlatten(node, expression);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Passes one referenced child through the transform pipeline.
|
|
99
|
+
*
|
|
100
|
+
* @param node - CST node supplying the referenced child.
|
|
101
|
+
* @param reference - Binding or symbol name from a transform expression.
|
|
102
|
+
*/
|
|
103
|
+
applyPass(node, reference) {
|
|
104
|
+
return this.transformReference(node, reference);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Builds an AST node from a `type.#variant(arg, …)` transform.
|
|
108
|
+
*
|
|
109
|
+
* @param node - CST node supplying bound child references.
|
|
110
|
+
* @param expression - Build transform expression.
|
|
111
|
+
*/
|
|
112
|
+
applyBuild(node, expression) {
|
|
113
|
+
const children = [];
|
|
114
|
+
const production = this.productionFor(node);
|
|
115
|
+
if (production === null) {
|
|
116
|
+
for (const reference of expression.arguments) {
|
|
117
|
+
const child = this.transformReference(node, reference);
|
|
118
|
+
if (child === null) {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
children.push(child);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
for (const reference of expression.arguments) {
|
|
126
|
+
const slotIndex = (0, binding_map_js_1.referenceSlotIndex)(production, reference);
|
|
127
|
+
// Skip optional bindings absent from the matched alternative.
|
|
128
|
+
if (slotIndex === null) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const childNode = node.children[slotIndex] ?? null;
|
|
132
|
+
if (childNode === null) {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
if (this.isEpsilonNode(childNode)) {
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
const child = this.transformNode(childNode);
|
|
139
|
+
if (child === null) {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
children.push(child);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return ast_node_js_1.AstNode.rule(expression.typeName, children, (0, shift_reduce_engine_js_1.mergeChildLocations)(children) ?? node.location, expression.variant);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Left-folds repeated infix operators into chained AST nodes.
|
|
149
|
+
*
|
|
150
|
+
* @param node - CST node for one operator application or repeat segment.
|
|
151
|
+
* @param expression - Fold-left transform expression.
|
|
152
|
+
*/
|
|
153
|
+
applyFoldLeft(node, expression) {
|
|
154
|
+
const slots = this.resolveReferences(node, expression.references);
|
|
155
|
+
if (slots === null) {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
const [leftRef, operatorRef, rightRef] = expression.references;
|
|
159
|
+
const left = this.transformReference(node, leftRef);
|
|
160
|
+
const operator = this.transformReference(node, operatorRef);
|
|
161
|
+
const right = this.transformReference(node, rightRef);
|
|
162
|
+
if (left === null || operator === null || right === null) {
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
let acc = this.buildAstNode(expression.typeName, expression.variant, [left, operator, right], node.location);
|
|
166
|
+
let tail = this.findRepeatTail(node, slots);
|
|
167
|
+
while (tail !== null && !this.isEpsilonNode(tail)) {
|
|
168
|
+
const tailSlots = this.resolveReferences(tail, expression.references);
|
|
169
|
+
if (tailSlots === null) {
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
const tailOperator = this.transformReference(tail, operatorRef);
|
|
173
|
+
const tailRight = this.transformReference(tail, rightRef);
|
|
174
|
+
if (tailOperator === null || tailRight === null) {
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
acc = this.buildAstNode(expression.typeName, expression.variant, [acc, tailOperator, tailRight], (0, shift_reduce_engine_js_1.mergeChildLocations)([acc, tailRight]) ?? node.location);
|
|
178
|
+
tail = this.findRepeatTail(tail, tailSlots);
|
|
179
|
+
}
|
|
180
|
+
return acc;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Right-folds repeated infix operators into chained AST nodes.
|
|
184
|
+
*
|
|
185
|
+
* @param node - CST node for one operator application or repeat segment.
|
|
186
|
+
* @param expression - Fold-right transform expression.
|
|
187
|
+
*/
|
|
188
|
+
applyFoldRight(node, expression) {
|
|
189
|
+
const parts = [];
|
|
190
|
+
let current = node;
|
|
191
|
+
while (current !== null && !this.isEpsilonNode(current)) {
|
|
192
|
+
const leftRef = expression.references[0];
|
|
193
|
+
const operatorRef = expression.references[1];
|
|
194
|
+
const rightRef = expression.references[2];
|
|
195
|
+
if (leftRef === undefined || operatorRef === undefined || rightRef === undefined) {
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
const slots = this.resolveReferences(current, expression.references);
|
|
199
|
+
if (slots === null) {
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
const left = this.transformReference(current, leftRef);
|
|
203
|
+
const operator = this.transformReference(current, operatorRef);
|
|
204
|
+
const right = this.transformReference(current, rightRef);
|
|
205
|
+
if (left === null || operator === null || right === null) {
|
|
206
|
+
return null;
|
|
207
|
+
}
|
|
208
|
+
parts.push({ left, operator, right });
|
|
209
|
+
current = this.findRepeatTail(current, slots);
|
|
210
|
+
}
|
|
211
|
+
if (parts.length === 0) {
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
let acc = parts[parts.length - 1]?.right ?? null;
|
|
215
|
+
for (let index = parts.length - 1; index >= 0; index -= 1) {
|
|
216
|
+
const part = parts[index];
|
|
217
|
+
if (part === undefined || acc === null) {
|
|
218
|
+
return null;
|
|
219
|
+
}
|
|
220
|
+
acc = this.buildAstNode(expression.typeName, expression.variant, [part.left, part.operator, acc], (0, shift_reduce_engine_js_1.mergeChildLocations)([part.left, acc]) ?? node.location);
|
|
221
|
+
}
|
|
222
|
+
return acc;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Flattens a `{ head tail }` repetition into one list AST node.
|
|
226
|
+
*
|
|
227
|
+
* @param node - CST node for one repeat segment.
|
|
228
|
+
* @param expression - Flatten transform expression.
|
|
229
|
+
*/
|
|
230
|
+
applyFlatten(node, expression) {
|
|
231
|
+
const items = [];
|
|
232
|
+
let current = node;
|
|
233
|
+
while (current !== null && !this.isEpsilonNode(current)) {
|
|
234
|
+
const head = this.transformFlattenHead(current, expression.head);
|
|
235
|
+
if (head === null) {
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
items.push(head);
|
|
239
|
+
const tail = this.resolveReferenceNode(current, expression.tail);
|
|
240
|
+
if (tail === null || this.isEpsilonNode(tail)) {
|
|
241
|
+
break;
|
|
242
|
+
}
|
|
243
|
+
current = tail;
|
|
244
|
+
}
|
|
245
|
+
return ast_node_js_1.AstNode.rule(expression.typeName, items, (0, shift_reduce_engine_js_1.mergeChildLocations)(items) ?? node.location, expression.variant);
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Resolves the head item for one flatten iteration.
|
|
249
|
+
*
|
|
250
|
+
* @param node - CST node for one list segment or repeat tail.
|
|
251
|
+
* @param headRef - Primary head binding from the flatten expression.
|
|
252
|
+
*/
|
|
253
|
+
transformFlattenHead(node, headRef) {
|
|
254
|
+
const head = this.transformReference(node, headRef);
|
|
255
|
+
if (head !== null) {
|
|
256
|
+
return head;
|
|
257
|
+
}
|
|
258
|
+
const production = this.productionFor(node);
|
|
259
|
+
if (production === null || (0, binding_map_js_1.repeatSymbolPrefix)(production.name) === null) {
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
// Repeat tail segments bind repeated elements under names like `rest`.
|
|
263
|
+
for (const slot of (0, binding_map_js_1.productionSlots)(production)) {
|
|
264
|
+
if (slot.binding === null || slot.binding === headRef) {
|
|
265
|
+
continue;
|
|
266
|
+
}
|
|
267
|
+
if ((0, binding_map_js_1.repeatSymbolPrefix)(slot.symbol) !== null) {
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
const repeated = this.transformReference(node, slot.binding);
|
|
271
|
+
if (repeated !== null) {
|
|
272
|
+
return repeated;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Transforms a CST node without explicit transform rules.
|
|
279
|
+
*
|
|
280
|
+
* @param node - CST node to pass through or unwrap.
|
|
281
|
+
*/
|
|
282
|
+
defaultTransform(node) {
|
|
283
|
+
if (this.isEpsilonNode(node)) {
|
|
284
|
+
return null;
|
|
285
|
+
}
|
|
286
|
+
const children = this.transformChildren(node.children);
|
|
287
|
+
if (children.length === 0) {
|
|
288
|
+
return null;
|
|
289
|
+
}
|
|
290
|
+
// Preserve parse-table productions even when a single child would collapse.
|
|
291
|
+
if (node.productionId !== null) {
|
|
292
|
+
return ast_node_js_1.AstNode.rule(node.symbol, children, (0, shift_reduce_engine_js_1.mergeChildLocations)(children) ?? node.location, node.variant);
|
|
293
|
+
}
|
|
294
|
+
if (children.length === 1) {
|
|
295
|
+
return children[0];
|
|
296
|
+
}
|
|
297
|
+
return ast_node_js_1.AstNode.rule(node.symbol, children, (0, shift_reduce_engine_js_1.mergeChildLocations)(children) ?? node.location, node.variant);
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Transforms and compacts a list of child CST nodes.
|
|
301
|
+
*
|
|
302
|
+
* @param children - Child CST nodes.
|
|
303
|
+
*/
|
|
304
|
+
transformChildren(children) {
|
|
305
|
+
const transformed = [];
|
|
306
|
+
for (const child of children) {
|
|
307
|
+
const node = this.transformNode(child);
|
|
308
|
+
if (node !== null) {
|
|
309
|
+
transformed.push(node);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
return transformed;
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Transforms one referenced child of a CST node.
|
|
316
|
+
*
|
|
317
|
+
* @param node - Parent CST node.
|
|
318
|
+
* @param reference - Binding or symbol name from a transform expression.
|
|
319
|
+
*/
|
|
320
|
+
transformReference(node, reference) {
|
|
321
|
+
const child = this.resolveReferenceNode(node, reference);
|
|
322
|
+
if (child === null) {
|
|
323
|
+
return null;
|
|
324
|
+
}
|
|
325
|
+
return this.transformNode(child);
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Returns the CST child for a transform reference name.
|
|
329
|
+
*
|
|
330
|
+
* @param node - Parent CST node.
|
|
331
|
+
* @param reference - Binding or symbol name from a transform expression.
|
|
332
|
+
*/
|
|
333
|
+
resolveReferenceNode(node, reference) {
|
|
334
|
+
const production = this.productionFor(node);
|
|
335
|
+
if (production !== null) {
|
|
336
|
+
const slotIndex = (0, binding_map_js_1.referenceSlotIndex)(production, reference);
|
|
337
|
+
if (slotIndex !== null) {
|
|
338
|
+
return node.children[slotIndex] ?? null;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
for (const child of node.children) {
|
|
342
|
+
if (child.symbol === reference || child.origin === reference) {
|
|
343
|
+
return child;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
return null;
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Resolves transform references to CST child nodes.
|
|
350
|
+
*
|
|
351
|
+
* @param node - Parent CST node.
|
|
352
|
+
* @param references - Reference names from a transform expression.
|
|
353
|
+
*/
|
|
354
|
+
resolveReferences(node, references) {
|
|
355
|
+
const resolved = [];
|
|
356
|
+
for (const reference of references) {
|
|
357
|
+
const child = this.resolveReferenceNode(node, reference);
|
|
358
|
+
if (child === null) {
|
|
359
|
+
return null;
|
|
360
|
+
}
|
|
361
|
+
resolved.push(child);
|
|
362
|
+
}
|
|
363
|
+
return resolved;
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Returns the recursive tail child for a repeat production node.
|
|
367
|
+
*
|
|
368
|
+
* @param node - Repeat CST node.
|
|
369
|
+
* @param resolved - Resolved reference child nodes.
|
|
370
|
+
*/
|
|
371
|
+
findRepeatTail(node, resolved) {
|
|
372
|
+
const lastChild = node.children[node.children.length - 1];
|
|
373
|
+
if (lastChild !== undefined && (lastChild.symbol === node.symbol || lastChild.origin === node.origin)) {
|
|
374
|
+
return lastChild;
|
|
375
|
+
}
|
|
376
|
+
for (const child of resolved) {
|
|
377
|
+
if (child.symbol === node.symbol || child.origin === node.origin) {
|
|
378
|
+
return child;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
return null;
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Resolves a transform rule for a CST node, aliasing numbered repeat symbols to `$repeat_0`.
|
|
385
|
+
*
|
|
386
|
+
* @param node - CST node being transformed.
|
|
387
|
+
*/
|
|
388
|
+
resolveTransformRule(node) {
|
|
389
|
+
const candidates = [node.symbol];
|
|
390
|
+
if (node.origin !== null && node.origin !== node.symbol) {
|
|
391
|
+
candidates.push(node.origin);
|
|
392
|
+
}
|
|
393
|
+
const repeatPrefix = (0, binding_map_js_1.repeatSymbolPrefix)(node.symbol);
|
|
394
|
+
if (repeatPrefix !== null) {
|
|
395
|
+
candidates.push(`${repeatPrefix}_0`);
|
|
396
|
+
}
|
|
397
|
+
for (const candidate of candidates) {
|
|
398
|
+
const rule = this.schema.rule(candidate);
|
|
399
|
+
if (rule !== null) {
|
|
400
|
+
return rule;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
return null;
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Returns whether a CST node represents an epsilon production.
|
|
407
|
+
*
|
|
408
|
+
* @param node - CST node to test.
|
|
409
|
+
*/
|
|
410
|
+
isEpsilonNode(node) {
|
|
411
|
+
if (node.isTerminal) {
|
|
412
|
+
return false;
|
|
413
|
+
}
|
|
414
|
+
if (node.children.length > 0) {
|
|
415
|
+
return false;
|
|
416
|
+
}
|
|
417
|
+
const production = this.productionFor(node);
|
|
418
|
+
return production !== null && production.rhs.length === 0;
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Returns parse table production metadata for a CST node.
|
|
422
|
+
*
|
|
423
|
+
* @param node - CST node reduced by a known production.
|
|
424
|
+
*/
|
|
425
|
+
productionFor(node) {
|
|
426
|
+
if (node.productionId === null) {
|
|
427
|
+
return null;
|
|
428
|
+
}
|
|
429
|
+
return this.table.production(node.productionId);
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Finds the transform alternative matching a CST node variant.
|
|
433
|
+
*
|
|
434
|
+
* @param alternatives - Transform alternatives for one production.
|
|
435
|
+
* @param node - CST node being transformed.
|
|
436
|
+
*/
|
|
437
|
+
findAlternative(alternatives, node) {
|
|
438
|
+
if (node.variant !== null) {
|
|
439
|
+
const matched = alternatives.find((alternative) => alternative.label === node.variant);
|
|
440
|
+
if (matched !== undefined) {
|
|
441
|
+
return matched;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
if (alternatives.length === 1) {
|
|
445
|
+
return alternatives[0];
|
|
446
|
+
}
|
|
447
|
+
return null;
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Builds an AST interior node from transformed children.
|
|
451
|
+
*
|
|
452
|
+
* @param typeName - AST type name.
|
|
453
|
+
* @param variant - AST variant label.
|
|
454
|
+
* @param children - Transformed child nodes.
|
|
455
|
+
* @param location - Optional source span.
|
|
456
|
+
*/
|
|
457
|
+
buildAstNode(typeName, variant, children, location) {
|
|
458
|
+
return ast_node_js_1.AstNode.rule(typeName, [...children], location, variant);
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
exports.CstTransformer = CstTransformer;
|
|
462
|
+
/**
|
|
463
|
+
* Transforms a CST into an AST using transform rules and production metadata.
|
|
464
|
+
*
|
|
465
|
+
* @param cst - Parse tree rooted at the grammar start symbol.
|
|
466
|
+
* @param schema - CST-to-AST rules from the grammar `transform` section.
|
|
467
|
+
* @param table - Parse table supplying production metadata for reference lookup.
|
|
468
|
+
*/
|
|
469
|
+
function transformCst(cst, schema, table) {
|
|
470
|
+
return CstTransformer.transform(cst, schema, table);
|
|
471
|
+
}
|
|
472
|
+
/**
|
|
473
|
+
* Returns indexed slots for one production, for use in tests and diagnostics.
|
|
474
|
+
*
|
|
475
|
+
* @param production - Parse table production metadata.
|
|
476
|
+
*/
|
|
477
|
+
function describeProductionSlots(production) {
|
|
478
|
+
return (0, binding_map_js_1.productionSlots)(production);
|
|
479
|
+
}
|
|
480
|
+
//# sourceMappingURL=cst-transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cst-transformer.js","sourceRoot":"","sources":["../../../src/lib/transform/cst-transformer.ts"],"names":[],"mappings":"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"}
|