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 +44 -1
- package/lib/codegen/CodegenGrammar.d.ts +2 -1
- package/lib/codegen/CodegenGrammar.js +12 -0
- package/lib/codegen/CodegenGrammar.js.map +1 -1
- package/lib/codegen/CodegenPredicate.d.ts +15 -0
- package/lib/codegen/CodegenPredicate.js +39 -0
- package/lib/codegen/CodegenPredicate.js.map +1 -0
- package/lib/generator.js +2 -0
- package/lib/generator.js.map +1 -1
- package/lib/print.js +6 -0
- package/lib/print.js.map +1 -1
- package/lib/types.d.ts +7 -2
- package/lib/util.d.ts +2 -1
- package/lib/util.js +3 -1
- package/lib/util.js.map +1 -1
- package/package.json +1 -1
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
|
|
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":";;;AAAA,qEAAwD;AACxD,uDAAkD;AAClD,2DAAsD;AACtD,iDAA4C;
|
|
1
|
+
{"version":3,"file":"CodegenGrammar.js","sourceRoot":"","sources":["../../src/codegen/CodegenGrammar.ts"],"names":[],"mappings":";;;AAAA,qEAAwD;AACxD,uDAAkD;AAClD,2DAAsD;AACtD,iDAA4C;AAa5C,+CAA0C;AAC1C,yDAAoD;AACpD,wCAA0C;AAC1C,uCAAkC;AAClC,2DAAsD;AACtD,kCASiB;AAEjB,MAAa,cAAc;IASzB,YACkB,OAAgB,EACb,MAAsB,IAAI,wBAAc,EAAE;QAD7C,YAAO,GAAP,OAAO,CAAS;QACb,QAAG,GAAH,GAAG,CAAuC;QAL5C,YAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;QACrC,aAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IAKtD,CAAC;IAEM,WAAW,CAAC,IAAiB,EAAE,OAAiB;QACxD,IAAI,IAAA,8BAAuB,EAAC,IAAI,CAAC,IAAI,IAAA,qBAAc,EAAC,IAAI,CAAC,EAAE,CAAC;YAC1D,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,IAAA,gCAAyB,EAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC,iBAAiB,CAAC,EAAC,CAAC,EAAE,IAAI,EAAC,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,IAAA,uBAAgB,EAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,IAAA,kBAAW,EAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,IAAA,iBAAU,EAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,IAAA,iBAAU,EAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,IAAA,gBAAS,EAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,IAAiB;QACrC,IAAI,IAAA,gBAAS,EAAC,IAAI,CAAC,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,OAAO;gBAAE,OAAO,OAAO,CAAC,MAAM,CAAC;QACrC,CAAC;QACD,OAAO,IAAA,mBAAI,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;IAES,eAAe,CAAC,QAA8C,EAAE,OAAiB;QACzF,MAAM,IAAI,GAAiB,IAAA,8BAAuB,EAAC,QAAQ,CAAC;YAC1D,CAAC,CAAC,EAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAC;YAChD,CAAC,CAAC,QAAQ,CAAC;QACb,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YACtD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,GAAG,KAAK,KAAK,CAAC;gBAAE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACrC,CAAC;QACD,OAAO,KAAP,OAAO,GAAK,IAAI,iBAAO,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,EAAC;QAC7C,OAAO,CAAC,MAAM,GAAG,iCAAe,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAClE,OAAO,CAAC,KAAK,GAAG,qCAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACnE,OAAO,OAAO,CAAC;IACjB,CAAC;IAES,iBAAiB,CAAC,IAAoB,EAAE,OAAiB;QACjE,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5E,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YACtD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,GAAG,KAAK,KAAK,CAAC;gBAAE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACrC,CAAC;QACD,OAAO,KAAP,OAAO,GAAK,IAAI,iBAAO,CAAC,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC,EAAC;QACnD,OAAO,CAAC,MAAM,GAAG,qCAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7E,OAAO,CAAC,KAAK,GAAG,qCAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACnE,OAAO,OAAO,CAAC;IACjB,CAAC;IAES,YAAY,CAAC,IAAe,EAAE,OAAiB;QACvD,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YACtD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,GAAG,KAAK,KAAK,CAAC;gBAAE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACrC,CAAC;QACD,OAAO,KAAP,OAAO,GAAK,IAAI,iBAAO,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,EAAC;QAC9C,OAAO,CAAC,MAAM,GAAG,2BAAY,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACxE,OAAO,CAAC,KAAK,GAAG,qCAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACnE,OAAO,OAAO,CAAC;IACjB,CAAC;IAES,WAAW,CAAC,IAAc,EAAE,OAAiB;QACrD,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YACtD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,GAAG,KAAK,KAAK,CAAC;gBAAE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACrC,CAAC;QACD,OAAO,KAAP,OAAO,GAAK,IAAI,iBAAO,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,EAAC;QAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,MAAM,GAAG,yBAAW,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3E,OAAO,CAAC,KAAK,GAAG,qCAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACnE,OAAO,OAAO,CAAC;IACjB,CAAC;IAES,gBAAgB,CAAC,IAAmB,EAAE,OAAiB;QAC/D,MAAM,KAAK,GAAgB,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAC,CAAC,CAAC,CAAE,IAAI,CAAC,GAAmB,CAAC;QAChG,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,KAAP,OAAO,GAAK,IAAI,iBAAO,CAAC,IAAI,CAAC,IAAI,IAAI,WAAW,CAAC,EAAC;QAClD,OAAO,CAAC,MAAM,GAAG,mCAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAChF,OAAO,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,WAAW,CAAC,IAAY;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,GAAG,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,IAAI,CAAC,CAAC;QAClC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,OAAO;QACZ,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrD,OAAO,OAAO,CAAC,MAAM,CAAC;IACxB,CAAC;IAEM,IAAI,CAAC,IAAa,EAAE,OAAgC;QACzD,MAAM,KAAK,GAAc,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;YAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/B,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;gBAC/B,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAC1B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IAEM,SAAS,CAAC,GAAY,EAAE,GAAW;QACxC,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC;;AAzIH,wCA0IC;AAzIwB,sBAAO,GAAG,CAAC,OAAgB,EAAE,GAAoB,EAAU,EAAE;IAClF,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACjD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;AAC3B,CAAC,AAH6B,CAG5B"}
|
|
@@ -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
package/lib/generator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":";;;;AAAA,
|
|
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,
|
|
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":";;;
|
|
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"}
|