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.
Files changed (59) hide show
  1. package/dist/analysis/choice-cost.d.ts.map +1 -1
  2. package/dist/analysis/commitment.d.ts.map +1 -1
  3. package/dist/analysis/diagnostics.js +214 -67
  4. package/dist/analysis/diagnostics.js.map +2 -2
  5. package/dist/analysis/duplication.d.ts.map +1 -1
  6. package/dist/analysis/gating.d.ts.map +1 -1
  7. package/dist/cli/index.js +220 -68
  8. package/dist/cli/index.js.map +2 -2
  9. package/dist/combinators/dispatch.d.ts.map +1 -1
  10. package/dist/combinators/first-set.d.ts +2 -26
  11. package/dist/combinators/first-set.d.ts.map +1 -1
  12. package/dist/combinators/scanTo.d.ts +23 -1
  13. package/dist/combinators/scanTo.d.ts.map +1 -1
  14. package/dist/compiler/fields.d.ts.map +1 -1
  15. package/dist/compiler/grammar-coverage-ids.d.ts.map +1 -1
  16. package/dist/compiler/ir-serialize.d.ts.map +1 -1
  17. package/dist/compiler/token-capability.js +40 -29
  18. package/dist/compiler/token-capability.js.map +1 -1
  19. package/dist/coverage.d.ts.map +1 -1
  20. package/dist/cst/reflection.d.ts.map +1 -1
  21. package/dist/index.js +241 -74
  22. package/dist/index.js.map +2 -2
  23. package/dist/plugin/index.js +228 -71
  24. package/dist/plugin/index.js.map +2 -2
  25. package/dist/spec/index.js +164 -48
  26. package/dist/spec/index.js.map +2 -2
  27. package/dist/table/assemble.d.ts.map +1 -1
  28. package/dist/table/emit.d.ts.map +1 -1
  29. package/dist/table/encode.d.ts.map +1 -1
  30. package/dist/table/exec.d.ts.map +1 -1
  31. package/dist/table/index.js +220 -68
  32. package/dist/table/index.js.map +2 -2
  33. package/dist/table/program.d.ts +2 -0
  34. package/dist/table/program.d.ts.map +1 -1
  35. package/dist/types.d.ts +2 -0
  36. package/dist/types.d.ts.map +1 -1
  37. package/dist/version.d.ts +1 -1
  38. package/package.json +1 -1
  39. package/src/analysis/choice-cost.ts +6 -1
  40. package/src/analysis/commitment.ts +10 -2
  41. package/src/analysis/duplication.ts +7 -2
  42. package/src/analysis/gating.ts +6 -1
  43. package/src/analysis/rebuild.ts +1 -1
  44. package/src/combinators/dispatch.ts +4 -1
  45. package/src/combinators/first-set.ts +58 -36
  46. package/src/combinators/scanTo.ts +163 -9
  47. package/src/compiler/fields.ts +8 -2
  48. package/src/compiler/grammar-coverage-ids.ts +6 -1
  49. package/src/compiler/ir-serialize.ts +7 -2
  50. package/src/compiler/token-alphabet.ts +1 -1
  51. package/src/coverage.ts +7 -1
  52. package/src/cst/reflection.ts +6 -1
  53. package/src/table/assemble.ts +11 -1
  54. package/src/table/emit.ts +4 -0
  55. package/src/table/encode.ts +16 -8
  56. package/src/table/exec.ts +7 -1
  57. package/src/table/program.ts +2 -0
  58. package/src/types.ts +1 -1
  59. package/src/version.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/combinators/dispatch.ts"],"names":[],"mappings":"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"}
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,GACpB,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,CAMpE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,OAAO,CAEnE;AA6BD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,UAAU,CAAC,OAAO,CAAC,EAAE,GAAG,QAAQ,CAalF;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,GACpB,QAAQ,CAWV"}
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,GACvD,UAAU,CAAC,MAAM,CAAC,CAsEpB;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
+ {"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,CAmC9G;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,CAmCtH;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
+ {"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;AAkDD;;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
+ {"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;AAiG/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
+ {"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
- const tag = p._def.tag;
149
- return tag === "not" || tag === "adjacency";
148
+ return p._tag === "not" || p._tag === "adjacency";
150
149
  }
151
150
  function isPositiveLookahead(p) {
152
- return p._def.tag === "peek";
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
- if (assertion === null) return fs;
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 firstSetOf(p, seen = /* @__PURE__ */ new Set(), resolve) {
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
- let out = empty();
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
- // both min 0 and min 1 start with the item
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
  }