jit-parser 1.0.0 → 1.1.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 CHANGED
@@ -47,7 +47,7 @@ console.log(cst); // CST node representing the parse result
47
47
 
48
48
  ## Grammar Node Types
49
49
 
50
- JIT Parser supports five main grammar node types for defining parsing rules. Grammar rules can be fully defined in JSON, making them language-agnostic and easy to serialize.
50
+ JIT Parser supports six main grammar node types for defining parsing rules. Grammar rules can be fully defined in JSON, making them language-agnostic and easy to serialize.
51
51
 
52
52
  ### 1. RefNode (Reference Node)
53
53
 
@@ -248,6 +248,49 @@ Arguments: {
248
248
  }
249
249
  ```
250
250
 
251
+ ### 6. PredicateNode (Lookahead Node)
252
+
253
+ A syntactic predicate (PEG lookahead). It matches **zero-width** — it never consumes input and never produces an AST node — and succeeds or fails purely based on whether its inner node matches at the current position.
254
+
255
+ **Interface:**
256
+ ```typescript
257
+ interface PredicateNode {
258
+ not?: GrammarNode; // Negative lookahead (!e)
259
+ and?: GrammarNode; // Positive lookahead (&e)
260
+ type?: string; // Type name (default: "Predicate")
261
+ }
262
+ ```
263
+
264
+ A node has exactly one of `not` or `and`:
265
+
266
+ - `{not: e}` — **negative** lookahead (`!e`): succeeds (zero-width) iff `e` does **not** match here.
267
+ - `{and: e}` — **positive** lookahead (`&e`): succeeds (zero-width) iff `e` matches here. This is sugar for `{not: {not: e}}`.
268
+
269
+ **Syntax:**
270
+ ```typescript
271
+ {not: pattern} // assert pattern is NOT ahead
272
+ {and: pattern} // assert pattern IS ahead
273
+ ```
274
+
275
+ **Examples:**
276
+ ```typescript
277
+ // Keyword boundary: match `null`, but only if it is not the prefix of a
278
+ // longer identifier (so `nullish` does NOT match).
279
+ Null: ['null', {not: /[a-zA-Z0-9_]/}]
280
+
281
+ // End-of-input: "not any character".
282
+ EOF: {not: /[\s\S]/}
283
+
284
+ // Disambiguation: a value that is not the start of an assignment.
285
+ Value: [{not: {r: 'Assignment'}}, {r: 'Expression'}]
286
+
287
+ // Positive lookahead: a digit run, but only when it starts with "9"
288
+ // (the `9` is asserted, not consumed, so `Number` still sees it).
289
+ NineNumber: [{and: '9'}, {r: 'Number'}]
290
+ ```
291
+
292
+ Because a predicate is zero-width and produces no AST, it never appears in the AST and does not shift `children` indices.
293
+
251
294
  ## Tree Types
252
295
 
253
296
  JIT Parser works with four types of tree structures:
@@ -1,4 +1,4 @@
1
- import type { Grammar, UnionNode, Parser, TerminalNodeShorthand, GrammarNode, TerminalNode, ProductionNode, ListNode, CstNode } from '../types';
1
+ import type { Grammar, UnionNode, Parser, TerminalNodeShorthand, GrammarNode, TerminalNode, ProductionNode, ListNode, PredicateNode, CstNode } from '../types';
2
2
  import { CodegenContext } from '../context';
3
3
  import { Pattern } from './Pattern';
4
4
  export declare class CodegenGrammar {
@@ -14,6 +14,7 @@ export declare class CodegenGrammar {
14
14
  protected compileProduction(node: ProductionNode, pattern?: Pattern): Pattern;
15
15
  protected compileUnion(node: UnionNode, pattern?: Pattern): Pattern;
16
16
  protected compileList(node: ListNode, pattern?: Pattern): Pattern;
17
+ protected compilePredicate(node: PredicateNode, pattern?: Pattern): Pattern;
17
18
  compileRule(name: string): Pattern;
18
19
  compile(): Parser;
19
20
  walk(node: CstNode, visitor: (node: CstNode) => void): void;
@@ -6,6 +6,7 @@ const CodegenTerminal_1 = require("./CodegenTerminal");
6
6
  const CodegenProduction_1 = require("./CodegenProduction");
7
7
  const CodegenUnion_1 = require("./CodegenUnion");
8
8
  const CodegenList_1 = require("./CodegenList");
9
+ const CodegenPredicate_1 = require("./CodegenPredicate");
9
10
  const context_1 = require("../context");
10
11
  const Pattern_1 = require("./Pattern");
11
12
  const CodegenAstFactory_1 = require("./CodegenAstFactory");
@@ -33,6 +34,9 @@ class CodegenGrammar {
33
34
  else if ((0, util_1.isListNode)(node)) {
34
35
  return this.compileList(node, pattern);
35
36
  }
37
+ else if ((0, util_1.isPredNode)(node)) {
38
+ return this.compilePredicate(node, pattern);
39
+ }
36
40
  else if ((0, util_1.isRefNode)(node)) {
37
41
  return this.compileRule(node.r);
38
42
  }
@@ -102,6 +106,14 @@ class CodegenGrammar {
102
106
  pattern.toAst = CodegenAstFactory_1.CodegenAstFactory.compile(node, pattern, this.ctx);
103
107
  return pattern;
104
108
  }
109
+ compilePredicate(node, pattern) {
110
+ const inner = node.and !== undefined ? { not: node.and } : node.not;
111
+ const childParser = this.getNodeParser(inner);
112
+ pattern ?? (pattern = new Pattern_1.Pattern(node.type ?? 'Predicate'));
113
+ pattern.parser = CodegenPredicate_1.CodegenPredicate.compile(node, pattern, childParser, this.ctx);
114
+ pattern.toAst = () => null;
115
+ return pattern;
116
+ }
105
117
  compileRule(name) {
106
118
  const patterns = this.patterns;
107
119
  if (patterns.has(name))
@@ -1 +1 @@
1
- {"version":3,"file":"CodegenGrammar.js","sourceRoot":"","sources":["../../src/codegen/CodegenGrammar.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CodegenGrammar.js","sourceRoot":"","sources":["../../src/codegen/CodegenGrammar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { Codegen } from '@jsonjoy.com/util/lib/codegen';
2
+ import { CodegenContext } from '../context';
3
+ import type { Parser, PredicateNode } from '../types';
4
+ import type { Pattern } from './Pattern';
5
+ export declare class CodegenPredicate {
6
+ protected readonly node: PredicateNode;
7
+ protected readonly pattern: Pattern;
8
+ protected readonly parser: Parser;
9
+ protected readonly ctx: CodegenContext;
10
+ static readonly compile: (node: PredicateNode, pattern: Pattern, parser: Parser, ctx?: CodegenContext) => Parser;
11
+ readonly codegen: Codegen<Parser>;
12
+ constructor(node: PredicateNode, pattern: Pattern, parser: Parser, ctx: CodegenContext);
13
+ generate(): void;
14
+ compile(): Parser;
15
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CodegenPredicate = 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 CodegenPredicate {
8
+ constructor(node, pattern, parser, ctx) {
9
+ this.node = node;
10
+ this.pattern = pattern;
11
+ this.parser = parser;
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, parser } = this;
20
+ const dLeafCstMatch = codegen.linkDependency(matches_1.LeafCstMatch);
21
+ const dPattern = codegen.linkDependency(pattern);
22
+ const dParser = codegen.linkDependency(parser);
23
+ const rMatch = codegen.var(`${dParser}(ctx, pos)`);
24
+ codegen.if(rMatch, () => {
25
+ codegen.return('');
26
+ });
27
+ codegen.return(`new ${dLeafCstMatch}(pos, pos, ${dPattern})`);
28
+ }
29
+ compile() {
30
+ return this.codegen.compile();
31
+ }
32
+ }
33
+ exports.CodegenPredicate = CodegenPredicate;
34
+ CodegenPredicate.compile = (node, pattern, parser, ctx = new context_1.CodegenContext()) => {
35
+ const codegen = new CodegenPredicate(node, pattern, parser, ctx);
36
+ codegen.generate();
37
+ return codegen.compile();
38
+ };
39
+ //# sourceMappingURL=CodegenPredicate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodegenPredicate.js","sourceRoot":"","sources":["../../src/codegen/CodegenPredicate.ts"],"names":[],"mappings":";;;AAAA,2DAAsD;AACtD,wCAAwC;AACxC,wCAA0C;AAI1C,MAAa,gBAAgB;IAc3B,YACqB,IAAmB,EACnB,OAAgB,EAChB,MAAc,EACd,GAAmB;QAHnB,SAAI,GAAJ,IAAI,CAAe;QACnB,YAAO,GAAP,OAAO,CAAS;QAChB,WAAM,GAAN,MAAM,CAAQ;QACd,QAAG,GAAH,GAAG,CAAgB;QAEtC,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CAAC;YACzB,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;YACpB,QAAQ,EAAE,oBAAoB;SAC/B,CAAC,CAAC;IACL,CAAC;IAEM,QAAQ;QACb,MAAM,EAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAC,GAAG,IAAI,CAAC;QACxC,MAAM,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,sBAAY,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,YAAY,CAAC,CAAC;QACnD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACtB,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,MAAM,CAAC,OAAO,aAAa,cAAc,QAAQ,GAAG,CAAC,CAAC;IAChE,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC;;AAxCH,4CAyCC;AAxCwB,wBAAO,GAAG,CAC/B,IAAmB,EACnB,OAAgB,EAChB,MAAc,EACd,MAAsB,IAAI,wBAAc,EAAE,EAClC,EAAE;IACV,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IACjE,OAAO,CAAC,QAAQ,EAAE,CAAC;IACnB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;AAC3B,CAAC,CAAC"}
package/lib/generator.js CHANGED
@@ -87,6 +87,8 @@ class Generator {
87
87
  return this.genUnion(node);
88
88
  else if ((0, util_1.isListNode)(node))
89
89
  return this.genList(node);
90
+ else if ((0, util_1.isPredNode)(node))
91
+ return '';
90
92
  else if ((0, util_1.isRefNode)(node))
91
93
  return this.genRef(node);
92
94
  else
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
package/lib/print.js CHANGED
@@ -53,6 +53,12 @@ class GrammarPrinter {
53
53
  else if ((0, util_1.isListNode)(node)) {
54
54
  return (`${node.type ?? type ?? 'List'} (list)` + (0, printTree_1.printTree)(tab, [(tab) => this.printNode(node.l, undefined, tab)]));
55
55
  }
56
+ else if ((0, util_1.isPredNode)(node)) {
57
+ const negative = node.not !== undefined;
58
+ const inner = (negative ? node.not : node.and);
59
+ return (`${node.type ?? type ?? 'Predicate'} (predicate: ${negative ? '!' : '&'})` +
60
+ (0, printTree_1.printTree)(tab, [(tab) => this.printNode(inner, undefined, tab)]));
61
+ }
56
62
  return 'unknown';
57
63
  }
58
64
  }
package/lib/print.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"print.js","sourceRoot":"","sources":["../src/print.ts"],"names":[],"mappings":";;;AAAA,uDAAkD;AAClD,iCAQgB;AAGhB,MAAa,cAAc;IAQzB,YAA4B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAFzB,YAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAEA,CAAC;IAEzC,KAAK,CAAC,GAAY,EAAE,OAAe,IAAI,CAAC,OAAO,CAAC,KAAK;QAC1D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAC3D,CAAC;IAEM,SAAS,CAAC,IAAiB,EAAE,IAAa,EAAE,GAAY;QAC7D,IAAI,IAAI;YAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,IAAA,qBAAc,EAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,OAAO,GACX,OAAO,IAAI,CAAC,CAAC,KAAK,QAAQ;gBACxB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;gBACxB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;oBACrB,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;oBACpF,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACf,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,MAAM,gBAAgB,OAAO,EAAE,CAAC;QACjE,CAAC;aAAM,IAAI,IAAA,8BAAuB,EAAC,IAAI,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC,SAAS,CAAC,EAAC,CAAC,EAAE,IAAI,EAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,IAAA,gBAAS,EAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,OAAO;oBAAE,OAAO,KAAK,SAAS,EAAE,CAAC;;oBAChC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;YAC1E,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC5B,OAAO,CACL,GAAG,IAAI,IAAI,WAAW,cAAc;gBACpC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,qBAAS,EAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAC1G,CAAC;QACJ,CAAC;aAAM,IAAI,IAAA,uBAAgB,EAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,CACL,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,YAAY,eAAe;gBACnD,IAAA,qBAAS,EACP,GAAG,EACH,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAC9D,CACF,CAAC;QACJ,CAAC;aAAM,IAAI,IAAA,gCAAyB,EAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC,SAAS,CAAC,EAAC,CAAC,EAAE,IAAI,EAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,IAAA,kBAAW,EAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,CACL,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,OAAO,UAAU;gBACzC,IAAA,qBAAS,EACP,GAAG,EACH,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAC9D,CACF,CAAC;QACJ,CAAC;aAAM,IAAI,IAAA,iBAAU,EAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO,CACL,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,MAAM,SAAS,GAAG,IAAA,qBAAS,EAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAC5G,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;;AA/DH,wCAgEC;AA/DwB,oBAAK,GAAG,CAAC,OAAgB,EAAE,GAAY,EAAU,EAAE;IACxE,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC,AAH2B,CAG1B;AA8DJ,MAAM,WAAW,GAAG,CAAC,GAAY,EAAE,IAAa,EAAU,EAAE;IAC1D,IAAI,SAAS,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IAC9C,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxE,MAAM,cAAc,GAClB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClD,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,GAAG;YACvE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC5B,SAAS,IAAI,KAAK,GAAG,cAAc,CAAC;IACtC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEK,MAAM,cAAc,GAAG,CAAC,KAAqC,EAAE,GAAY,EAAE,IAAa,EAAU,EAAE;IAC3G,MAAM,OAAO,GAAI,KAAwB,CAAC,GAAG,CAAC;IAC9C,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,CAAE,KAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACrF,MAAM,KAAK,GAAI,KAAwB,CAAC,KAAK,CAAC;IAC9C,OAAO,CACL,GAAG,IAAI,EAAE;QACT,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM;YACtC,CAAC,CAAC,IAAA,qBAAS,EACP,GAAG,EACH,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,sBAAc,EAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CACjE;YACH,CAAC,CAAC,EAAE,CAAC,CACR,CAAC;AACJ,CAAC,CAAC;AAdW,QAAA,cAAc,kBAczB;AAEK,MAAM,QAAQ,GAAG,CAAC,GAAY,EAAE,GAAY,EAAE,IAAa,EAAU,EAAE;IAC5E,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC;IACxB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,OAAO,CACL,GAAG,IAAI,EAAE;QACT,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC;QACtB,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM;YAClC,CAAC,CAAC,IAAA,qBAAS,EACP,GAAG,EACH,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,gBAAQ,EAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CACzD;YACH,CAAC,CAAC,EAAE,CAAC,CACR,CAAC;AACJ,CAAC,CAAC;AAbW,QAAA,QAAQ,YAanB"}
1
+ {"version":3,"file":"print.js","sourceRoot":"","sources":["../src/print.ts"],"names":[],"mappings":"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"}
package/lib/types.d.ts CHANGED
@@ -6,8 +6,8 @@ export interface Grammar {
6
6
  cst: Record<string, GrammarNode>;
7
7
  ast?: Record<string, AstNodeExpression>;
8
8
  }
9
- export type GrammarNode = RefNode | TerminalNodeShorthand | TerminalNode | ProductionNodeShorthand | ProductionNode | UnionNode | ListNode;
10
- export type ResolvedGrammarNode = TerminalNode | ProductionNode | UnionNode | ListNode;
9
+ export type GrammarNode = RefNode | TerminalNodeShorthand | TerminalNode | ProductionNodeShorthand | ProductionNode | UnionNode | ListNode | PredicateNode;
10
+ export type ResolvedGrammarNode = TerminalNode | ProductionNode | UnionNode | ListNode | PredicateNode;
11
11
  export type RefNode<Name extends string = string> = {
12
12
  r: Name;
13
13
  };
@@ -30,6 +30,11 @@ export interface ListNode extends GrammarNodeBase {
30
30
  l: GrammarNode;
31
31
  type?: string;
32
32
  }
33
+ export interface PredicateNode extends GrammarNodeBase {
34
+ not?: GrammarNode;
35
+ and?: GrammarNode;
36
+ type?: string;
37
+ }
33
38
  export interface GrammarNodeBase extends AstCodegenOpts {
34
39
  sample?: string;
35
40
  }
package/lib/util.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { Grammar, GrammarNode, ListNode, ProductionNode, ProductionNodeShorthand, RefNode, ResolvedGrammarNode, TerminalNode, TerminalNodeShorthand, UnionNode } from './types';
1
+ import type { Grammar, GrammarNode, ListNode, PredicateNode, ProductionNode, ProductionNodeShorthand, RefNode, ResolvedGrammarNode, TerminalNode, TerminalNodeShorthand, UnionNode } from './types';
2
2
  export declare const scrub: (str: string) => any;
3
3
  export declare const isTerminalShorthandNode: (item: any) => item is TerminalNodeShorthand;
4
4
  export declare const isTerminalNode: (item: any) => item is TerminalNode;
@@ -7,4 +7,5 @@ export declare const isProductionNode: (item: any) => item is ProductionNode;
7
7
  export declare const isUnionNode: (item: any) => item is UnionNode;
8
8
  export declare const isListNode: (item: any) => item is ListNode;
9
9
  export declare const isRefNode: (item: any) => item is RefNode;
10
+ export declare const isPredNode: (item: any) => item is PredicateNode;
10
11
  export declare const delimitedList: (name: string, delim: GrammarNode, elem: ResolvedGrammarNode) => Grammar["cst"];
package/lib/util.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.delimitedList = exports.isRefNode = exports.isListNode = exports.isUnionNode = exports.isProductionNode = exports.isProductionShorthandNode = exports.isTerminalNode = exports.isTerminalShorthandNode = exports.scrub = void 0;
3
+ exports.delimitedList = exports.isPredNode = exports.isRefNode = exports.isListNode = exports.isUnionNode = exports.isProductionNode = exports.isProductionShorthandNode = exports.isTerminalNode = exports.isTerminalShorthandNode = exports.scrub = void 0;
4
4
  const scrub = (str) => JSON.parse(JSON.stringify(str));
5
5
  exports.scrub = scrub;
6
6
  const isTerminalShorthandNode = (item) => typeof item === 'string' || item instanceof RegExp;
@@ -17,6 +17,8 @@ const isListNode = (item) => typeof item === 'object' && item && typeof item.l !
17
17
  exports.isListNode = isListNode;
18
18
  const isRefNode = (item) => typeof item === 'object' && item && typeof item.r === 'string';
19
19
  exports.isRefNode = isRefNode;
20
+ const isPredNode = (item) => typeof item === 'object' && item && (typeof item.not !== 'undefined' || typeof item.and !== 'undefined');
21
+ exports.isPredNode = isPredNode;
20
22
  const delimitedList = (name, delim, elem) => {
21
23
  const itemName = elem.type ?? `${name}Item`;
22
24
  return {
package/lib/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;;AAaO,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAAzD,QAAA,KAAK,SAAoD;AAE/D,MAAM,uBAAuB,GAAG,CAAC,IAAS,EAAiC,EAAE,CAClF,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,YAAY,MAAM,CAAC;AADxC,QAAA,uBAAuB,2BACiB;AAE9C,MAAM,cAAc,GAAG,CAAC,IAAS,EAAwB,EAAE,CAChE,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,CAAC,KAAK,WAAW,IAAI,CAAC,IAAA,+BAAuB,EAAC,IAAI,CAAC,CAAC;AADzF,QAAA,cAAc,kBAC2E;AAE/F,MAAM,yBAAyB,GAAG,CAAC,IAAS,EAAmC,EAAE,CAAC,IAAI,YAAY,KAAK,CAAC;AAAlG,QAAA,yBAAyB,6BAAyE;AAExG,MAAM,gBAAgB,GAAG,CAAC,IAAS,EAA0B,EAAE,CACpE,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,IAAA,iCAAyB,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAD3D,QAAA,gBAAgB,oBAC2C;AAEjE,MAAM,WAAW,GAAG,CAAC,IAAS,EAAqB,EAAE,CAC1D,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,YAAY,KAAK,CAAC;AADjD,QAAA,WAAW,eACsC;AAEvD,MAAM,UAAU,GAAG,CAAC,IAAS,EAAoB,EAAE,CACxD,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,CAAC,KAAK,WAAW,CAAC;AADvD,QAAA,UAAU,cAC6C;AAE7D,MAAM,SAAS,GAAG,CAAC,IAAS,EAAmB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,CAAC,KAAK,QAAQ,CAAC;AAA3G,QAAA,SAAS,aAAkG;AAUjH,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,KAAkB,EAAE,IAAyB,EAAkB,EAAE;IAC3G,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,MAAM,CAAC;IAC5C,OAAO;QACL,CAAC,IAAI,CAAC,EAAE;YACN,CAAC,EAAE;gBACD,EAAC,CAAC,EAAE,QAAQ,EAAC;gBACb;oBACE,CAAC,EAAE;wBACD,CAAC,EAAE,CAAC,KAAK,EAAE,EAAC,CAAC,EAAE,QAAQ,EAAC,CAAC;wBACzB,GAAG,EAAE,CAAC,GAAG,EAAE,aAAa,CAAC;qBAC1B;iBACF;aACF;YACD,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,sBAAsB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SAC3F;QACD,CAAC,QAAQ,CAAC,EAAE,IAAI;KACjB,CAAC;AACJ,CAAC,CAAC;AAjBW,QAAA,aAAa,iBAiBxB"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;;AAcO,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAAzD,QAAA,KAAK,SAAoD;AAE/D,MAAM,uBAAuB,GAAG,CAAC,IAAS,EAAiC,EAAE,CAClF,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,YAAY,MAAM,CAAC;AADxC,QAAA,uBAAuB,2BACiB;AAE9C,MAAM,cAAc,GAAG,CAAC,IAAS,EAAwB,EAAE,CAChE,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,CAAC,KAAK,WAAW,IAAI,CAAC,IAAA,+BAAuB,EAAC,IAAI,CAAC,CAAC;AADzF,QAAA,cAAc,kBAC2E;AAE/F,MAAM,yBAAyB,GAAG,CAAC,IAAS,EAAmC,EAAE,CAAC,IAAI,YAAY,KAAK,CAAC;AAAlG,QAAA,yBAAyB,6BAAyE;AAExG,MAAM,gBAAgB,GAAG,CAAC,IAAS,EAA0B,EAAE,CACpE,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,IAAA,iCAAyB,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAD3D,QAAA,gBAAgB,oBAC2C;AAEjE,MAAM,WAAW,GAAG,CAAC,IAAS,EAAqB,EAAE,CAC1D,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,YAAY,KAAK,CAAC;AADjD,QAAA,WAAW,eACsC;AAEvD,MAAM,UAAU,GAAG,CAAC,IAAS,EAAoB,EAAE,CACxD,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,CAAC,KAAK,WAAW,CAAC;AADvD,QAAA,UAAU,cAC6C;AAE7D,MAAM,SAAS,GAAG,CAAC,IAAS,EAAmB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,CAAC,KAAK,QAAQ,CAAC;AAA3G,QAAA,SAAS,aAAkG;AAEjH,MAAM,UAAU,GAAG,CAAC,IAAS,EAAyB,EAAE,CAC7D,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,KAAK,WAAW,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,WAAW,CAAC,CAAC;AAD9F,QAAA,UAAU,cACoF;AAUpG,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,KAAkB,EAAE,IAAyB,EAAkB,EAAE;IAC3G,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,MAAM,CAAC;IAC5C,OAAO;QACL,CAAC,IAAI,CAAC,EAAE;YACN,CAAC,EAAE;gBACD,EAAC,CAAC,EAAE,QAAQ,EAAC;gBACb;oBACE,CAAC,EAAE;wBACD,CAAC,EAAE,CAAC,KAAK,EAAE,EAAC,CAAC,EAAE,QAAQ,EAAC,CAAC;wBACzB,GAAG,EAAE,CAAC,GAAG,EAAE,aAAa,CAAC;qBAC1B;iBACF;aACF;YACD,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,sBAAsB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SAC3F;QACD,CAAC,QAAQ,CAAC,EAAE,IAAI;KACjB,CAAC;AACJ,CAAC,CAAC;AAjBW,QAAA,aAAa,iBAiBxB"}
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
- "version": "1.0.0",
7
+ "version": "1.1.0",
8
8
  "description": "High-performance JIT parser",
9
9
  "author": {
10
10
  "name": "streamich",