jit-parser 1.0.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 +632 -0
- package/lib/codegen/CodegenAstFactory.d.ts +14 -0
- package/lib/codegen/CodegenAstFactory.js +119 -0
- package/lib/codegen/CodegenAstFactory.js.map +1 -0
- package/lib/codegen/CodegenGrammar.d.ts +21 -0
- package/lib/codegen/CodegenGrammar.js +145 -0
- package/lib/codegen/CodegenGrammar.js.map +1 -0
- package/lib/codegen/CodegenList.d.ts +15 -0
- package/lib/codegen/CodegenList.js +63 -0
- package/lib/codegen/CodegenList.js.map +1 -0
- package/lib/codegen/CodegenProduction.d.ts +15 -0
- package/lib/codegen/CodegenProduction.js +72 -0
- package/lib/codegen/CodegenProduction.js.map +1 -0
- package/lib/codegen/CodegenTerminal.d.ts +14 -0
- package/lib/codegen/CodegenTerminal.js +133 -0
- package/lib/codegen/CodegenTerminal.js.map +1 -0
- package/lib/codegen/CodegenUnion.d.ts +15 -0
- package/lib/codegen/CodegenUnion.js +71 -0
- package/lib/codegen/CodegenUnion.js.map +1 -0
- package/lib/codegen/Pattern.d.ts +8 -0
- package/lib/codegen/Pattern.js +41 -0
- package/lib/codegen/Pattern.js.map +1 -0
- package/lib/context.d.ts +13 -0
- package/lib/context.js +20 -0
- package/lib/context.js.map +1 -0
- package/lib/generator.d.ts +20 -0
- package/lib/generator.js +100 -0
- package/lib/generator.js.map +1 -0
- package/lib/grammars/calculator.d.ts +2 -0
- package/lib/grammars/calculator.js +76 -0
- package/lib/grammars/calculator.js.map +1 -0
- package/lib/grammars/esql.d.ts +2 -0
- package/lib/grammars/esql.js +221 -0
- package/lib/grammars/esql.js.map +1 -0
- package/lib/grammars/javascript.d.ts +2 -0
- package/lib/grammars/javascript.js +251 -0
- package/lib/grammars/javascript.js.map +1 -0
- package/lib/grammars/json-expression.d.ts +2 -0
- package/lib/grammars/json-expression.js +101 -0
- package/lib/grammars/json-expression.js.map +1 -0
- package/lib/grammars/json.d.ts +2 -0
- package/lib/grammars/json.js +79 -0
- package/lib/grammars/json.js.map +1 -0
- package/lib/index.d.ts +0 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -0
- package/lib/matches.d.ts +15 -0
- package/lib/matches.js +21 -0
- package/lib/matches.js.map +1 -0
- package/lib/print.d.ts +11 -0
- package/lib/print.js +97 -0
- package/lib/print.js.map +1 -0
- package/lib/testing/cli.d.ts +1 -0
- package/lib/testing/cli.js +84 -0
- package/lib/testing/cli.js.map +1 -0
- package/lib/testing/driver.d.ts +21 -0
- package/lib/testing/driver.js +73 -0
- package/lib/testing/driver.js.map +1 -0
- package/lib/testing/index.d.ts +5 -0
- package/lib/testing/index.js +9 -0
- package/lib/testing/index.js.map +1 -0
- package/lib/testing/jest.d.ts +4 -0
- package/lib/testing/jest.js +31 -0
- package/lib/testing/jest.js.map +1 -0
- package/lib/testing/report.d.ts +3 -0
- package/lib/testing/report.js +64 -0
- package/lib/testing/report.js.map +1 -0
- package/lib/testing/runner.d.ts +29 -0
- package/lib/testing/runner.js +93 -0
- package/lib/testing/runner.js.map +1 -0
- package/lib/testing/types.d.ts +34 -0
- package/lib/testing/types.js +3 -0
- package/lib/testing/types.js.map +1 -0
- package/lib/types.d.ts +70 -0
- package/lib/types.js +3 -0
- package/lib/types.js.map +1 -0
- package/lib/util.d.ts +10 -0
- package/lib/util.js +39 -0
- package/lib/util.js.map +1 -0
- package/package.json +103 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Codegen } from '@jsonjoy.com/util/lib/codegen';
|
|
2
|
+
import { CodegenContext } from '../context';
|
|
3
|
+
import type { Parser, UnionNode } from '../types';
|
|
4
|
+
import type { Pattern } from './Pattern';
|
|
5
|
+
export declare class CodegenUnion {
|
|
6
|
+
protected readonly node: UnionNode;
|
|
7
|
+
protected readonly pattern: Pattern;
|
|
8
|
+
protected readonly parsers: Parser[];
|
|
9
|
+
protected readonly ctx: CodegenContext;
|
|
10
|
+
static readonly compile: (rule: UnionNode, pattern: Pattern, parsers: Parser[], ctx?: CodegenContext) => Parser;
|
|
11
|
+
readonly codegen: Codegen<Parser>;
|
|
12
|
+
constructor(node: UnionNode, pattern: Pattern, parsers: Parser[], ctx: CodegenContext);
|
|
13
|
+
generate(): void;
|
|
14
|
+
compile(): Parser;
|
|
15
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CodegenUnion = void 0;
|
|
4
|
+
const codegen_1 = require("@jsonjoy.com/util/lib/codegen");
|
|
5
|
+
const matches_1 = require("../matches");
|
|
6
|
+
const context_1 = require("../context");
|
|
7
|
+
class CodegenUnion {
|
|
8
|
+
constructor(node, pattern, parsers, ctx) {
|
|
9
|
+
this.node = node;
|
|
10
|
+
this.pattern = pattern;
|
|
11
|
+
this.parsers = parsers;
|
|
12
|
+
this.ctx = ctx;
|
|
13
|
+
this.codegen = new codegen_1.Codegen({
|
|
14
|
+
args: ['ctx', 'pos'],
|
|
15
|
+
prologue: 'var str = ctx.str;',
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
generate() {
|
|
19
|
+
const { pattern, codegen, parsers } = this;
|
|
20
|
+
const deps = [];
|
|
21
|
+
const dPattern = codegen.linkDependency(pattern);
|
|
22
|
+
const dCstMatch = codegen.linkDependency(matches_1.CstMatch);
|
|
23
|
+
let rDebug = '';
|
|
24
|
+
const rTraceNodeParent = codegen.var();
|
|
25
|
+
if (this.ctx.debug) {
|
|
26
|
+
rDebug = codegen.var();
|
|
27
|
+
const rTrace = codegen.var('ctx.trace');
|
|
28
|
+
codegen.var(`${rTraceNodeParent} = ${rTrace} && ${rTrace}[${rTrace}.length - 1]`);
|
|
29
|
+
codegen.if(rTraceNodeParent, () => {
|
|
30
|
+
codegen.js(`${rDebug} = {ptr: ${dPattern}, pos: pos, children: []}`);
|
|
31
|
+
codegen.js(`${rTraceNodeParent}.children.push(${rDebug})`);
|
|
32
|
+
codegen.js(`${rTrace}.push(${rDebug})`);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
for (const parser of parsers)
|
|
36
|
+
deps.push(codegen.linkDependency(parser));
|
|
37
|
+
const rMatch = codegen.var(`${deps.join('(ctx, pos) || ')}(ctx, pos)`);
|
|
38
|
+
codegen.if(`!${rMatch}`, () => {
|
|
39
|
+
if (this.ctx.debug) {
|
|
40
|
+
codegen.if(rTraceNodeParent, () => {
|
|
41
|
+
const rTrace = codegen.var('ctx.trace');
|
|
42
|
+
codegen.js(`${rTrace}.pop();`);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
codegen.return('');
|
|
46
|
+
});
|
|
47
|
+
const rEnd = codegen.var();
|
|
48
|
+
const rChildren = codegen.var();
|
|
49
|
+
codegen.js(`${rEnd} = ${rMatch}.end;`);
|
|
50
|
+
codegen.js(`${rChildren} = [${rMatch}];`);
|
|
51
|
+
const rResult = codegen.var(`new ${dCstMatch}(pos, ${rEnd}, ${dPattern}, ${rChildren})`);
|
|
52
|
+
if (this.ctx.debug) {
|
|
53
|
+
codegen.if(rTraceNodeParent, () => {
|
|
54
|
+
codegen.js(`ctx.trace.pop();`);
|
|
55
|
+
codegen.js(`${rDebug}.match = ${rResult}`);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
codegen.return(rResult);
|
|
59
|
+
}
|
|
60
|
+
compile() {
|
|
61
|
+
const fn = this.codegen.compile();
|
|
62
|
+
return fn;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.CodegenUnion = CodegenUnion;
|
|
66
|
+
CodegenUnion.compile = (rule, pattern, parsers, ctx = new context_1.CodegenContext()) => {
|
|
67
|
+
const codegen = new CodegenUnion(rule, pattern, parsers, ctx);
|
|
68
|
+
codegen.generate();
|
|
69
|
+
return codegen.compile();
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=CodegenUnion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodegenUnion.js","sourceRoot":"","sources":["../../src/codegen/CodegenUnion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Pattern = exports.defaultAstFactory = void 0;
|
|
4
|
+
const util_1 = require("../util");
|
|
5
|
+
const matches_1 = require("../matches");
|
|
6
|
+
const noop = () => { };
|
|
7
|
+
const defaultAstFactory = (cst, src) => {
|
|
8
|
+
const ast = {
|
|
9
|
+
type: cst.ptr.type,
|
|
10
|
+
pos: cst.pos,
|
|
11
|
+
end: cst.end,
|
|
12
|
+
};
|
|
13
|
+
if (cst instanceof matches_1.LeafCstMatch) {
|
|
14
|
+
ast.raw = src.slice(cst.pos, cst.end);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
const children = cst.children;
|
|
18
|
+
if (children) {
|
|
19
|
+
const length = children.length;
|
|
20
|
+
const astChildren = [];
|
|
21
|
+
for (let i = 0; i < length; i++) {
|
|
22
|
+
const child = children[i];
|
|
23
|
+
const childAst = child.ptr.toAst(child, src);
|
|
24
|
+
if (childAst != null)
|
|
25
|
+
astChildren.push(childAst);
|
|
26
|
+
}
|
|
27
|
+
ast.children = astChildren;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return ast;
|
|
31
|
+
};
|
|
32
|
+
exports.defaultAstFactory = defaultAstFactory;
|
|
33
|
+
class Pattern {
|
|
34
|
+
constructor(type) {
|
|
35
|
+
this.parser = noop;
|
|
36
|
+
this.toAst = exports.defaultAstFactory;
|
|
37
|
+
this.type = (0, util_1.scrub)(type);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.Pattern = Pattern;
|
|
41
|
+
//# sourceMappingURL=Pattern.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Pattern.js","sourceRoot":"","sources":["../../src/codegen/Pattern.ts"],"names":[],"mappings":";;;AAAA,kCAA8B;AAE9B,wCAAwC;AAExC,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AAEf,MAAM,iBAAiB,GAAmB,CAAC,GAAY,EAAE,GAAW,EAAE,EAAE;IAC7E,MAAM,GAAG,GAAqB;QAC5B,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI;QAClB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,GAAG,EAAE,GAAG,CAAC,GAAG;KACb,CAAC;IACF,IAAI,GAAG,YAAY,sBAAY,EAAE,CAAC;QAChC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC9B,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC/B,MAAM,WAAW,GAAmC,EAAE,CAAC;YACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC7C,IAAI,QAAQ,IAAI,IAAI;oBAAE,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnD,CAAC;YACD,GAAG,CAAC,QAAQ,GAAG,WAAW,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAtBW,QAAA,iBAAiB,qBAsB5B;AAEF,MAAa,OAAO;IAKlB,YAAY,IAAY;QAHjB,WAAM,GAAmB,IAAI,CAAC;QAC9B,UAAK,GAAmB,yBAAiB,CAAC;QAG/C,IAAI,CAAC,IAAI,GAAG,IAAA,YAAK,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF;AARD,0BAQC"}
|
package/lib/context.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ParseTraceNode, RootTraceNode } from './types';
|
|
2
|
+
export declare class ParseContext {
|
|
3
|
+
readonly str: string;
|
|
4
|
+
readonly ast: boolean;
|
|
5
|
+
readonly trace: undefined | (RootTraceNode | ParseTraceNode)[];
|
|
6
|
+
constructor(str: string, ast: boolean, trace?: undefined | (RootTraceNode | ParseTraceNode)[]);
|
|
7
|
+
}
|
|
8
|
+
export declare class CodegenContext {
|
|
9
|
+
readonly positions: boolean;
|
|
10
|
+
readonly astExpressions: boolean;
|
|
11
|
+
readonly debug: boolean;
|
|
12
|
+
constructor(positions?: boolean, astExpressions?: boolean, debug?: boolean);
|
|
13
|
+
}
|
package/lib/context.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CodegenContext = exports.ParseContext = void 0;
|
|
4
|
+
class ParseContext {
|
|
5
|
+
constructor(str, ast, trace = undefined) {
|
|
6
|
+
this.str = str;
|
|
7
|
+
this.ast = ast;
|
|
8
|
+
this.trace = trace;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.ParseContext = ParseContext;
|
|
12
|
+
class CodegenContext {
|
|
13
|
+
constructor(positions = true, astExpressions = true, debug = false) {
|
|
14
|
+
this.positions = positions;
|
|
15
|
+
this.astExpressions = astExpressions;
|
|
16
|
+
this.debug = debug;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.CodegenContext = CodegenContext;
|
|
20
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":";;;AAEA,MAAa,YAAY;IACvB,YAIkB,GAAW,EAMX,GAAY,EAOZ,QAAwD,SAAS;QAbjE,QAAG,GAAH,GAAG,CAAQ;QAMX,QAAG,GAAH,GAAG,CAAS;QAOZ,UAAK,GAAL,KAAK,CAA4D;IAChF,CAAC;CACL;AApBD,oCAoBC;AACD,MAAa,cAAc;IACzB,YAIkB,YAAqB,IAAI,EAKzB,iBAA0B,IAAI,EAK9B,QAAiB,KAAK;QAVtB,cAAS,GAAT,SAAS,CAAgB;QAKzB,mBAAc,GAAd,cAAc,CAAgB;QAK9B,UAAK,GAAL,KAAK,CAAiB;IACrC,CAAC;CACL;AAjBD,wCAiBC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Grammar, GrammarNode, ListNode, ProductionNode, ProductionNodeShorthand, RefNode, TerminalNode, TerminalNodeShorthand, UnionNode } from './types';
|
|
2
|
+
export interface GeneratorOpts {
|
|
3
|
+
grammar: Grammar;
|
|
4
|
+
rnd?: () => number;
|
|
5
|
+
useSamples?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare class Generator {
|
|
8
|
+
protected readonly rnd: () => number;
|
|
9
|
+
protected readonly grammar: Grammar;
|
|
10
|
+
protected readonly samples: boolean;
|
|
11
|
+
constructor(opts: GeneratorOpts);
|
|
12
|
+
protected rndInt(min: number, max: number): number;
|
|
13
|
+
genTerminal(node: TerminalNode | TerminalNodeShorthand): string;
|
|
14
|
+
genProduction(node: ProductionNode | ProductionNodeShorthand): string;
|
|
15
|
+
genUnion(node: UnionNode): string;
|
|
16
|
+
genList(node: ListNode): string;
|
|
17
|
+
genRef(node: RefNode): string;
|
|
18
|
+
genNode(node: GrammarNode): string;
|
|
19
|
+
gen(type?: string): string;
|
|
20
|
+
}
|
package/lib/generator.js
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Generator = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const util_1 = require("./util");
|
|
6
|
+
const reregexp_1 = tslib_1.__importDefault(require("reregexp"));
|
|
7
|
+
class Generator {
|
|
8
|
+
constructor(opts) {
|
|
9
|
+
this.grammar = opts.grammar;
|
|
10
|
+
this.rnd = opts.rnd ?? Math.random;
|
|
11
|
+
this.samples = !!opts.useSamples;
|
|
12
|
+
}
|
|
13
|
+
rndInt(min, max) {
|
|
14
|
+
return Math.floor(this.rnd() * (max - min + 1) + min);
|
|
15
|
+
}
|
|
16
|
+
genTerminal(node) {
|
|
17
|
+
if ((0, util_1.isTerminalShorthandNode)(node))
|
|
18
|
+
return this.genTerminal({ t: node });
|
|
19
|
+
if (this.samples && typeof node.sample !== 'undefined')
|
|
20
|
+
return node.sample;
|
|
21
|
+
if (typeof node.t === 'string') {
|
|
22
|
+
return node.t;
|
|
23
|
+
}
|
|
24
|
+
else if (node.t instanceof RegExp) {
|
|
25
|
+
const r = new reregexp_1.default(node.t);
|
|
26
|
+
return r.build();
|
|
27
|
+
}
|
|
28
|
+
else if (Array.isArray(node.t)) {
|
|
29
|
+
const pick = Math.floor(Math.random() * node.t.length);
|
|
30
|
+
const str = node.t[pick];
|
|
31
|
+
const repeat = node.repeat === '*' ? this.rndInt(0, 5) : node.repeat === '+' ? this.rndInt(1, 5) : 1;
|
|
32
|
+
switch (repeat) {
|
|
33
|
+
case 0:
|
|
34
|
+
return '';
|
|
35
|
+
case 1:
|
|
36
|
+
return str;
|
|
37
|
+
default:
|
|
38
|
+
return str.repeat(repeat);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
throw new Error('UNK_TERMINAL');
|
|
42
|
+
}
|
|
43
|
+
genProduction(node) {
|
|
44
|
+
if (Array.isArray(node))
|
|
45
|
+
return this.genProduction({ p: node });
|
|
46
|
+
if (this.samples && typeof node.sample !== 'undefined')
|
|
47
|
+
return node.sample;
|
|
48
|
+
const p = node.p;
|
|
49
|
+
let res = '';
|
|
50
|
+
const length = p.length;
|
|
51
|
+
for (let i = 0; i < length; i++)
|
|
52
|
+
res += this.genNode(p[i]);
|
|
53
|
+
return res;
|
|
54
|
+
}
|
|
55
|
+
genUnion(node) {
|
|
56
|
+
if (this.samples && typeof node.sample !== 'undefined')
|
|
57
|
+
return node.sample;
|
|
58
|
+
const u = node.u;
|
|
59
|
+
const pick = this.rndInt(0, u.length - 1);
|
|
60
|
+
const child = u[pick];
|
|
61
|
+
return this.genNode(child);
|
|
62
|
+
}
|
|
63
|
+
genList(node) {
|
|
64
|
+
if (this.samples && typeof node.sample !== 'undefined')
|
|
65
|
+
return node.sample;
|
|
66
|
+
const child = node.l;
|
|
67
|
+
const repeat = this.rndInt(0, 5);
|
|
68
|
+
let res = '';
|
|
69
|
+
for (let i = 0; i < repeat; i++)
|
|
70
|
+
res += this.genNode(child);
|
|
71
|
+
return res;
|
|
72
|
+
}
|
|
73
|
+
genRef(node) {
|
|
74
|
+
const ref = node.r;
|
|
75
|
+
return this.genNode(this.grammar.cst[ref]);
|
|
76
|
+
}
|
|
77
|
+
genNode(node) {
|
|
78
|
+
if ((0, util_1.isTerminalNode)(node))
|
|
79
|
+
return this.genTerminal(node);
|
|
80
|
+
else if ((0, util_1.isTerminalShorthandNode)(node))
|
|
81
|
+
return this.genTerminal({ t: node });
|
|
82
|
+
else if ((0, util_1.isProductionNode)(node))
|
|
83
|
+
return this.genProduction(node);
|
|
84
|
+
else if ((0, util_1.isProductionShorthandNode)(node))
|
|
85
|
+
return this.genProduction({ p: node });
|
|
86
|
+
else if ((0, util_1.isUnionNode)(node))
|
|
87
|
+
return this.genUnion(node);
|
|
88
|
+
else if ((0, util_1.isListNode)(node))
|
|
89
|
+
return this.genList(node);
|
|
90
|
+
else if ((0, util_1.isRefNode)(node))
|
|
91
|
+
return this.genRef(node);
|
|
92
|
+
else
|
|
93
|
+
throw new Error('UNK_NODE');
|
|
94
|
+
}
|
|
95
|
+
gen(type = this.grammar.start) {
|
|
96
|
+
return this.genNode(this.grammar.cst[type]);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
exports.Generator = Generator;
|
|
100
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.grammar = void 0;
|
|
4
|
+
exports.grammar = {
|
|
5
|
+
start: 'SingleExpression',
|
|
6
|
+
cst: {
|
|
7
|
+
Whitespace: { t: /\s*/, ast: null },
|
|
8
|
+
SingleExpression: {
|
|
9
|
+
p: [{ r: 'Whitespace' }, { r: 'Expression' }, { r: 'Whitespace' }],
|
|
10
|
+
ast: ['$', '/children/0'],
|
|
11
|
+
},
|
|
12
|
+
Expression: {
|
|
13
|
+
u: [{ r: 'AdditiveExpression' }, { r: 'Literal' }],
|
|
14
|
+
ast: ['$', '/children/0'],
|
|
15
|
+
},
|
|
16
|
+
AdditiveExpression: {
|
|
17
|
+
p: [{ r: 'MultiplicativeExpression' }, { r: 'AdditiveExpressionCont' }],
|
|
18
|
+
ast: [
|
|
19
|
+
'?',
|
|
20
|
+
['==', ['len', ['$', '/children']], 1],
|
|
21
|
+
['$', '/children/0'],
|
|
22
|
+
[
|
|
23
|
+
'?',
|
|
24
|
+
['==', ['$', '/children/1/children/0'], '+'],
|
|
25
|
+
['+', ['$', '/children/0'], ['$', '/children/1/children/1', 1]],
|
|
26
|
+
['-', ['$', '/children/0'], ['$', '/children/1/children/1', 1]],
|
|
27
|
+
],
|
|
28
|
+
],
|
|
29
|
+
},
|
|
30
|
+
AdditiveExpressionCont: {
|
|
31
|
+
u: [
|
|
32
|
+
[
|
|
33
|
+
{ r: 'Whitespace' },
|
|
34
|
+
{ t: ['+', '-'], ast: ['$', '/raw'] },
|
|
35
|
+
{ r: 'Whitespace' },
|
|
36
|
+
{ r: 'AdditiveExpression' },
|
|
37
|
+
{ r: 'AdditiveExpressionCont' },
|
|
38
|
+
],
|
|
39
|
+
'',
|
|
40
|
+
],
|
|
41
|
+
ast: ['$', '/children/0', 0],
|
|
42
|
+
},
|
|
43
|
+
MultiplicativeExpression: {
|
|
44
|
+
p: [{ r: 'Literal' }, { r: 'MultiplicativeExpressionCont' }],
|
|
45
|
+
ast: [
|
|
46
|
+
'?',
|
|
47
|
+
['==', ['len', ['$', '/children']], 1],
|
|
48
|
+
['$', '/children/0'],
|
|
49
|
+
[
|
|
50
|
+
'?',
|
|
51
|
+
['==', ['$', '/children/1/children/0'], '*'],
|
|
52
|
+
['*', ['$', '/children/0'], ['$', '/children/1/children/1', 1]],
|
|
53
|
+
['/', ['$', '/children/0'], ['$', '/children/1/children/1', 1]],
|
|
54
|
+
],
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
MultiplicativeExpressionCont: {
|
|
58
|
+
u: [
|
|
59
|
+
[
|
|
60
|
+
{ r: 'Whitespace' },
|
|
61
|
+
{ t: ['*', '/'], ast: ['$', '/raw'] },
|
|
62
|
+
{ r: 'Whitespace' },
|
|
63
|
+
{ r: 'MultiplicativeExpression' },
|
|
64
|
+
{ r: 'MultiplicativeExpressionCont' },
|
|
65
|
+
],
|
|
66
|
+
'',
|
|
67
|
+
],
|
|
68
|
+
ast: ['$', '/children/0', 0],
|
|
69
|
+
},
|
|
70
|
+
Literal: {
|
|
71
|
+
t: /\d+/,
|
|
72
|
+
ast: ['num', ['$', '/raw']],
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=calculator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculator.js","sourceRoot":"","sources":["../../src/grammars/calculator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.grammar = void 0;
|
|
4
|
+
const EPSILON = { t: '', ast: null };
|
|
5
|
+
const W = { r: 'W' };
|
|
6
|
+
const OptW = { r: 'Ws' };
|
|
7
|
+
const r = ([name]) => ({ r: name });
|
|
8
|
+
const opt = (node) => ({
|
|
9
|
+
u: [node, EPSILON],
|
|
10
|
+
ast: ['?', ['len', ['$', '/children']], AstUseFirstChild, null],
|
|
11
|
+
});
|
|
12
|
+
const AstUseChildren = ['$', '/children'];
|
|
13
|
+
const AstUseFirstChild = ['$', '/children/0'];
|
|
14
|
+
exports.grammar = {
|
|
15
|
+
start: 'Query',
|
|
16
|
+
cst: {
|
|
17
|
+
Query: [{ r: 'Ws' }, r `SourceCommand`, r `QueryChain`, /\s|$/],
|
|
18
|
+
QueryChain: { l: r `PipedCommand` },
|
|
19
|
+
PipedCommand: [OptW, '|', OptW, r `Command`],
|
|
20
|
+
Command: { u: [r `SourceCommand`, r `ProcessingCommand`] },
|
|
21
|
+
W: { t: /\s+/, sample: ' ' },
|
|
22
|
+
Ws: { t: /\s*/, sample: ' ' },
|
|
23
|
+
SourceCommand: {
|
|
24
|
+
u: [
|
|
25
|
+
r `ExplainCommand`,
|
|
26
|
+
r `FromCommand`,
|
|
27
|
+
r `RowCommand`,
|
|
28
|
+
r `ShowCommand`,
|
|
29
|
+
r `MetaCommand`,
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
ProcessingCommand: {
|
|
33
|
+
u: [
|
|
34
|
+
r `EvalCommand`,
|
|
35
|
+
r `InlineStatsCommand`,
|
|
36
|
+
],
|
|
37
|
+
},
|
|
38
|
+
ExplainCommand: [/EXPLAIN/i, W, r `SubqueryExpression`],
|
|
39
|
+
FromCommand: [/FROM/i, W, r `IndexIdentifierList`, r `Metadata`],
|
|
40
|
+
IndexIdentifierList: [OptW, r `IndexIdentifier`, { l: r `NextIndexIdentifier`, ast: AstUseChildren }],
|
|
41
|
+
NextIndexIdentifier: [OptW, ',', OptW, r `IndexIdentifier`],
|
|
42
|
+
Metadata: {
|
|
43
|
+
u: [
|
|
44
|
+
[
|
|
45
|
+
OptW,
|
|
46
|
+
{
|
|
47
|
+
u: [r `MetadataOption`, r `DeprecatedMetadata`],
|
|
48
|
+
ast: AstUseFirstChild,
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
EPSILON,
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
MetadataOption: [/METADATA/i, W, r `IndexIdentifierList`],
|
|
55
|
+
DeprecatedMetadata: ['[', OptW, r `MetadataOption`, OptW, ']'],
|
|
56
|
+
RowCommand: [/ROW/i, W, r `Fields`],
|
|
57
|
+
Fields: [OptW, r `Field`, { l: r `NextField`, ast: AstUseChildren }],
|
|
58
|
+
NextField: [OptW, ',', OptW, r `Field`],
|
|
59
|
+
Field: {
|
|
60
|
+
u: [r `AssignmentExpression`, r `BooleanExpression`],
|
|
61
|
+
},
|
|
62
|
+
ShowCommand: /SHOW INFO/i,
|
|
63
|
+
MetaCommand: /META FUNCTIONS/i,
|
|
64
|
+
EvalCommand: [/EVAL/i, W, r `Fields`],
|
|
65
|
+
InlineStatsCommand: [/INLINESTATS/i, W, r `Fields`, opt(r `ByGrouping`)],
|
|
66
|
+
ByGrouping: [W, /BY/i, W, r `Fields`],
|
|
67
|
+
BooleanExpressionList: {
|
|
68
|
+
p: [r `BooleanExpression`, { l: r `NextBooleanExpression`, ast: AstUseChildren }],
|
|
69
|
+
ast: ['concat', ['push', [[]], ['$', '/children/0']], ['$', '/children/1']],
|
|
70
|
+
},
|
|
71
|
+
NextBooleanExpression: { p: [OptW, ',', OptW, r `BooleanExpression`], ast: AstUseFirstChild },
|
|
72
|
+
BooleanExpression: {
|
|
73
|
+
u: [
|
|
74
|
+
r `LogicalNot`,
|
|
75
|
+
r `ValueExpression`,
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
LogicalNot: [OptW, 'NOT', W, { r: 'BooleanExpression' }],
|
|
79
|
+
ValueExpression: {
|
|
80
|
+
u: [
|
|
81
|
+
{ r: 'OperatorExpression' },
|
|
82
|
+
],
|
|
83
|
+
},
|
|
84
|
+
OperatorExpression: {
|
|
85
|
+
u: [
|
|
86
|
+
{ r: 'PrimaryExpression' },
|
|
87
|
+
],
|
|
88
|
+
},
|
|
89
|
+
PrimaryExpression: {
|
|
90
|
+
u: [
|
|
91
|
+
r `Constant`,
|
|
92
|
+
r `FunctionExpression`,
|
|
93
|
+
r `QualifiedName`,
|
|
94
|
+
[OptW, '(', r `BooleanExpression`, ')'],
|
|
95
|
+
],
|
|
96
|
+
},
|
|
97
|
+
AssignmentExpression: [{ r: 'QualifiedName' }, { r: 'Ws' }, '=', { r: 'Ws' }, { r: 'BooleanExpression' }],
|
|
98
|
+
SubqueryExpression: [{ r: 'Ws' }, '(', { r: 'Query' }, ')', { r: 'Ws' }],
|
|
99
|
+
FunctionExpression: [
|
|
100
|
+
r `Identifier`,
|
|
101
|
+
OptW,
|
|
102
|
+
'(',
|
|
103
|
+
OptW,
|
|
104
|
+
{
|
|
105
|
+
u: [{ type: 'StarArgument', t: '*' }, r `BooleanExpressionList`],
|
|
106
|
+
ast: AstUseFirstChild,
|
|
107
|
+
},
|
|
108
|
+
OptW,
|
|
109
|
+
')',
|
|
110
|
+
],
|
|
111
|
+
Constant: {
|
|
112
|
+
u: [
|
|
113
|
+
r `NullLiteral`,
|
|
114
|
+
[r `IntegerLiteral`, OptW, r `UnquotedIdentifier`],
|
|
115
|
+
r `DecimalLiteral`,
|
|
116
|
+
r `IntegerLiteral`,
|
|
117
|
+
r `BooleanLiteral`,
|
|
118
|
+
r `ParamLiteral`,
|
|
119
|
+
r `StringLiteral`,
|
|
120
|
+
r `NumericArrayLiteral`,
|
|
121
|
+
r `BooleanArrayLiteral`,
|
|
122
|
+
r `StringArrayLiteral`,
|
|
123
|
+
],
|
|
124
|
+
},
|
|
125
|
+
NullLiteral: /NULL/i,
|
|
126
|
+
NumericLiteral: { u: [{ r: 'DecimalLiteral' }, { r: 'IntegerLiteral' }] },
|
|
127
|
+
DecimalLiteral: /[\-\+]?\d+\.\d+/,
|
|
128
|
+
IntegerLiteral: /[\-\+]?\d+/,
|
|
129
|
+
BooleanLiteral: /TRUE|FALSE/i,
|
|
130
|
+
StringLiteral: /"(\\[\t\n\r"]|[^\t\n\r"])*"/,
|
|
131
|
+
ParamLiteral: { u: [{ r: 'NamedParam' }, { r: 'PositionalParam' }, { r: 'UnnamedParam' }] },
|
|
132
|
+
UnnamedParam: '?',
|
|
133
|
+
NamedParam: /\?[a-zA-Z][a-zA-Z0-9_]*/,
|
|
134
|
+
PositionalParam: /\?\d+/,
|
|
135
|
+
NumericArrayLiteral: ['[', OptW, { r: 'NumericLiteral' }, { l: [OptW, ',', OptW, { r: 'NumericLiteral' }] }, OptW, ']'],
|
|
136
|
+
BooleanArrayLiteral: ['[', OptW, { r: 'BooleanLiteral' }, { l: [OptW, ',', OptW, { r: 'BooleanLiteral' }] }, OptW, ']'],
|
|
137
|
+
StringArrayLiteral: ['[', OptW, { r: 'StringLiteral' }, { l: [OptW, ',', OptW, { r: 'StringLiteral' }] }, OptW, ']'],
|
|
138
|
+
IndexIdentifier: {
|
|
139
|
+
t: /(?!\/)(?!.*\/$)(?!.*\/\/)[a-zA-Z_\.][a-zA-Z0-9_\.\/\-\*]*/,
|
|
140
|
+
sample: 'abc',
|
|
141
|
+
},
|
|
142
|
+
QualifiedName: [{ r: 'Identifier' }, { l: { r: 'NextIdentifier' }, ast: AstUseChildren }],
|
|
143
|
+
Identifier: { u: [{ r: 'UnquotedIdentifier' }, { r: 'QuotedIdentifier' }] },
|
|
144
|
+
NextIdentifier: [OptW, '.', OptW, { r: 'Identifier' }],
|
|
145
|
+
UnquotedIdentifier: /[a-zA-Z][a-zA-Z0-9_]*|[_\@][a-zA-Z0-9_]+/,
|
|
146
|
+
QuotedIdentifier: {
|
|
147
|
+
t: /`([^`]|``)+`/,
|
|
148
|
+
sample: '`abc`',
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
ast: {
|
|
152
|
+
W: null,
|
|
153
|
+
Ws: null,
|
|
154
|
+
Query: ['o.set', ['$', ''], 'children', ['concat', ['push', [[]], ['$', '/children/0']], ['$', '/children/1']]],
|
|
155
|
+
QueryChain: AstUseChildren,
|
|
156
|
+
PipedCommand: ['$', '/children/0'],
|
|
157
|
+
Command: AstUseFirstChild,
|
|
158
|
+
SourceCommand: AstUseFirstChild,
|
|
159
|
+
ProcessingCommand: AstUseFirstChild,
|
|
160
|
+
FromCommand: [
|
|
161
|
+
'o.del',
|
|
162
|
+
['o.set', ['$', ''], 'sources', ['$', '/children/0'], 'metadata', ['$', '/children/1', null]],
|
|
163
|
+
'children',
|
|
164
|
+
],
|
|
165
|
+
Metadata: ['?', ['len', ['$', '/children']], ['$', '/children/0/children/0', null], null],
|
|
166
|
+
MetadataOption: ['$', '/children/0'],
|
|
167
|
+
DeprecatedMetadata: ['$', '/children/0'],
|
|
168
|
+
IndexIdentifierList: [
|
|
169
|
+
'o.set',
|
|
170
|
+
['$', ''],
|
|
171
|
+
'children',
|
|
172
|
+
['concat', ['push', [[]], ['$', '/children/0']], ['$', '/children/1']],
|
|
173
|
+
],
|
|
174
|
+
NextIndexIdentifier: ['$', '/children/0'],
|
|
175
|
+
RowCommand: ['o.del', ['o.set', ['$', ''], 'fields', ['$', '/children/0/children']], 'children'],
|
|
176
|
+
EvalCommand: ['o.del', ['o.set', ['$', ''], 'fields', ['$', '/children/0/children']], 'children'],
|
|
177
|
+
InlineStatsCommand: [
|
|
178
|
+
'o.del',
|
|
179
|
+
[
|
|
180
|
+
'o.set',
|
|
181
|
+
['$', ''],
|
|
182
|
+
'aggregates',
|
|
183
|
+
['$', '/children/0/children'],
|
|
184
|
+
'grouping',
|
|
185
|
+
['$', '/children/1/children/0/children', null],
|
|
186
|
+
],
|
|
187
|
+
'children',
|
|
188
|
+
],
|
|
189
|
+
Fields: ['o.set', ['$', ''], 'children', ['concat', ['push', [[]], ['$', '/children/0']], ['$', '/children/1']]],
|
|
190
|
+
NextField: AstUseFirstChild,
|
|
191
|
+
Field: ['o.del', ['o.set', ['$', ''], 'value', ['$', '/children/0']], 'children'],
|
|
192
|
+
BooleanExpression: AstUseFirstChild,
|
|
193
|
+
ValueExpression: AstUseFirstChild,
|
|
194
|
+
OperatorExpression: AstUseFirstChild,
|
|
195
|
+
PrimaryExpression: AstUseFirstChild,
|
|
196
|
+
AssignmentExpression: [
|
|
197
|
+
'o.del',
|
|
198
|
+
['o.set', ['$', ''], 'left', ['$', '/children/0'], 'right', ['$', '/children/1']],
|
|
199
|
+
'children',
|
|
200
|
+
],
|
|
201
|
+
FunctionExpression: [
|
|
202
|
+
'o.del',
|
|
203
|
+
['o.set', ['$', ''], 'name', ['$', '/children/0'], 'arguments', ['$', '/children/1']],
|
|
204
|
+
'children',
|
|
205
|
+
],
|
|
206
|
+
Constant: ['o.del', ['o.set', ['$', ''], 'value', ['$', '/children/0']], 'children'],
|
|
207
|
+
QualifiedName: [
|
|
208
|
+
'o.set',
|
|
209
|
+
['$', ''],
|
|
210
|
+
'children',
|
|
211
|
+
['concat', ['push', [[]], ['$', '/children/0']], ['$', '/children/1']],
|
|
212
|
+
'value',
|
|
213
|
+
['substr', ['reduce', ['$', '/children'], '', 'acc', 'x', ['.', ['$', 'acc'], '.', ['$', 'x/value']]], 1, 4096],
|
|
214
|
+
],
|
|
215
|
+
Identifier: ['o.del', ['o.set', ['$', ''], 'value', ['$', '/children/0/value']], 'children'],
|
|
216
|
+
NextIdentifier: ['$', '/children/0'],
|
|
217
|
+
UnquotedIdentifier: ['o.set', ['$', ''], 'value', ['$', '/raw']],
|
|
218
|
+
QuotedIdentifier: ['o.set', ['$', ''], 'value', ['substr', ['$', '/raw'], 1, ['-', ['len', ['$', '/raw']], 1]]],
|
|
219
|
+
},
|
|
220
|
+
};
|
|
221
|
+
//# sourceMappingURL=esql.js.map
|