parseman 0.50.6 → 0.51.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/dist/analysis/choice-cost.d.ts.map +1 -1
- package/dist/analysis/commitment.d.ts.map +1 -1
- package/dist/analysis/diagnostics.js +214 -67
- package/dist/analysis/diagnostics.js.map +2 -2
- package/dist/analysis/duplication.d.ts.map +1 -1
- package/dist/analysis/gating.d.ts.map +1 -1
- package/dist/cli/index.js +220 -68
- package/dist/cli/index.js.map +2 -2
- package/dist/combinators/dispatch.d.ts.map +1 -1
- package/dist/combinators/first-set.d.ts +2 -26
- package/dist/combinators/first-set.d.ts.map +1 -1
- package/dist/combinators/scanTo.d.ts +23 -1
- package/dist/combinators/scanTo.d.ts.map +1 -1
- package/dist/compiler/fields.d.ts.map +1 -1
- package/dist/compiler/grammar-coverage-ids.d.ts.map +1 -1
- package/dist/compiler/ir-serialize.d.ts.map +1 -1
- package/dist/compiler/token-capability.js +40 -29
- package/dist/compiler/token-capability.js.map +1 -1
- package/dist/coverage.d.ts.map +1 -1
- package/dist/cst/reflection.d.ts.map +1 -1
- package/dist/index.js +241 -74
- package/dist/index.js.map +2 -2
- package/dist/plugin/index.js +228 -71
- package/dist/plugin/index.js.map +2 -2
- package/dist/spec/index.js +164 -48
- package/dist/spec/index.js.map +2 -2
- package/dist/table/assemble.d.ts.map +1 -1
- package/dist/table/emit.d.ts.map +1 -1
- package/dist/table/encode.d.ts.map +1 -1
- package/dist/table/exec.d.ts.map +1 -1
- package/dist/table/index.js +220 -68
- package/dist/table/index.js.map +2 -2
- package/dist/table/program.d.ts +2 -0
- package/dist/table/program.d.ts.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/analysis/choice-cost.ts +6 -1
- package/src/analysis/commitment.ts +10 -2
- package/src/analysis/duplication.ts +7 -2
- package/src/analysis/gating.ts +6 -1
- package/src/analysis/rebuild.ts +1 -1
- package/src/combinators/dispatch.ts +4 -1
- package/src/combinators/first-set.ts +58 -36
- package/src/combinators/scanTo.ts +163 -9
- package/src/compiler/fields.ts +8 -2
- package/src/compiler/grammar-coverage-ids.ts +6 -1
- package/src/compiler/ir-serialize.ts +7 -2
- package/src/compiler/token-alphabet.ts +1 -1
- package/src/coverage.ts +7 -1
- package/src/cst/reflection.ts +6 -1
- package/src/table/assemble.ts +11 -1
- package/src/table/emit.ts +4 -0
- package/src/table/encode.ts +16 -8
- package/src/table/exec.ts +7 -1
- package/src/table/program.ts +2 -0
- package/src/types.ts +1 -1
- package/src/version.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/combinators/dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAgB,mBAAmB,EAAyC,MAAM,aAAa,CAAA;AAIvH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAA;IAC9B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI;IACnC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;IAC5B,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAA;IACvC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAA;IAC9B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhF,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;IACjC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAA;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,OAAO,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAA;AACtG,MAAM,MAAM,mBAAmB,GAAG;IAChC,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B,CAAA;AACD,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,EAClC,GAAG,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EAC/B,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,KAClB,YAAY,CAAC,CAAC,CAAC,CAAA;AACpB,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE,CAAA;AACxD,MAAM,MAAM,oBAAoB,GAAG,eAAe,GAAG,qBAAqB,CAAA;AAE1E,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,YAAY,CAAC,MAAM,CAAC,CAAC,GAC9C,CAAC,GACD,CAAC,SAAS,mBAAmB,CAAC,MAAM,CAAC,CAAC,GACtC,CAAC,GACD,CAAC,SAAS,iBAAiB,CAAC,MAAM,CAAC,CAAC,GACpC,CAAC,GACD,KAAK,CAAA;AACT,KAAK,SAAS,CAAC,CAAC,SAAS,SAAS,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI;KACzD,CAAC,IAAI,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/B,CAAC,MAAM,CAAC,CAAA;AAET,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,IAAI,GAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAa,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/combinators/dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,7 @@ export type FinalChoiceClassification = {
|
|
|
19
19
|
readonly nullable: readonly boolean[];
|
|
20
20
|
};
|
|
21
21
|
/** Resolve final arm winners before deciding whether a choice is exclusive. */
|
|
22
|
-
export declare function classifyFinalChoice(arms: readonly Combinator<unknown>[], resolve?: RefResolver): FinalChoiceClassification;
|
|
22
|
+
export declare function classifyFinalChoice(arms: readonly Combinator<unknown>[], resolve?: RefResolver, activeTrivia?: Combinator<unknown> | null): FinalChoiceClassification;
|
|
23
23
|
export declare function union(a: FirstSet, b: FirstSet): FirstSet;
|
|
24
24
|
export declare function intersects(a: FirstSet, b: FirstSet): boolean;
|
|
25
25
|
export declare function fromChar(code: number): FirstSet;
|
|
@@ -60,30 +60,6 @@ export declare function matchesEmpty(p: Combinator<unknown>, seen?: Set<Combinat
|
|
|
60
60
|
* (see `isPositiveLookahead` and `sequenceFirstSet`).
|
|
61
61
|
*/
|
|
62
62
|
export declare function isZeroWidthAssertion(p: Combinator<unknown>): boolean;
|
|
63
|
-
/**
|
|
64
|
-
* A POSITIVE zero-width assertion (`peek(X)`). It consumes nothing, so like
|
|
65
|
-
* `not(X)` it does not contribute a first char of its own — but it does REQUIRE
|
|
66
|
-
* that X match here, so `peek(X) Y` can only start with a char in
|
|
67
|
-
* firstSet(X) ∩ firstSet(Y). That intersection is what makes a leading `peek()`
|
|
68
|
-
* gate its choice arm; `not(not(X))`, the only previous spelling, reports `any()`
|
|
69
|
-
* and poisons the dispatch instead.
|
|
70
|
-
*
|
|
71
|
-
* Soundness: first-sets are SUPERSETS of the true first chars, and
|
|
72
|
-
* (A ⊇ a) ∧ (B ⊇ b) ⇒ A ∩ B ⊇ a ∩ b — so intersecting stays a superset and can
|
|
73
|
-
* never skip a real match. A NULLABLE body succeeds on the empty string and
|
|
74
|
-
* therefore constrains nothing; `peek()` reports `any()` in that case, which the
|
|
75
|
-
* intersection treats as "no constraint".
|
|
76
|
-
*/
|
|
77
|
-
export declare function isPositiveLookahead(p: Combinator<unknown>): boolean;
|
|
78
|
-
/**
|
|
79
|
-
* First-set of a sequence: union each term's first-set through the NULLABLE
|
|
80
|
-
* PREFIX — a leading `optional(…)` / `many(…)` / nullable term can be skipped, so
|
|
81
|
-
* the sequence can begin with a LATER term's first char. Stop at (and include)
|
|
82
|
-
* the first non-nullable term. (`parsers[0].firstSet` alone under-approximates
|
|
83
|
-
* and silently breaks first-char dispatch — see the InterpolatedSelector bug.)
|
|
84
|
-
* A leading zero-width assertion (`not(…)`) is nullable but contributes NOTHING to
|
|
85
|
-
* the first-set (see `isZeroWidthAssertion`) — its `any` must not poison the union.
|
|
86
|
-
*/
|
|
87
63
|
export declare function sequenceFirstSet(parsers: readonly Combinator<unknown>[]): FirstSet;
|
|
88
64
|
/**
|
|
89
65
|
* Deep first-set that RESOLVES `lazy`/`ref` combinators to their targets. The
|
|
@@ -102,5 +78,5 @@ export declare function sequenceFirstSet(parsers: readonly Combinator<unknown>[]
|
|
|
102
78
|
* see `RefResolver`. Diagnostic-only today: it is what lets the gating analysis ask
|
|
103
79
|
* the question at the site where the hole actually HAS an answer.
|
|
104
80
|
*/
|
|
105
|
-
export declare function firstSetOf(p: Combinator<unknown>, seen?: Set<Combinator<unknown>>, resolve?: RefResolver): FirstSet;
|
|
81
|
+
export declare function firstSetOf(p: Combinator<unknown>, seen?: Set<Combinator<unknown>>, resolve?: RefResolver, activeTrivia?: Combinator<unknown> | null): FirstSet;
|
|
106
82
|
//# sourceMappingURL=first-set.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"first-set.d.ts","sourceRoot":"","sources":["../../src/combinators/first-set.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,QAAQ,EAAE,UAAU,EAAa,MAAM,aAAa,CAAA;AAE7E;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,CAAC,OAAO,CAAC,GAAG,SAAS,CAAA;AAE3E,+EAA+E;AAC/E,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAA;IACvC,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAA;CACtC,CAAA;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,UAAU,CAAC,OAAO,CAAC,EAAE,EACpC,OAAO,CAAC,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"first-set.d.ts","sourceRoot":"","sources":["../../src/combinators/first-set.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,QAAQ,EAAE,UAAU,EAAa,MAAM,aAAa,CAAA;AAE7E;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,CAAC,OAAO,CAAC,GAAG,SAAS,CAAA;AAE3E,+EAA+E;AAC/E,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAA;IACvC,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAA;CACtC,CAAA;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,UAAU,CAAC,OAAO,CAAC,EAAE,EACpC,OAAO,CAAC,EAAE,WAAW,EACrB,YAAY,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,IAAI,GACxC,yBAAyB,CAoC3B;AA6BD,wBAAgB,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAKxD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAS5D;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAE/C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAQnG;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,QAAQ,CAE1D;AAED,wBAAgB,GAAG,IAAI,QAAQ,CAE9B;AAED,wBAAgB,KAAK,IAAI,QAAQ,CAEhC;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EACtB,IAAI,GAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAa,EAC1C,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAcT;AAsDD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,OAAO,CAKpE;AAoFD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,UAAU,CAAC,OAAO,CAAC,EAAE,GAAG,QAAQ,CAElF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,UAAU,CACxB,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EACtB,IAAI,GAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAa,EAC1C,OAAO,CAAC,EAAE,WAAW,EACrB,YAAY,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,IAAI,GACxC,QAAQ,CAWV"}
|
|
@@ -18,6 +18,28 @@ export type ScanToOptions = {
|
|
|
18
18
|
* everything consumed so far. Default false (fail at EOF).
|
|
19
19
|
*/
|
|
20
20
|
orEOF?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* A delimiter owned by the surrounding grammar that may terminate an
|
|
23
|
+
* unfinished scan. Unlike putting that delimiter in `sentinel`, `scanTo`
|
|
24
|
+
* keeps looking for a real sentinel so the same delimiter may appear in a
|
|
25
|
+
* complete payload.
|
|
26
|
+
*
|
|
27
|
+
* This mode is intended for paired sentinels such as quotes. Once a recovery
|
|
28
|
+
* point has been seen, later sentinels are counted as alternating close/open
|
|
29
|
+
* delimiters. At the next outer recovery point (or EOF), an odd count accepts
|
|
30
|
+
* the first sentinel; an even count returns the first recovery point. This
|
|
31
|
+
* preserves complete payloads such as `` `let x = 1; x` `` without pairing an
|
|
32
|
+
* unfinished payload with a later construct's opening delimiter.
|
|
33
|
+
*/
|
|
34
|
+
recoverAt?: Combinator<unknown>;
|
|
35
|
+
/**
|
|
36
|
+
* An unconditional recovery boundary. The scan resolves at this position
|
|
37
|
+
* using the same paired-sentinel decision as EOF. A hard stop is checked at
|
|
38
|
+
* the current scan position before opaque skippers. A skipper that began at an
|
|
39
|
+
* earlier position remains opaque throughout its matched span. Use this for
|
|
40
|
+
* boundaries such as a line end after an escape character.
|
|
41
|
+
*/
|
|
42
|
+
stopAt?: Combinator<unknown>;
|
|
21
43
|
/**
|
|
22
44
|
* `balanced()` only. Make an unmatched close a genuine FAILURE instead of a
|
|
23
45
|
* recovered one.
|
|
@@ -65,7 +87,7 @@ export declare function resolveScanSkip(explicitSkip: Combinator<unknown>[], raw
|
|
|
65
87
|
* skip: [cssComment, stringLit, balanced('(', ')'), balanced('[', ']')],
|
|
66
88
|
* })
|
|
67
89
|
*/
|
|
68
|
-
export declare function scanTo(sentinel: Combinator<unknown>, { skip, raw, orEOF }?: ScanToOptions): Combinator<string>;
|
|
90
|
+
export declare function scanTo(sentinel: Combinator<unknown>, { skip, raw, orEOF, recoverAt, stopAt }?: ScanToOptions): Combinator<string>;
|
|
69
91
|
/** Codegen marker: a balanced combinator that must re-resolve ambient scanSkip
|
|
70
92
|
* into its interior at emit time (the compiled mirror of the interpreter wrapper). */
|
|
71
93
|
export type BalancedAmbient = Combinator<string> & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanTo.d.ts","sourceRoot":"","sources":["../../src/combinators/scanTo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAA2B,MAAM,aAAa,CAAA;AAepF,MAAM,MAAM,aAAa,GAAG;IAC1B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAA;IAC5B;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAA;IACb;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,EACnC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,YAAY,GAChB,UAAU,CAAC,OAAO,CAAC,EAAE,CAUvB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CACpB,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,EAC7B,EAAE,IAAI,EAAE,GAAW,EAAE,KAAa,EAAE,GAAE,aAAkB,
|
|
1
|
+
{"version":3,"file":"scanTo.d.ts","sourceRoot":"","sources":["../../src/combinators/scanTo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAA2B,MAAM,aAAa,CAAA;AAepF,MAAM,MAAM,aAAa,GAAG;IAC1B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAA;IAC5B;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAA;IACb;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;IAC/B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;IAC5B;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,EACnC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,YAAY,GAChB,UAAU,CAAC,OAAO,CAAC,EAAE,CAUvB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CACpB,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,EAC7B,EAAE,IAAI,EAAE,GAAW,EAAE,KAAa,EAAE,SAAS,EAAE,MAAM,EAAE,GAAE,aAAkB,GAC1E,UAAU,CAAC,MAAM,CAAC,CA0MpB;AAED;sFACsF;AACtF,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG;IACjD,gBAAgB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CACrG,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG;IAChD,SAAS,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CAC5C,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG;IAC9C,aAAa,CAAC,EAAE;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAA;QAC9B,MAAM,EAAE,OAAO,CAAA;QACf,GAAG,EAAE,OAAO,CAAA;KACb,CAAA;CACF,CAAA;AAUD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,aAAkB,GAC1B,UAAU,CAAC,MAAM,CAAC,CAwDpB;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,EAC5B,MAAM,UAAQ,GACb,UAAU,CAAC,MAAM,CAAC,CA0DpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/compiler/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGlE,KAAK,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAElD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAKtD;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,IAAI,GAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAa,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/compiler/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGlE,KAAK,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAElD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAKtD;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,IAAI,GAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAa,GAAG,OAAO,CAsC9G;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,IAAI,GAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAa,GAAG,OAAO,CAE/G;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,IAAI,GAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAa,GAAG,OAAO,CAEnH;AAyDD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,IAAI,GAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAa,GAAG,OAAO,CAsCtH;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAW/J"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grammar-coverage-ids.d.ts","sourceRoot":"","sources":["../../src/compiler/grammar-coverage-ids.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,aAAa,CAAA;AAGxD,MAAM,MAAM,yBAAyB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,cAAc,GAAG,OAAO,CAAA;CAAE,CAAA;AAC9G,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,SAAS,yBAAyB,EAAE,CAAA;IACjD,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC,CAAA;IACpD,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC,CAAA;IACvD;gFAC4E;IAC5E,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAA;IAC1C,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC,CAAA;IACnD,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAA;CACxC,CAAA;
|
|
1
|
+
{"version":3,"file":"grammar-coverage-ids.d.ts","sourceRoot":"","sources":["../../src/compiler/grammar-coverage-ids.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,aAAa,CAAA;AAGxD,MAAM,MAAM,yBAAyB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,cAAc,GAAG,OAAO,CAAA;CAAE,CAAA;AAC9G,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,SAAS,yBAAyB,EAAE,CAAA;IACjD,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC,CAAA;IACpD,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC,CAAA;IACvD;gFAC4E;IAC5E,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAA;IAC1C,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC,CAAA;IACnD,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAA;CACxC,CAAA;AAuDD;;yCAEyC;AACzC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,SAAS,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,mBAAmB,CA8DhK"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ir-serialize.d.ts","sourceRoot":"","sources":["../../src/compiler/ir-serialize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAkC,MAAM,aAAa,CAAA;AAuB7E,KAAK,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"ir-serialize.d.ts","sourceRoot":"","sources":["../../src/compiler/ir-serialize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAkC,MAAM,aAAa,CAAA;AAuB7E,KAAK,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;AAsG/B,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAC/C,QAAQ,CAAC,EAAE,SAAS,IAAI,EAAE,GAAG,IAAI,GAChC,MAAM,GAAG,IAAI,CAUf;AAED;;oFAEoF;AACpF,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAkH/D"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// src/combinators/first-set.ts
|
|
2
|
-
function classifyFinalChoice(arms, resolve) {
|
|
2
|
+
function classifyFinalChoice(arms, resolve, activeTrivia) {
|
|
3
3
|
const firstSets = [];
|
|
4
4
|
const nullable = [];
|
|
5
5
|
let exclusive = true;
|
|
6
6
|
for (const arm of arms) {
|
|
7
7
|
const empty2 = matchesEmpty(arm, /* @__PURE__ */ new Set(), resolve);
|
|
8
8
|
nullable.push(empty2);
|
|
9
|
-
firstSets.push(empty2 ? { kind: "any" } : firstSetOf(arm, /* @__PURE__ */ new Set(), resolve));
|
|
9
|
+
firstSets.push(empty2 ? { kind: "any" } : firstSetOf(arm, /* @__PURE__ */ new Set(), resolve, activeTrivia));
|
|
10
10
|
if (empty2) exclusive = false;
|
|
11
11
|
}
|
|
12
12
|
if (exclusive) {
|
|
@@ -145,11 +145,10 @@ function matchesEmptyBody(p, seen, resolve) {
|
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
147
|
function isZeroWidthAssertion(p) {
|
|
148
|
-
|
|
149
|
-
return tag === "not" || tag === "adjacency";
|
|
148
|
+
return p._tag === "not" || p._tag === "adjacency";
|
|
150
149
|
}
|
|
151
150
|
function isPositiveLookahead(p) {
|
|
152
|
-
return p.
|
|
151
|
+
return p._tag === "peek";
|
|
153
152
|
}
|
|
154
153
|
function narrowBy(acc, constraint) {
|
|
155
154
|
if (constraint.kind === "any") return acc;
|
|
@@ -165,21 +164,39 @@ function narrowBy(acc, constraint) {
|
|
|
165
164
|
return ranges.length === 0 ? { kind: "empty" } : { kind: "ranges", ranges };
|
|
166
165
|
}
|
|
167
166
|
function applyAssertion(fs, assertion) {
|
|
168
|
-
|
|
169
|
-
if (fs.kind === "empty") return assertion;
|
|
170
|
-
return narrowBy(fs, assertion) ?? fs;
|
|
167
|
+
return assertion === null ? fs : fs.kind === "empty" ? assertion : narrowBy(fs, assertion);
|
|
171
168
|
}
|
|
172
|
-
function
|
|
169
|
+
function sequenceSet(parsers, fs, empties, trivia) {
|
|
170
|
+
const afterBoundary = (i) => {
|
|
171
|
+
const rest = at(i);
|
|
172
|
+
return trivia ? union(rest, fs(trivia)) : rest;
|
|
173
|
+
};
|
|
174
|
+
const at = (i) => {
|
|
175
|
+
const p = parsers[i];
|
|
176
|
+
if (isPositiveLookahead(p)) {
|
|
177
|
+
const constraint = fs(p);
|
|
178
|
+
return i + 1 === parsers.length ? constraint : applyAssertion(afterBoundary(i + 1), constraint);
|
|
179
|
+
}
|
|
180
|
+
if (isZeroWidthAssertion(p)) {
|
|
181
|
+
return i + 1 === parsers.length ? empty() : afterBoundary(i + 1);
|
|
182
|
+
}
|
|
183
|
+
const first = fs(p);
|
|
184
|
+
if (!empties(p) || i + 1 === parsers.length) return first;
|
|
185
|
+
return union(first, afterBoundary(i + 1));
|
|
186
|
+
};
|
|
187
|
+
return at(0);
|
|
188
|
+
}
|
|
189
|
+
function firstSetOf(p, seen = /* @__PURE__ */ new Set(), resolve, activeTrivia) {
|
|
173
190
|
if (seen.has(p)) return any();
|
|
174
191
|
seen.add(p);
|
|
175
192
|
try {
|
|
176
|
-
return firstSetBody(p, seen, resolve);
|
|
193
|
+
return firstSetBody(p, seen, resolve, activeTrivia);
|
|
177
194
|
} finally {
|
|
178
195
|
seen.delete(p);
|
|
179
196
|
}
|
|
180
197
|
}
|
|
181
|
-
function firstSetBody(p, seen, resolve) {
|
|
182
|
-
const fs = (c) => firstSetOf(c, seen, resolve);
|
|
198
|
+
function firstSetBody(p, seen, resolve, activeTrivia) {
|
|
199
|
+
const fs = (c) => firstSetOf(c, seen, resolve, activeTrivia);
|
|
183
200
|
const empties = (c) => matchesEmpty(c, /* @__PURE__ */ new Set(), resolve);
|
|
184
201
|
const d = p._def;
|
|
185
202
|
switch (d.tag) {
|
|
@@ -205,17 +222,7 @@ function firstSetBody(p, seen, resolve) {
|
|
|
205
222
|
return out;
|
|
206
223
|
}
|
|
207
224
|
case "sequence": {
|
|
208
|
-
|
|
209
|
-
let assertion = null;
|
|
210
|
-
for (const term of d.parsers) {
|
|
211
|
-
if (isPositiveLookahead(term)) {
|
|
212
|
-
assertion = narrowBy(assertion, fs(term));
|
|
213
|
-
continue;
|
|
214
|
-
}
|
|
215
|
-
if (!isZeroWidthAssertion(term)) out = union(out, fs(term));
|
|
216
|
-
if (!empties(term)) return applyAssertion(out, assertion);
|
|
217
|
-
}
|
|
218
|
-
return applyAssertion(out, assertion);
|
|
225
|
+
return sequenceSet(d.parsers, fs, empties, activeTrivia);
|
|
219
226
|
}
|
|
220
227
|
case "peek": {
|
|
221
228
|
const inner = d.parser;
|
|
@@ -230,12 +237,16 @@ function firstSetBody(p, seen, resolve) {
|
|
|
230
237
|
case "token":
|
|
231
238
|
case "leaf":
|
|
232
239
|
case "node":
|
|
233
|
-
case "grammar":
|
|
234
|
-
case "expect":
|
|
235
|
-
return fs(d.parser);
|
|
236
240
|
case "sepBy":
|
|
241
|
+
case "expect":
|
|
237
242
|
return fs(d.parser);
|
|
238
|
-
|
|
243
|
+
case "grammar":
|
|
244
|
+
return firstSetOf(
|
|
245
|
+
d.parser,
|
|
246
|
+
seen,
|
|
247
|
+
resolve,
|
|
248
|
+
d.clearTrivia ? null : d.triviaParser ?? activeTrivia
|
|
249
|
+
);
|
|
239
250
|
default:
|
|
240
251
|
return p._meta.firstSet;
|
|
241
252
|
}
|
|
@@ -274,7 +285,7 @@ function parserUsesRouted(parser, seen = /* @__PURE__ */ new Set()) {
|
|
|
274
285
|
case "grammar":
|
|
275
286
|
return parserUsesRouted(def.parser, seen) || (def.triviaParser ? parserUsesRouted(def.triviaParser, seen) : false);
|
|
276
287
|
case "scanTo":
|
|
277
|
-
return parserUsesRouted(def.sentinel, seen) || def.skip.some((entry) => parserUsesRouted(entry, seen));
|
|
288
|
+
return parserUsesRouted(def.sentinel, seen) || def.skip.some((entry) => parserUsesRouted(entry, seen)) || def.recoverAt !== void 0 && parserUsesRouted(def.recoverAt, seen) || def.stopAt !== void 0 && parserUsesRouted(def.stopAt, seen);
|
|
278
289
|
case "recover":
|
|
279
290
|
return parserUsesRouted(def.parser, seen) || parserUsesRouted(def.sentinel, seen);
|
|
280
291
|
case "lazy":
|
|
@@ -796,7 +807,7 @@ function tokenChildren(p, resolve) {
|
|
|
796
807
|
if (v !== void 0) out.push(v);
|
|
797
808
|
};
|
|
798
809
|
const rec = d;
|
|
799
|
-
for (const k of ["parser", "main", "skipped", "separator", "selector", "sentinel", "fallback", "otherwise", "triviaParser"]) {
|
|
810
|
+
for (const k of ["parser", "main", "skipped", "separator", "selector", "sentinel", "recoverAt", "stopAt", "fallback", "otherwise", "triviaParser"]) {
|
|
800
811
|
const v = rec[k];
|
|
801
812
|
if (v !== null && typeof v === "object" && "_def" in v) push(v);
|
|
802
813
|
}
|