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.
Files changed (80) hide show
  1. package/README.md +632 -0
  2. package/lib/codegen/CodegenAstFactory.d.ts +14 -0
  3. package/lib/codegen/CodegenAstFactory.js +119 -0
  4. package/lib/codegen/CodegenAstFactory.js.map +1 -0
  5. package/lib/codegen/CodegenGrammar.d.ts +21 -0
  6. package/lib/codegen/CodegenGrammar.js +145 -0
  7. package/lib/codegen/CodegenGrammar.js.map +1 -0
  8. package/lib/codegen/CodegenList.d.ts +15 -0
  9. package/lib/codegen/CodegenList.js +63 -0
  10. package/lib/codegen/CodegenList.js.map +1 -0
  11. package/lib/codegen/CodegenProduction.d.ts +15 -0
  12. package/lib/codegen/CodegenProduction.js +72 -0
  13. package/lib/codegen/CodegenProduction.js.map +1 -0
  14. package/lib/codegen/CodegenTerminal.d.ts +14 -0
  15. package/lib/codegen/CodegenTerminal.js +133 -0
  16. package/lib/codegen/CodegenTerminal.js.map +1 -0
  17. package/lib/codegen/CodegenUnion.d.ts +15 -0
  18. package/lib/codegen/CodegenUnion.js +71 -0
  19. package/lib/codegen/CodegenUnion.js.map +1 -0
  20. package/lib/codegen/Pattern.d.ts +8 -0
  21. package/lib/codegen/Pattern.js +41 -0
  22. package/lib/codegen/Pattern.js.map +1 -0
  23. package/lib/context.d.ts +13 -0
  24. package/lib/context.js +20 -0
  25. package/lib/context.js.map +1 -0
  26. package/lib/generator.d.ts +20 -0
  27. package/lib/generator.js +100 -0
  28. package/lib/generator.js.map +1 -0
  29. package/lib/grammars/calculator.d.ts +2 -0
  30. package/lib/grammars/calculator.js +76 -0
  31. package/lib/grammars/calculator.js.map +1 -0
  32. package/lib/grammars/esql.d.ts +2 -0
  33. package/lib/grammars/esql.js +221 -0
  34. package/lib/grammars/esql.js.map +1 -0
  35. package/lib/grammars/javascript.d.ts +2 -0
  36. package/lib/grammars/javascript.js +251 -0
  37. package/lib/grammars/javascript.js.map +1 -0
  38. package/lib/grammars/json-expression.d.ts +2 -0
  39. package/lib/grammars/json-expression.js +101 -0
  40. package/lib/grammars/json-expression.js.map +1 -0
  41. package/lib/grammars/json.d.ts +2 -0
  42. package/lib/grammars/json.js +79 -0
  43. package/lib/grammars/json.js.map +1 -0
  44. package/lib/index.d.ts +0 -0
  45. package/lib/index.js +2 -0
  46. package/lib/index.js.map +1 -0
  47. package/lib/matches.d.ts +15 -0
  48. package/lib/matches.js +21 -0
  49. package/lib/matches.js.map +1 -0
  50. package/lib/print.d.ts +11 -0
  51. package/lib/print.js +97 -0
  52. package/lib/print.js.map +1 -0
  53. package/lib/testing/cli.d.ts +1 -0
  54. package/lib/testing/cli.js +84 -0
  55. package/lib/testing/cli.js.map +1 -0
  56. package/lib/testing/driver.d.ts +21 -0
  57. package/lib/testing/driver.js +73 -0
  58. package/lib/testing/driver.js.map +1 -0
  59. package/lib/testing/index.d.ts +5 -0
  60. package/lib/testing/index.js +9 -0
  61. package/lib/testing/index.js.map +1 -0
  62. package/lib/testing/jest.d.ts +4 -0
  63. package/lib/testing/jest.js +31 -0
  64. package/lib/testing/jest.js.map +1 -0
  65. package/lib/testing/report.d.ts +3 -0
  66. package/lib/testing/report.js +64 -0
  67. package/lib/testing/report.js.map +1 -0
  68. package/lib/testing/runner.d.ts +29 -0
  69. package/lib/testing/runner.js +93 -0
  70. package/lib/testing/runner.js.map +1 -0
  71. package/lib/testing/types.d.ts +34 -0
  72. package/lib/testing/types.js +3 -0
  73. package/lib/testing/types.js.map +1 -0
  74. package/lib/types.d.ts +70 -0
  75. package/lib/types.js +3 -0
  76. package/lib/types.js.map +1 -0
  77. package/lib/util.d.ts +10 -0
  78. package/lib/util.js +39 -0
  79. package/lib/util.js.map +1 -0
  80. 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,8 @@
1
+ import type { AstNodeFactory, Parser } from '../types';
2
+ export declare const defaultAstFactory: AstNodeFactory;
3
+ export declare class Pattern {
4
+ type: string;
5
+ parser: Parser;
6
+ toAst: AstNodeFactory;
7
+ constructor(type: string);
8
+ }
@@ -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"}
@@ -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
+ }
@@ -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,2 @@
1
+ import type { Grammar } from '../types';
2
+ export declare const grammar: Grammar;
@@ -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,2 @@
1
+ import type { Grammar } from '../types';
2
+ export declare const grammar: Grammar;
@@ -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