@traqula/core 0.0.23 → 0.0.25
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 +2 -0
- package/dist/cjs/lib/AstCoreFactory.js +181 -149
- package/dist/cjs/lib/AstCoreFactory.js.map +1 -0
- package/dist/cjs/lib/generator-builder/builderTypes.js +2 -15
- package/dist/cjs/lib/generator-builder/builderTypes.js.map +1 -0
- package/dist/cjs/lib/generator-builder/dynamicGenerator.js +209 -200
- package/dist/cjs/lib/generator-builder/dynamicGenerator.js.map +1 -0
- package/dist/cjs/lib/generator-builder/generatorBuilder.js +103 -117
- package/dist/cjs/lib/generator-builder/generatorBuilder.js.map +1 -0
- package/dist/cjs/lib/generator-builder/generatorTypes.js +2 -15
- package/dist/cjs/lib/generator-builder/generatorTypes.js.map +1 -0
- package/dist/cjs/lib/index.js +39 -57
- package/dist/cjs/lib/index.js.map +1 -0
- package/dist/cjs/lib/indirection-builder/IndirBuilder.js +63 -85
- package/dist/cjs/lib/indirection-builder/IndirBuilder.js.map +1 -0
- package/dist/cjs/lib/indirection-builder/dynamicIndirected.js +28 -50
- package/dist/cjs/lib/indirection-builder/dynamicIndirected.js.map +1 -0
- package/dist/cjs/lib/indirection-builder/helpers.js +11 -31
- package/dist/cjs/lib/indirection-builder/helpers.js.map +1 -0
- package/dist/cjs/lib/lexer-builder/LexerBuilder.js +92 -114
- package/dist/cjs/lib/lexer-builder/LexerBuilder.js.map +1 -0
- package/dist/cjs/lib/parser-builder/builderTypes.js +2 -15
- package/dist/cjs/lib/parser-builder/builderTypes.js.map +1 -0
- package/dist/cjs/lib/parser-builder/dynamicParser.js +116 -136
- package/dist/cjs/lib/parser-builder/dynamicParser.js.map +1 -0
- package/dist/cjs/lib/parser-builder/parserBuilder.js +167 -169
- package/dist/cjs/lib/parser-builder/parserBuilder.js.map +1 -0
- package/dist/cjs/lib/parser-builder/ruleDefTypes.js +2 -15
- package/dist/cjs/lib/parser-builder/ruleDefTypes.js.map +1 -0
- package/dist/cjs/lib/transformers/TransformerObject.js +196 -198
- package/dist/cjs/lib/transformers/TransformerObject.js.map +1 -0
- package/dist/cjs/lib/transformers/TransformerSubTyped.js +110 -141
- package/dist/cjs/lib/transformers/TransformerSubTyped.js.map +1 -0
- package/dist/cjs/lib/transformers/TransformerTyped.js +87 -120
- package/dist/cjs/lib/transformers/TransformerTyped.js.map +1 -0
- package/dist/cjs/lib/types.js +2 -15
- package/dist/cjs/lib/types.js.map +1 -0
- package/dist/cjs/lib/utils.js +20 -34
- package/dist/cjs/lib/utils.js.map +1 -0
- package/dist/esm/lib/AstCoreFactory.d.ts +19 -7
- package/dist/esm/lib/AstCoreFactory.js +50 -5
- package/dist/esm/lib/AstCoreFactory.js.map +1 -1
- package/dist/esm/lib/generator-builder/dynamicGenerator.d.ts +5 -0
- package/dist/esm/lib/generator-builder/dynamicGenerator.js +20 -0
- package/dist/esm/lib/generator-builder/dynamicGenerator.js.map +1 -1
- package/dist/esm/lib/parser-builder/dynamicParser.js +1 -0
- package/dist/esm/lib/parser-builder/dynamicParser.js.map +1 -1
- package/dist/esm/lib/parser-builder/parserBuilder.js +2 -2
- package/dist/esm/lib/parser-builder/parserBuilder.js.map +1 -1
- package/dist/esm/lib/transformers/TransformerObject.d.ts +1 -1
- package/dist/esm/lib/transformers/TransformerObject.js.map +1 -1
- package/dist/esm/lib/transformers/TransformerSubTyped.d.ts +31 -22
- package/dist/esm/lib/transformers/TransformerSubTyped.js +30 -40
- package/dist/esm/lib/transformers/TransformerSubTyped.js.map +1 -1
- package/dist/esm/lib/transformers/TransformerTyped.d.ts +24 -20
- package/dist/esm/lib/transformers/TransformerTyped.js +23 -35
- package/dist/esm/lib/transformers/TransformerTyped.js.map +1 -1
- package/dist/esm/lib/types.d.ts +67 -5
- package/dist/esm/lib/types.js.map +1 -1
- package/dist/esm/lib/utils.d.ts +10 -0
- package/dist/esm/lib/utils.js +7 -0
- package/dist/esm/lib/utils.js.map +1 -1
- package/package.json +9 -9
- package/dist/cjs/test/generatorBuilder/generatorBuilder.types.test.js +0 -30
- package/dist/cjs/test/grammar-builder/parserBuilder.types.test.js +0 -27
- package/dist/cjs/test/transformer.test.js +0 -82
- package/dist/esm/test/generatorBuilder/generatorBuilder.types.test.d.ts +0 -1
- package/dist/esm/test/generatorBuilder/generatorBuilder.types.test.js +0 -38
- package/dist/esm/test/generatorBuilder/generatorBuilder.types.test.js.map +0 -1
- package/dist/esm/test/grammar-builder/parserBuilder.types.test.d.ts +0 -1
- package/dist/esm/test/grammar-builder/parserBuilder.types.test.js +0 -38
- package/dist/esm/test/grammar-builder/parserBuilder.types.test.js.map +0 -1
- package/dist/esm/test/transformer.test.d.ts +0 -1
- package/dist/esm/test/transformer.test.js +0 -82
- package/dist/esm/test/transformer.test.js.map +0 -1
|
@@ -1,139 +1,119 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DynamicParser = void 0;
|
|
4
|
+
const chevrotain_1 = require("@traqula/chevrotain");
|
|
5
|
+
class DynamicParser extends chevrotain_1.EmbeddedActionsParser {
|
|
6
|
+
context;
|
|
7
|
+
setContext(context) {
|
|
8
|
+
this.context = context;
|
|
9
|
+
}
|
|
10
|
+
constructor(rules, tokenVocabulary, config = {}) {
|
|
11
|
+
super(tokenVocabulary, {
|
|
12
|
+
// RecoveryEnabled: true,
|
|
13
|
+
maxLookahead: 1,
|
|
14
|
+
skipValidations: true,
|
|
15
|
+
dynamicTokensEnabled: false,
|
|
16
|
+
...config,
|
|
17
|
+
});
|
|
18
|
+
this.context = undefined;
|
|
19
|
+
const selfRef = this.constructSelfRef();
|
|
20
|
+
const implArgs = {
|
|
21
|
+
...selfRef,
|
|
22
|
+
cache: new WeakMap(),
|
|
23
|
+
};
|
|
24
|
+
for (const rule of Object.values(rules)) {
|
|
25
|
+
// Function implementation itself - this function is called AFTER lexing
|
|
26
|
+
this[rule.name] = this.RULE(rule.name, rule.impl(implArgs));
|
|
27
|
+
}
|
|
28
|
+
this.performSelfAnalysis();
|
|
29
|
+
}
|
|
30
|
+
constructSelfRef() {
|
|
31
|
+
const subRuleImpl = (chevrotainSubrule) => ((cstDef, ...arg) => chevrotainSubrule(this[cstDef.name], { ARGS: [this.context, ...arg] }));
|
|
32
|
+
return {
|
|
33
|
+
CONSUME: (tokenType, option) => this.CONSUME(tokenType, option),
|
|
34
|
+
CONSUME1: (tokenType, option) => this.CONSUME1(tokenType, option),
|
|
35
|
+
CONSUME2: (tokenType, option) => this.CONSUME2(tokenType, option),
|
|
36
|
+
CONSUME3: (tokenType, option) => this.CONSUME3(tokenType, option),
|
|
37
|
+
CONSUME4: (tokenType, option) => this.CONSUME4(tokenType, option),
|
|
38
|
+
CONSUME5: (tokenType, option) => this.CONSUME5(tokenType, option),
|
|
39
|
+
CONSUME6: (tokenType, option) => this.CONSUME6(tokenType, option),
|
|
40
|
+
CONSUME7: (tokenType, option) => this.CONSUME7(tokenType, option),
|
|
41
|
+
CONSUME8: (tokenType, option) => this.CONSUME8(tokenType, option),
|
|
42
|
+
CONSUME9: (tokenType, option) => this.CONSUME9(tokenType, option),
|
|
43
|
+
OPTION: actionORMethodDef => this.OPTION(actionORMethodDef),
|
|
44
|
+
OPTION1: actionORMethodDef => this.OPTION1(actionORMethodDef),
|
|
45
|
+
OPTION2: actionORMethodDef => this.OPTION2(actionORMethodDef),
|
|
46
|
+
OPTION3: actionORMethodDef => this.OPTION3(actionORMethodDef),
|
|
47
|
+
OPTION4: actionORMethodDef => this.OPTION4(actionORMethodDef),
|
|
48
|
+
OPTION5: actionORMethodDef => this.OPTION5(actionORMethodDef),
|
|
49
|
+
OPTION6: actionORMethodDef => this.OPTION6(actionORMethodDef),
|
|
50
|
+
OPTION7: actionORMethodDef => this.OPTION7(actionORMethodDef),
|
|
51
|
+
OPTION8: actionORMethodDef => this.OPTION8(actionORMethodDef),
|
|
52
|
+
OPTION9: actionORMethodDef => this.OPTION9(actionORMethodDef),
|
|
53
|
+
OR: altsOrOpts => this.OR(altsOrOpts),
|
|
54
|
+
OR1: altsOrOpts => this.OR1(altsOrOpts),
|
|
55
|
+
OR2: altsOrOpts => this.OR2(altsOrOpts),
|
|
56
|
+
OR3: altsOrOpts => this.OR3(altsOrOpts),
|
|
57
|
+
OR4: altsOrOpts => this.OR4(altsOrOpts),
|
|
58
|
+
OR5: altsOrOpts => this.OR5(altsOrOpts),
|
|
59
|
+
OR6: altsOrOpts => this.OR6(altsOrOpts),
|
|
60
|
+
OR7: altsOrOpts => this.OR7(altsOrOpts),
|
|
61
|
+
OR8: altsOrOpts => this.OR8(altsOrOpts),
|
|
62
|
+
OR9: altsOrOpts => this.OR9(altsOrOpts),
|
|
63
|
+
MANY: actionORMethodDef => this.MANY(actionORMethodDef),
|
|
64
|
+
MANY1: actionORMethodDef => this.MANY1(actionORMethodDef),
|
|
65
|
+
MANY2: actionORMethodDef => this.MANY2(actionORMethodDef),
|
|
66
|
+
MANY3: actionORMethodDef => this.MANY3(actionORMethodDef),
|
|
67
|
+
MANY4: actionORMethodDef => this.MANY4(actionORMethodDef),
|
|
68
|
+
MANY5: actionORMethodDef => this.MANY5(actionORMethodDef),
|
|
69
|
+
MANY6: actionORMethodDef => this.MANY6(actionORMethodDef),
|
|
70
|
+
MANY7: actionORMethodDef => this.MANY7(actionORMethodDef),
|
|
71
|
+
MANY8: actionORMethodDef => this.MANY8(actionORMethodDef),
|
|
72
|
+
MANY9: actionORMethodDef => this.MANY9(actionORMethodDef),
|
|
73
|
+
MANY_SEP: options => this.MANY_SEP(options),
|
|
74
|
+
MANY_SEP1: options => this.MANY_SEP1(options),
|
|
75
|
+
MANY_SEP2: options => this.MANY_SEP2(options),
|
|
76
|
+
MANY_SEP3: options => this.MANY_SEP3(options),
|
|
77
|
+
MANY_SEP4: options => this.MANY_SEP4(options),
|
|
78
|
+
MANY_SEP5: options => this.MANY_SEP5(options),
|
|
79
|
+
MANY_SEP6: options => this.MANY_SEP6(options),
|
|
80
|
+
MANY_SEP7: options => this.MANY_SEP7(options),
|
|
81
|
+
MANY_SEP8: options => this.MANY_SEP8(options),
|
|
82
|
+
MANY_SEP9: options => this.MANY_SEP9(options),
|
|
83
|
+
AT_LEAST_ONE: actionORMethodDef => this.AT_LEAST_ONE(actionORMethodDef),
|
|
84
|
+
AT_LEAST_ONE1: actionORMethodDef => this.AT_LEAST_ONE1(actionORMethodDef),
|
|
85
|
+
AT_LEAST_ONE2: actionORMethodDef => this.AT_LEAST_ONE2(actionORMethodDef),
|
|
86
|
+
AT_LEAST_ONE3: actionORMethodDef => this.AT_LEAST_ONE3(actionORMethodDef),
|
|
87
|
+
AT_LEAST_ONE4: actionORMethodDef => this.AT_LEAST_ONE4(actionORMethodDef),
|
|
88
|
+
AT_LEAST_ONE5: actionORMethodDef => this.AT_LEAST_ONE5(actionORMethodDef),
|
|
89
|
+
AT_LEAST_ONE6: actionORMethodDef => this.AT_LEAST_ONE6(actionORMethodDef),
|
|
90
|
+
AT_LEAST_ONE7: actionORMethodDef => this.AT_LEAST_ONE7(actionORMethodDef),
|
|
91
|
+
AT_LEAST_ONE8: actionORMethodDef => this.AT_LEAST_ONE8(actionORMethodDef),
|
|
92
|
+
AT_LEAST_ONE9: actionORMethodDef => this.AT_LEAST_ONE9(actionORMethodDef),
|
|
93
|
+
AT_LEAST_ONE_SEP: options => this.AT_LEAST_ONE_SEP(options),
|
|
94
|
+
AT_LEAST_ONE_SEP1: options => this.AT_LEAST_ONE_SEP1(options),
|
|
95
|
+
AT_LEAST_ONE_SEP2: options => this.AT_LEAST_ONE_SEP2(options),
|
|
96
|
+
AT_LEAST_ONE_SEP3: options => this.AT_LEAST_ONE_SEP3(options),
|
|
97
|
+
AT_LEAST_ONE_SEP4: options => this.AT_LEAST_ONE_SEP4(options),
|
|
98
|
+
AT_LEAST_ONE_SEP5: options => this.AT_LEAST_ONE_SEP5(options),
|
|
99
|
+
AT_LEAST_ONE_SEP6: options => this.AT_LEAST_ONE_SEP6(options),
|
|
100
|
+
AT_LEAST_ONE_SEP7: options => this.AT_LEAST_ONE_SEP7(options),
|
|
101
|
+
AT_LEAST_ONE_SEP8: options => this.AT_LEAST_ONE_SEP8(options),
|
|
102
|
+
AT_LEAST_ONE_SEP9: options => this.AT_LEAST_ONE_SEP9(options),
|
|
103
|
+
ACTION: func => this.ACTION(func),
|
|
104
|
+
BACKTRACK: (cstDef, ...args) => this.BACKTRACK(this[cstDef.name], { ARGS: args }),
|
|
105
|
+
SUBRULE: subRuleImpl((rule, args) => this.SUBRULE(rule, args)),
|
|
106
|
+
SUBRULE1: subRuleImpl((rule, args) => this.SUBRULE1(rule, args)),
|
|
107
|
+
SUBRULE2: subRuleImpl((rule, args) => this.SUBRULE2(rule, args)),
|
|
108
|
+
SUBRULE3: subRuleImpl((rule, args) => this.SUBRULE3(rule, args)),
|
|
109
|
+
SUBRULE4: subRuleImpl((rule, args) => this.SUBRULE4(rule, args)),
|
|
110
|
+
SUBRULE5: subRuleImpl((rule, args) => this.SUBRULE5(rule, args)),
|
|
111
|
+
SUBRULE6: subRuleImpl((rule, args) => this.SUBRULE6(rule, args)),
|
|
112
|
+
SUBRULE7: subRuleImpl((rule, args) => this.SUBRULE7(rule, args)),
|
|
113
|
+
SUBRULE8: subRuleImpl((rule, args) => this.SUBRULE8(rule, args)),
|
|
114
|
+
SUBRULE9: subRuleImpl((rule, args) => this.SUBRULE9(rule, args)),
|
|
115
|
+
};
|
|
45
116
|
}
|
|
46
|
-
this.performSelfAnalysis();
|
|
47
|
-
}
|
|
48
|
-
constructSelfRef() {
|
|
49
|
-
const subRuleImpl = (chevrotainSubrule) => ((cstDef, ...arg) => chevrotainSubrule(this[cstDef.name], { ARGS: [this.context, ...arg] }));
|
|
50
|
-
return {
|
|
51
|
-
CONSUME: (tokenType, option) => this.CONSUME(tokenType, option),
|
|
52
|
-
CONSUME1: (tokenType, option) => this.CONSUME1(tokenType, option),
|
|
53
|
-
CONSUME2: (tokenType, option) => this.CONSUME2(tokenType, option),
|
|
54
|
-
CONSUME3: (tokenType, option) => this.CONSUME3(tokenType, option),
|
|
55
|
-
CONSUME4: (tokenType, option) => this.CONSUME4(tokenType, option),
|
|
56
|
-
CONSUME5: (tokenType, option) => this.CONSUME5(tokenType, option),
|
|
57
|
-
CONSUME6: (tokenType, option) => this.CONSUME6(tokenType, option),
|
|
58
|
-
CONSUME7: (tokenType, option) => this.CONSUME7(tokenType, option),
|
|
59
|
-
CONSUME8: (tokenType, option) => this.CONSUME8(tokenType, option),
|
|
60
|
-
CONSUME9: (tokenType, option) => this.CONSUME9(tokenType, option),
|
|
61
|
-
OPTION: (actionORMethodDef) => this.OPTION(actionORMethodDef),
|
|
62
|
-
OPTION1: (actionORMethodDef) => this.OPTION1(actionORMethodDef),
|
|
63
|
-
OPTION2: (actionORMethodDef) => this.OPTION2(actionORMethodDef),
|
|
64
|
-
OPTION3: (actionORMethodDef) => this.OPTION3(actionORMethodDef),
|
|
65
|
-
OPTION4: (actionORMethodDef) => this.OPTION4(actionORMethodDef),
|
|
66
|
-
OPTION5: (actionORMethodDef) => this.OPTION5(actionORMethodDef),
|
|
67
|
-
OPTION6: (actionORMethodDef) => this.OPTION6(actionORMethodDef),
|
|
68
|
-
OPTION7: (actionORMethodDef) => this.OPTION7(actionORMethodDef),
|
|
69
|
-
OPTION8: (actionORMethodDef) => this.OPTION8(actionORMethodDef),
|
|
70
|
-
OPTION9: (actionORMethodDef) => this.OPTION9(actionORMethodDef),
|
|
71
|
-
OR: (altsOrOpts) => this.OR(altsOrOpts),
|
|
72
|
-
OR1: (altsOrOpts) => this.OR1(altsOrOpts),
|
|
73
|
-
OR2: (altsOrOpts) => this.OR2(altsOrOpts),
|
|
74
|
-
OR3: (altsOrOpts) => this.OR3(altsOrOpts),
|
|
75
|
-
OR4: (altsOrOpts) => this.OR4(altsOrOpts),
|
|
76
|
-
OR5: (altsOrOpts) => this.OR5(altsOrOpts),
|
|
77
|
-
OR6: (altsOrOpts) => this.OR6(altsOrOpts),
|
|
78
|
-
OR7: (altsOrOpts) => this.OR7(altsOrOpts),
|
|
79
|
-
OR8: (altsOrOpts) => this.OR8(altsOrOpts),
|
|
80
|
-
OR9: (altsOrOpts) => this.OR9(altsOrOpts),
|
|
81
|
-
MANY: (actionORMethodDef) => this.MANY(actionORMethodDef),
|
|
82
|
-
MANY1: (actionORMethodDef) => this.MANY1(actionORMethodDef),
|
|
83
|
-
MANY2: (actionORMethodDef) => this.MANY2(actionORMethodDef),
|
|
84
|
-
MANY3: (actionORMethodDef) => this.MANY3(actionORMethodDef),
|
|
85
|
-
MANY4: (actionORMethodDef) => this.MANY4(actionORMethodDef),
|
|
86
|
-
MANY5: (actionORMethodDef) => this.MANY5(actionORMethodDef),
|
|
87
|
-
MANY6: (actionORMethodDef) => this.MANY6(actionORMethodDef),
|
|
88
|
-
MANY7: (actionORMethodDef) => this.MANY7(actionORMethodDef),
|
|
89
|
-
MANY8: (actionORMethodDef) => this.MANY8(actionORMethodDef),
|
|
90
|
-
MANY9: (actionORMethodDef) => this.MANY9(actionORMethodDef),
|
|
91
|
-
MANY_SEP: (options) => this.MANY_SEP(options),
|
|
92
|
-
MANY_SEP1: (options) => this.MANY_SEP1(options),
|
|
93
|
-
MANY_SEP2: (options) => this.MANY_SEP2(options),
|
|
94
|
-
MANY_SEP3: (options) => this.MANY_SEP3(options),
|
|
95
|
-
MANY_SEP4: (options) => this.MANY_SEP4(options),
|
|
96
|
-
MANY_SEP5: (options) => this.MANY_SEP5(options),
|
|
97
|
-
MANY_SEP6: (options) => this.MANY_SEP6(options),
|
|
98
|
-
MANY_SEP7: (options) => this.MANY_SEP7(options),
|
|
99
|
-
MANY_SEP8: (options) => this.MANY_SEP8(options),
|
|
100
|
-
MANY_SEP9: (options) => this.MANY_SEP9(options),
|
|
101
|
-
AT_LEAST_ONE: (actionORMethodDef) => this.AT_LEAST_ONE(actionORMethodDef),
|
|
102
|
-
AT_LEAST_ONE1: (actionORMethodDef) => this.AT_LEAST_ONE1(actionORMethodDef),
|
|
103
|
-
AT_LEAST_ONE2: (actionORMethodDef) => this.AT_LEAST_ONE2(actionORMethodDef),
|
|
104
|
-
AT_LEAST_ONE3: (actionORMethodDef) => this.AT_LEAST_ONE3(actionORMethodDef),
|
|
105
|
-
AT_LEAST_ONE4: (actionORMethodDef) => this.AT_LEAST_ONE4(actionORMethodDef),
|
|
106
|
-
AT_LEAST_ONE5: (actionORMethodDef) => this.AT_LEAST_ONE5(actionORMethodDef),
|
|
107
|
-
AT_LEAST_ONE6: (actionORMethodDef) => this.AT_LEAST_ONE6(actionORMethodDef),
|
|
108
|
-
AT_LEAST_ONE7: (actionORMethodDef) => this.AT_LEAST_ONE7(actionORMethodDef),
|
|
109
|
-
AT_LEAST_ONE8: (actionORMethodDef) => this.AT_LEAST_ONE8(actionORMethodDef),
|
|
110
|
-
AT_LEAST_ONE9: (actionORMethodDef) => this.AT_LEAST_ONE9(actionORMethodDef),
|
|
111
|
-
AT_LEAST_ONE_SEP: (options) => this.AT_LEAST_ONE_SEP(options),
|
|
112
|
-
AT_LEAST_ONE_SEP1: (options) => this.AT_LEAST_ONE_SEP1(options),
|
|
113
|
-
AT_LEAST_ONE_SEP2: (options) => this.AT_LEAST_ONE_SEP2(options),
|
|
114
|
-
AT_LEAST_ONE_SEP3: (options) => this.AT_LEAST_ONE_SEP3(options),
|
|
115
|
-
AT_LEAST_ONE_SEP4: (options) => this.AT_LEAST_ONE_SEP4(options),
|
|
116
|
-
AT_LEAST_ONE_SEP5: (options) => this.AT_LEAST_ONE_SEP5(options),
|
|
117
|
-
AT_LEAST_ONE_SEP6: (options) => this.AT_LEAST_ONE_SEP6(options),
|
|
118
|
-
AT_LEAST_ONE_SEP7: (options) => this.AT_LEAST_ONE_SEP7(options),
|
|
119
|
-
AT_LEAST_ONE_SEP8: (options) => this.AT_LEAST_ONE_SEP8(options),
|
|
120
|
-
AT_LEAST_ONE_SEP9: (options) => this.AT_LEAST_ONE_SEP9(options),
|
|
121
|
-
ACTION: (func) => this.ACTION(func),
|
|
122
|
-
BACKTRACK: (cstDef, ...args) => this.BACKTRACK(this[cstDef.name], { ARGS: args }),
|
|
123
|
-
SUBRULE: subRuleImpl((rule, args) => this.SUBRULE(rule, args)),
|
|
124
|
-
SUBRULE1: subRuleImpl((rule, args) => this.SUBRULE1(rule, args)),
|
|
125
|
-
SUBRULE2: subRuleImpl((rule, args) => this.SUBRULE2(rule, args)),
|
|
126
|
-
SUBRULE3: subRuleImpl((rule, args) => this.SUBRULE3(rule, args)),
|
|
127
|
-
SUBRULE4: subRuleImpl((rule, args) => this.SUBRULE4(rule, args)),
|
|
128
|
-
SUBRULE5: subRuleImpl((rule, args) => this.SUBRULE5(rule, args)),
|
|
129
|
-
SUBRULE6: subRuleImpl((rule, args) => this.SUBRULE6(rule, args)),
|
|
130
|
-
SUBRULE7: subRuleImpl((rule, args) => this.SUBRULE7(rule, args)),
|
|
131
|
-
SUBRULE8: subRuleImpl((rule, args) => this.SUBRULE8(rule, args)),
|
|
132
|
-
SUBRULE9: subRuleImpl((rule, args) => this.SUBRULE9(rule, args))
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
117
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
DynamicParser
|
|
139
|
-
});
|
|
118
|
+
exports.DynamicParser = DynamicParser;
|
|
119
|
+
//# sourceMappingURL=dynamicParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamicParser.js","sourceRoot":"","sources":["../../../../lib/parser-builder/dynamicParser.ts"],"names":[],"mappings":"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","sourcesContent":["import { EmbeddedActionsParser } from '@traqula/chevrotain';\nimport type { IParserConfig, TokenVocabulary } from '@traqula/chevrotain';\nimport type { ParseRuleMap } from './builderTypes.js';\nimport type { CstDef, ImplArgs, ParserRule } from './ruleDefTypes.js';\n\nexport class DynamicParser<Context, Names extends string, RuleDefs extends ParseRuleMap<Names>>\n extends EmbeddedActionsParser {\n private context: Context | undefined;\n\n public setContext(context: Context): void {\n this.context = context;\n }\n\n public constructor(rules: RuleDefs, tokenVocabulary: TokenVocabulary, config: IParserConfig = {}) {\n super(tokenVocabulary, {\n // RecoveryEnabled: true,\n maxLookahead: 1,\n skipValidations: true,\n dynamicTokensEnabled: false,\n ...config,\n });\n this.context = undefined;\n const selfRef = this.constructSelfRef();\n const implArgs: ImplArgs = {\n ...selfRef,\n cache: new WeakMap(),\n };\n\n for (const rule of Object.values(<Record<string, ParserRule<Context>>>rules)) {\n // Function implementation itself - this function is called AFTER lexing\n this[<keyof (typeof this)>rule.name] = <any> this.RULE(rule.name, rule.impl(implArgs));\n }\n this.performSelfAnalysis();\n }\n\n private constructSelfRef(): CstDef {\n const subRuleImpl = (chevrotainSubrule: typeof this.SUBRULE): CstDef['SUBRULE'] =>\n ((cstDef, ...arg) =>\n chevrotainSubrule(<any> this[<keyof (typeof this)>cstDef.name], <any>{ ARGS: [ this.context, ...arg ]})\n ) satisfies CstDef['SUBRULE'];\n return {\n CONSUME: (tokenType, option) => this.CONSUME(tokenType, option),\n CONSUME1: (tokenType, option) => this.CONSUME1(tokenType, option),\n CONSUME2: (tokenType, option) => this.CONSUME2(tokenType, option),\n CONSUME3: (tokenType, option) => this.CONSUME3(tokenType, option),\n CONSUME4: (tokenType, option) => this.CONSUME4(tokenType, option),\n CONSUME5: (tokenType, option) => this.CONSUME5(tokenType, option),\n CONSUME6: (tokenType, option) => this.CONSUME6(tokenType, option),\n CONSUME7: (tokenType, option) => this.CONSUME7(tokenType, option),\n CONSUME8: (tokenType, option) => this.CONSUME8(tokenType, option),\n CONSUME9: (tokenType, option) => this.CONSUME9(tokenType, option),\n OPTION: actionORMethodDef => this.OPTION(actionORMethodDef),\n OPTION1: actionORMethodDef => this.OPTION1(actionORMethodDef),\n OPTION2: actionORMethodDef => this.OPTION2(actionORMethodDef),\n OPTION3: actionORMethodDef => this.OPTION3(actionORMethodDef),\n OPTION4: actionORMethodDef => this.OPTION4(actionORMethodDef),\n OPTION5: actionORMethodDef => this.OPTION5(actionORMethodDef),\n OPTION6: actionORMethodDef => this.OPTION6(actionORMethodDef),\n OPTION7: actionORMethodDef => this.OPTION7(actionORMethodDef),\n OPTION8: actionORMethodDef => this.OPTION8(actionORMethodDef),\n OPTION9: actionORMethodDef => this.OPTION9(actionORMethodDef),\n OR: altsOrOpts => this.OR(altsOrOpts),\n OR1: altsOrOpts => this.OR1(altsOrOpts),\n OR2: altsOrOpts => this.OR2(altsOrOpts),\n OR3: altsOrOpts => this.OR3(altsOrOpts),\n OR4: altsOrOpts => this.OR4(altsOrOpts),\n OR5: altsOrOpts => this.OR5(altsOrOpts),\n OR6: altsOrOpts => this.OR6(altsOrOpts),\n OR7: altsOrOpts => this.OR7(altsOrOpts),\n OR8: altsOrOpts => this.OR8(altsOrOpts),\n OR9: altsOrOpts => this.OR9(altsOrOpts),\n MANY: actionORMethodDef => this.MANY(actionORMethodDef),\n MANY1: actionORMethodDef => this.MANY1(actionORMethodDef),\n MANY2: actionORMethodDef => this.MANY2(actionORMethodDef),\n MANY3: actionORMethodDef => this.MANY3(actionORMethodDef),\n MANY4: actionORMethodDef => this.MANY4(actionORMethodDef),\n MANY5: actionORMethodDef => this.MANY5(actionORMethodDef),\n MANY6: actionORMethodDef => this.MANY6(actionORMethodDef),\n MANY7: actionORMethodDef => this.MANY7(actionORMethodDef),\n MANY8: actionORMethodDef => this.MANY8(actionORMethodDef),\n MANY9: actionORMethodDef => this.MANY9(actionORMethodDef),\n MANY_SEP: options => this.MANY_SEP(options),\n MANY_SEP1: options => this.MANY_SEP1(options),\n MANY_SEP2: options => this.MANY_SEP2(options),\n MANY_SEP3: options => this.MANY_SEP3(options),\n MANY_SEP4: options => this.MANY_SEP4(options),\n MANY_SEP5: options => this.MANY_SEP5(options),\n MANY_SEP6: options => this.MANY_SEP6(options),\n MANY_SEP7: options => this.MANY_SEP7(options),\n MANY_SEP8: options => this.MANY_SEP8(options),\n MANY_SEP9: options => this.MANY_SEP9(options),\n AT_LEAST_ONE: actionORMethodDef => this.AT_LEAST_ONE(actionORMethodDef),\n AT_LEAST_ONE1: actionORMethodDef => this.AT_LEAST_ONE1(actionORMethodDef),\n AT_LEAST_ONE2: actionORMethodDef => this.AT_LEAST_ONE2(actionORMethodDef),\n AT_LEAST_ONE3: actionORMethodDef => this.AT_LEAST_ONE3(actionORMethodDef),\n AT_LEAST_ONE4: actionORMethodDef => this.AT_LEAST_ONE4(actionORMethodDef),\n AT_LEAST_ONE5: actionORMethodDef => this.AT_LEAST_ONE5(actionORMethodDef),\n AT_LEAST_ONE6: actionORMethodDef => this.AT_LEAST_ONE6(actionORMethodDef),\n AT_LEAST_ONE7: actionORMethodDef => this.AT_LEAST_ONE7(actionORMethodDef),\n AT_LEAST_ONE8: actionORMethodDef => this.AT_LEAST_ONE8(actionORMethodDef),\n AT_LEAST_ONE9: actionORMethodDef => this.AT_LEAST_ONE9(actionORMethodDef),\n AT_LEAST_ONE_SEP: options => this.AT_LEAST_ONE_SEP(options),\n AT_LEAST_ONE_SEP1: options => this.AT_LEAST_ONE_SEP1(options),\n AT_LEAST_ONE_SEP2: options => this.AT_LEAST_ONE_SEP2(options),\n AT_LEAST_ONE_SEP3: options => this.AT_LEAST_ONE_SEP3(options),\n AT_LEAST_ONE_SEP4: options => this.AT_LEAST_ONE_SEP4(options),\n AT_LEAST_ONE_SEP5: options => this.AT_LEAST_ONE_SEP5(options),\n AT_LEAST_ONE_SEP6: options => this.AT_LEAST_ONE_SEP6(options),\n AT_LEAST_ONE_SEP7: options => this.AT_LEAST_ONE_SEP7(options),\n AT_LEAST_ONE_SEP8: options => this.AT_LEAST_ONE_SEP8(options),\n AT_LEAST_ONE_SEP9: options => this.AT_LEAST_ONE_SEP9(options),\n ACTION: func => this.ACTION(func),\n BACKTRACK: (cstDef, ...args) =>\n this.BACKTRACK(<any> this[<keyof (typeof this)>cstDef.name], <any>{ ARGS: args }),\n SUBRULE: subRuleImpl((rule, args) => this.SUBRULE(rule, args)),\n SUBRULE1: subRuleImpl((rule, args) => this.SUBRULE1(rule, args)),\n SUBRULE2: subRuleImpl((rule, args) => this.SUBRULE2(rule, args)),\n SUBRULE3: subRuleImpl((rule, args) => this.SUBRULE3(rule, args)),\n SUBRULE4: subRuleImpl((rule, args) => this.SUBRULE4(rule, args)),\n SUBRULE5: subRuleImpl((rule, args) => this.SUBRULE5(rule, args)),\n SUBRULE6: subRuleImpl((rule, args) => this.SUBRULE6(rule, args)),\n SUBRULE7: subRuleImpl((rule, args) => this.SUBRULE7(rule, args)),\n SUBRULE8: subRuleImpl((rule, args) => this.SUBRULE8(rule, args)),\n SUBRULE9: subRuleImpl((rule, args) => this.SUBRULE9(rule, args)),\n };\n }\n}\n"]}
|
|
@@ -1,182 +1,180 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var parserBuilder_exports = {};
|
|
20
|
-
__export(parserBuilder_exports, {
|
|
21
|
-
ParserBuilder: () => ParserBuilder
|
|
22
|
-
});
|
|
23
|
-
module.exports = __toCommonJS(parserBuilder_exports);
|
|
24
|
-
var import_LexerBuilder = require("../lexer-builder/LexerBuilder.js");
|
|
25
|
-
var import_dynamicParser = require("./dynamicParser.js");
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ParserBuilder = void 0;
|
|
4
|
+
const LexerBuilder_js_1 = require("../lexer-builder/LexerBuilder.js");
|
|
5
|
+
const dynamicParser_js_1 = require("./dynamicParser.js");
|
|
6
|
+
/**
|
|
7
|
+
* Converts a list of ruledefs to a record mapping a name to the corresponding ruledef.
|
|
8
|
+
*/
|
|
26
9
|
function listToRuleDefMap(rules) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
10
|
+
const newRules = {};
|
|
11
|
+
for (const rule of rules) {
|
|
12
|
+
newRules[rule.name] = rule;
|
|
13
|
+
}
|
|
14
|
+
return newRules;
|
|
32
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* The grammar builder. This is the core of traqula (besides using the amazing chevrotain framework).
|
|
18
|
+
* Using the builder you can create a grammar + AST creator.
|
|
19
|
+
* At any point in time, a parser can be constructed from the added rules.
|
|
20
|
+
* Constructing a parser will cause a validation which will validate the correctness of the grammar.
|
|
21
|
+
*/
|
|
22
|
+
// This code is wild so other code can be simple.
|
|
33
23
|
class ParserBuilder {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Create a builder from some initial grammar rules or an existing builder.
|
|
26
|
+
* If a builder is provided, a new copy will be created.
|
|
27
|
+
*/
|
|
28
|
+
static create(start) {
|
|
29
|
+
if (Array.isArray(start)) {
|
|
30
|
+
return new ParserBuilder(listToRuleDefMap(start));
|
|
31
|
+
}
|
|
32
|
+
return new ParserBuilder({ ...start.rules });
|
|
33
|
+
}
|
|
34
|
+
rules;
|
|
35
|
+
constructor(startRules) {
|
|
36
|
+
this.rules = startRules;
|
|
37
|
+
}
|
|
38
|
+
widenContext() {
|
|
39
|
+
return this;
|
|
41
40
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
rules;
|
|
45
|
-
constructor(startRules) {
|
|
46
|
-
this.rules = startRules;
|
|
47
|
-
}
|
|
48
|
-
widenContext() {
|
|
49
|
-
return this;
|
|
50
|
-
}
|
|
51
|
-
typePatch() {
|
|
52
|
-
return this;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Change the implementation of an existing grammar rule.
|
|
56
|
-
*/
|
|
57
|
-
patchRule(patch) {
|
|
58
|
-
const self = this;
|
|
59
|
-
self.rules[patch.name] = patch;
|
|
60
|
-
return self;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Add a rule to the grammar. If the rule already exists, but the implementation differs, an error will be thrown.
|
|
64
|
-
*/
|
|
65
|
-
addRuleRedundant(rule) {
|
|
66
|
-
const self = this;
|
|
67
|
-
const rules = self.rules;
|
|
68
|
-
if (rules[rule.name] !== void 0 && rules[rule.name] !== rule) {
|
|
69
|
-
throw new Error(`Rule ${rule.name} already exists in the builder`);
|
|
41
|
+
typePatch() {
|
|
42
|
+
return this;
|
|
70
43
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
deleteRule(ruleName) {
|
|
88
|
-
delete this.rules[ruleName];
|
|
89
|
-
return this;
|
|
90
|
-
}
|
|
91
|
-
getRule(ruleName) {
|
|
92
|
-
return this.rules[ruleName];
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Merge this grammar builder with another.
|
|
96
|
-
* It is best to merge the bigger grammar with the smaller one.
|
|
97
|
-
* If the two builders both have a grammar rule with the same name,
|
|
98
|
-
* no error will be thrown case they map to the same ruledef object.
|
|
99
|
-
* If they map to a different object, an error will be thrown.
|
|
100
|
-
* To fix this problem, the overridingRules array should contain a rule with the same conflicting name,
|
|
101
|
-
* this rule implementation will be used.
|
|
102
|
-
*/
|
|
103
|
-
merge(builder, overridingRules) {
|
|
104
|
-
const otherRules = { ...builder.rules };
|
|
105
|
-
const myRules = this.rules;
|
|
106
|
-
for (const rule of Object.values(myRules)) {
|
|
107
|
-
if (otherRules[rule.name] === void 0) {
|
|
108
|
-
otherRules[rule.name] = rule;
|
|
109
|
-
} else {
|
|
110
|
-
const existingRule = otherRules[rule.name];
|
|
111
|
-
if (existingRule !== rule) {
|
|
112
|
-
const override = overridingRules.find((x) => x.name === rule.name);
|
|
113
|
-
if (override) {
|
|
114
|
-
otherRules[rule.name] = override;
|
|
115
|
-
} else {
|
|
116
|
-
throw new Error(`Rule with name "${rule.name}" already exists in the builder, specify an override to resolve conflict`);
|
|
117
|
-
}
|
|
44
|
+
/**
|
|
45
|
+
* Change the implementation of an existing grammar rule.
|
|
46
|
+
*/
|
|
47
|
+
patchRule(patch) {
|
|
48
|
+
const self = this;
|
|
49
|
+
self.rules[patch.name] = patch;
|
|
50
|
+
return self;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Add a rule to the grammar. If the rule already exists, but the implementation differs, an error will be thrown.
|
|
54
|
+
*/
|
|
55
|
+
addRuleRedundant(rule) {
|
|
56
|
+
const self = this;
|
|
57
|
+
const rules = self.rules;
|
|
58
|
+
if (rules[rule.name] !== undefined && rules[rule.name] !== rule) {
|
|
59
|
+
throw new Error(`Rule ${rule.name} already exists in the builder`);
|
|
118
60
|
}
|
|
119
|
-
|
|
61
|
+
rules[rule.name] = rule;
|
|
62
|
+
return self;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Add a rule to the grammar. Will raise a typescript error if the rule already exists in the grammar.
|
|
66
|
+
*/
|
|
67
|
+
addRule(rule) {
|
|
68
|
+
return this.addRuleRedundant(rule);
|
|
69
|
+
}
|
|
70
|
+
addMany(...rules) {
|
|
71
|
+
this.rules = { ...this.rules, ...listToRuleDefMap(rules) };
|
|
72
|
+
return this;
|
|
120
73
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
74
|
+
/**
|
|
75
|
+
* Delete a grammar rule by its name.
|
|
76
|
+
*/
|
|
77
|
+
deleteRule(ruleName) {
|
|
78
|
+
delete this.rules[ruleName];
|
|
79
|
+
return this;
|
|
80
|
+
}
|
|
81
|
+
getRule(ruleName) {
|
|
82
|
+
return this.rules[ruleName];
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Merge this grammar builder with another.
|
|
86
|
+
* It is best to merge the bigger grammar with the smaller one.
|
|
87
|
+
* If the two builders both have a grammar rule with the same name,
|
|
88
|
+
* no error will be thrown case they map to the same ruledef object.
|
|
89
|
+
* If they map to a different object, an error will be thrown.
|
|
90
|
+
* To fix this problem, the overridingRules array should contain a rule with the same conflicting name,
|
|
91
|
+
* this rule implementation will be used.
|
|
92
|
+
*/
|
|
93
|
+
merge(builder, overridingRules) {
|
|
94
|
+
// Assume the other grammar is bigger than yours. So start from that one and add this one
|
|
95
|
+
const otherRules = { ...builder.rules };
|
|
96
|
+
const myRules = this.rules;
|
|
97
|
+
for (const rule of Object.values(myRules)) {
|
|
98
|
+
if (otherRules[rule.name] === undefined) {
|
|
99
|
+
otherRules[rule.name] = rule;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
const existingRule = otherRules[rule.name];
|
|
103
|
+
// If same rule, no issue, move on. Else
|
|
104
|
+
if (existingRule !== rule) {
|
|
105
|
+
const override = overridingRules.find(x => x.name === rule.name);
|
|
106
|
+
// If override specified, take override, else, inform user that there is a conflict
|
|
107
|
+
if (override) {
|
|
108
|
+
otherRules[rule.name] = override;
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
throw new Error(`Rule with name "${rule.name}" already exists in the builder, specify an override to resolve conflict`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
this.rules = otherRules;
|
|
117
|
+
return this;
|
|
118
|
+
}
|
|
119
|
+
defaultErrorHandler(input, errors) {
|
|
120
|
+
const firstError = errors[0];
|
|
121
|
+
const messageBuilder = ['Parse error'];
|
|
122
|
+
const lineIdx = firstError.token.startLine;
|
|
123
|
+
if (lineIdx !== undefined && !Number.isNaN(lineIdx)) {
|
|
124
|
+
const errorLine = input.split('\n')[lineIdx - 1];
|
|
125
|
+
messageBuilder.push(` on line ${lineIdx}
|
|
131
126
|
${errorLine}`);
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
127
|
+
const columnIdx = firstError.token.startColumn;
|
|
128
|
+
if (columnIdx !== undefined) {
|
|
129
|
+
messageBuilder.push(`\n${'-'.repeat(columnIdx - 1)}^`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
messageBuilder.push(`\n${firstError.message}`);
|
|
133
|
+
throw new Error(messageBuilder.join(''));
|
|
137
134
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
135
|
+
build({ tokenVocabulary, parserConfig = {}, lexerConfig = {}, queryPreProcessor = s => s, errorHandler, }) {
|
|
136
|
+
const lexer = LexerBuilder_js_1.LexerBuilder.create().add(...tokenVocabulary).build({
|
|
137
|
+
positionTracking: 'onlyOffset',
|
|
138
|
+
recoveryEnabled: false,
|
|
139
|
+
ensureOptimizations: true,
|
|
140
|
+
safeMode: false,
|
|
141
|
+
skipValidations: true,
|
|
142
|
+
...lexerConfig,
|
|
143
|
+
});
|
|
144
|
+
// Get the chevrotain parser
|
|
145
|
+
const parser = this.consume({
|
|
146
|
+
tokenVocabulary: tokenVocabulary,
|
|
147
|
+
config: parserConfig,
|
|
148
|
+
});
|
|
149
|
+
// Start building a parser that does not pass input using a state, but instead gets it as a function argument.
|
|
150
|
+
const selfSufficientParser = {};
|
|
151
|
+
// To do that, we need to create a wrapper for each parser rule.
|
|
152
|
+
// eslint-disable-next-line ts/no-unnecessary-type-assertion
|
|
153
|
+
for (const rule of Object.values(this.rules)) {
|
|
154
|
+
selfSufficientParser[rule.name] = ((input, context, ...args) => {
|
|
155
|
+
const processedInput = queryPreProcessor(input);
|
|
156
|
+
const lexResult = lexer.tokenize(processedInput);
|
|
157
|
+
// This also resets the parser
|
|
158
|
+
parser.input = lexResult.tokens;
|
|
159
|
+
parser.setContext(context);
|
|
160
|
+
const result = parser[rule.name](context, ...args);
|
|
161
|
+
if (parser.errors.length > 0) {
|
|
162
|
+
// Console.log(JSON.stringify(lexResult, null, 2));
|
|
163
|
+
if (errorHandler) {
|
|
164
|
+
errorHandler(parser.errors);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
this.defaultErrorHandler(processedInput, parser.errors);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return result;
|
|
171
|
+
});
|
|
169
172
|
}
|
|
170
|
-
return
|
|
171
|
-
|
|
173
|
+
return selfSufficientParser;
|
|
174
|
+
}
|
|
175
|
+
consume({ tokenVocabulary, config = {} }) {
|
|
176
|
+
return new dynamicParser_js_1.DynamicParser(this.rules, tokenVocabulary, config);
|
|
172
177
|
}
|
|
173
|
-
return selfSufficientParser;
|
|
174
|
-
}
|
|
175
|
-
consume({ tokenVocabulary, config = {} }) {
|
|
176
|
-
return new import_dynamicParser.DynamicParser(this.rules, tokenVocabulary, config);
|
|
177
|
-
}
|
|
178
178
|
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
ParserBuilder
|
|
182
|
-
});
|
|
179
|
+
exports.ParserBuilder = ParserBuilder;
|
|
180
|
+
//# sourceMappingURL=parserBuilder.js.map
|