@thomasfosterau/effect-parse 0.1.0 → 0.2.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 (155) hide show
  1. package/README.md +247 -230
  2. package/dist/Ascii.d.ts +32 -53
  3. package/dist/Ascii.d.ts.map +1 -1
  4. package/dist/Ascii.js +576 -571
  5. package/dist/Ascii.js.map +1 -1
  6. package/dist/Binary.d.ts +6 -29
  7. package/dist/Binary.d.ts.map +1 -1
  8. package/dist/Binary.js +129 -116
  9. package/dist/Binary.js.map +1 -1
  10. package/dist/Bits.d.ts +4 -2
  11. package/dist/Bits.d.ts.map +1 -1
  12. package/dist/Bits.js +121 -123
  13. package/dist/Bits.js.map +1 -1
  14. package/dist/Compiler.d.ts +39 -0
  15. package/dist/Compiler.d.ts.map +1 -0
  16. package/dist/Compiler.js +48 -0
  17. package/dist/Compiler.js.map +1 -0
  18. package/dist/Encoding.d.ts +29 -46
  19. package/dist/Encoding.d.ts.map +1 -1
  20. package/dist/Encoding.js +76 -75
  21. package/dist/Encoding.js.map +1 -1
  22. package/dist/Expression.d.ts +15 -49
  23. package/dist/Expression.d.ts.map +1 -1
  24. package/dist/Expression.js +143 -131
  25. package/dist/Expression.js.map +1 -1
  26. package/dist/Input.d.ts +206 -177
  27. package/dist/Input.d.ts.map +1 -1
  28. package/dist/Input.js +317 -299
  29. package/dist/Input.js.map +1 -1
  30. package/dist/Nom.d.ts +44 -84
  31. package/dist/Nom.d.ts.map +1 -1
  32. package/dist/Nom.js +423 -453
  33. package/dist/Nom.js.map +1 -1
  34. package/dist/ParseError.d.ts +54 -49
  35. package/dist/ParseError.d.ts.map +1 -1
  36. package/dist/ParseError.js +233 -275
  37. package/dist/ParseError.js.map +1 -1
  38. package/dist/Parser.d.ts +345 -313
  39. package/dist/Parser.d.ts.map +1 -1
  40. package/dist/Parser.js +2010 -1802
  41. package/dist/Parser.js.map +1 -1
  42. package/dist/ParserSchema.d.ts +8 -7
  43. package/dist/ParserSchema.d.ts.map +1 -1
  44. package/dist/ParserSchema.js +49 -49
  45. package/dist/ParserSchema.js.map +1 -1
  46. package/dist/ParserStream.d.ts +26 -20
  47. package/dist/ParserStream.d.ts.map +1 -1
  48. package/dist/ParserStream.js +267 -255
  49. package/dist/ParserStream.js.map +1 -1
  50. package/dist/Syntax.d.ts +401 -0
  51. package/dist/Syntax.d.ts.map +1 -0
  52. package/dist/Syntax.js +717 -0
  53. package/dist/Syntax.js.map +1 -0
  54. package/dist/Text.d.ts +98 -134
  55. package/dist/Text.d.ts.map +1 -1
  56. package/dist/Text.js +534 -496
  57. package/dist/Text.js.map +1 -1
  58. package/dist/Token.d.ts +60 -42
  59. package/dist/Token.d.ts.map +1 -1
  60. package/dist/Token.js +331 -265
  61. package/dist/Token.js.map +1 -1
  62. package/dist/index.d.ts +16 -17
  63. package/dist/index.js +16 -17
  64. package/dist/internal/compiler/closure.d.ts +14 -16
  65. package/dist/internal/compiler/closure.d.ts.map +1 -1
  66. package/dist/internal/compiler/closure.js +1458 -1637
  67. package/dist/internal/compiler/closure.js.map +1 -1
  68. package/dist/internal/compiler/entries.d.ts +11 -11
  69. package/dist/internal/compiler/entries.d.ts.map +1 -1
  70. package/dist/internal/compiler/entries.js +36 -26
  71. package/dist/internal/compiler/entries.js.map +1 -1
  72. package/dist/internal/compiler/first.d.ts +19 -19
  73. package/dist/internal/compiler/first.d.ts.map +1 -1
  74. package/dist/internal/compiler/first.js +251 -227
  75. package/dist/internal/compiler/first.js.map +1 -1
  76. package/dist/internal/compiler/jit.d.ts +6 -17
  77. package/dist/internal/compiler/jit.d.ts.map +1 -1
  78. package/dist/internal/compiler/jit.js +860 -988
  79. package/dist/internal/compiler/jit.js.map +1 -1
  80. package/dist/internal/compiler/registry.d.ts +20 -21
  81. package/dist/internal/compiler/registry.d.ts.map +1 -1
  82. package/dist/internal/compiler/registry.js +21 -41
  83. package/dist/internal/compiler/registry.js.map +1 -1
  84. package/dist/internal/compiler/sets.d.ts +9 -13
  85. package/dist/internal/compiler/sets.d.ts.map +1 -1
  86. package/dist/internal/compiler/sets.js +76 -73
  87. package/dist/internal/compiler/sets.js.map +1 -1
  88. package/dist/internal/entries.d.ts +3 -3
  89. package/dist/internal/entries.d.ts.map +1 -1
  90. package/dist/internal/entries.js +38 -30
  91. package/dist/internal/entries.js.map +1 -1
  92. package/dist/internal/node.d.ts +177 -173
  93. package/dist/internal/node.d.ts.map +1 -1
  94. package/dist/internal/node.js +77 -66
  95. package/dist/internal/node.js.map +1 -1
  96. package/dist/internal/numbers.d.ts +7 -8
  97. package/dist/internal/numbers.d.ts.map +1 -1
  98. package/dist/internal/numbers.js +246 -276
  99. package/dist/internal/numbers.js.map +1 -1
  100. package/dist/internal/resume.d.ts +6 -24
  101. package/dist/internal/resume.d.ts.map +1 -1
  102. package/dist/internal/resume.js +30 -29
  103. package/dist/internal/resume.js.map +1 -1
  104. package/dist/internal/run.d.ts +15 -0
  105. package/dist/internal/run.d.ts.map +1 -0
  106. package/dist/internal/run.js +36 -0
  107. package/dist/internal/run.js.map +1 -0
  108. package/dist/internal/stack.d.ts +16 -0
  109. package/dist/internal/stack.d.ts.map +1 -0
  110. package/dist/internal/stack.js +26 -0
  111. package/dist/internal/stack.js.map +1 -0
  112. package/dist/internal/syntax.d.ts +146 -0
  113. package/dist/internal/syntax.d.ts.map +1 -0
  114. package/dist/internal/syntax.js +305 -0
  115. package/dist/internal/syntax.js.map +1 -0
  116. package/dist/internal/text.d.ts +10 -2
  117. package/dist/internal/text.d.ts.map +1 -1
  118. package/dist/internal/text.js +295 -345
  119. package/dist/internal/text.js.map +1 -1
  120. package/dist/internal/tokens.d.ts +25 -30
  121. package/dist/internal/tokens.d.ts.map +1 -1
  122. package/dist/internal/tokens.js +369 -363
  123. package/dist/internal/tokens.js.map +1 -1
  124. package/package.json +42 -28
  125. package/src/Ascii.ts +278 -187
  126. package/src/Binary.ts +150 -44
  127. package/src/Bits.ts +6 -3
  128. package/src/Compiler.ts +98 -0
  129. package/src/Expression.ts +10 -5
  130. package/src/Input.ts +106 -28
  131. package/src/Nom.ts +4 -3
  132. package/src/ParseError.ts +48 -51
  133. package/src/Parser.ts +1163 -795
  134. package/src/ParserStream.ts +104 -80
  135. package/src/Syntax.ts +900 -0
  136. package/src/Text.ts +272 -187
  137. package/src/Token.ts +180 -87
  138. package/src/index.ts +2 -0
  139. package/src/internal/compiler/closure.ts +121 -88
  140. package/src/internal/compiler/entries.ts +21 -8
  141. package/src/internal/compiler/first.ts +17 -15
  142. package/src/internal/compiler/jit.ts +360 -157
  143. package/src/internal/compiler/registry.ts +12 -33
  144. package/src/internal/compiler/sets.ts +17 -11
  145. package/src/internal/entries.ts +4 -2
  146. package/src/internal/node.ts +51 -37
  147. package/src/internal/numbers.ts +22 -20
  148. package/src/internal/resume.ts +8 -4
  149. package/src/internal/run.ts +41 -0
  150. package/src/internal/stack.ts +36 -0
  151. package/src/internal/syntax.ts +421 -0
  152. package/src/internal/text.ts +32 -25
  153. package/src/internal/tokens.ts +96 -51
  154. package/dist/index.d.ts.map +0 -1
  155. package/dist/index.js.map +0 -1
@@ -1,235 +1,259 @@
1
- import { nodeOf } from "../node.js";
1
+ import * as Predicate from "effect/Predicate";
2
2
  import { fastLimit } from "../text.js";
3
- import { kindOfEncoding, reachesAbove, TableSize, textSet, tokenSet } from "./sets.js";
4
- export const Strict = 0;
5
- export const Optional = 1;
6
- export const Unknown = 2;
7
- const none = new Uint8Array(TableSize);
8
- const all = new Uint8Array(TableSize).fill(1);
9
- const unknown = { mode: Unknown, units: all, high: true };
10
- const emptyOptional = { mode: Optional, units: none, high: false };
11
- const failing = { mode: Strict, units: none, high: false };
12
- const anyUnit = { mode: Strict, units: all, high: true };
3
+ import { nodeOf } from "../node.js";
4
+ import { TableSize, kindOfEncoding, reachesAbove, textSet, tokenSet } from "./sets.js";
5
+ //#region src/internal/compiler/first.ts
6
+ /**
7
+ * First sets: which input units can start a match of a parser.
8
+ *
9
+ * A first set has a mode:
10
+ *
11
+ * - `Strict`: when the next unit is not in `units` (or the input has
12
+ * ended), the parser fails with `Backtrack`.
13
+ * - `Optional`: in that case, the parser either fails with `Backtrack` or
14
+ * succeeds without consuming input.
15
+ * - `Unknown`: no guarantee.
16
+ *
17
+ * Units are UTF-16 code units for strings and bytes for byte inputs; units
18
+ * from `TableSize` up are summarized by `high`. Array inputs have no units.
19
+ *
20
+ * Skipping a parser that is certain to fail also skips the callbacks it
21
+ * would have run before failing, which is why callbacks must be pure.
22
+ */
23
+ const Strict = 0;
24
+ const Optional = 1;
25
+ const Unknown = 2;
26
+ const none = /*#__PURE__*/ new Uint8Array(TableSize);
27
+ const all = /*#__PURE__*/ new Uint8Array(TableSize).fill(1);
28
+ const unknown = {
29
+ mode: Unknown,
30
+ units: all,
31
+ high: true
32
+ };
33
+ const emptyOptional = {
34
+ mode: Optional,
35
+ units: none,
36
+ high: false
37
+ };
38
+ const failing = {
39
+ mode: 0,
40
+ units: none,
41
+ high: false
42
+ };
43
+ const anyUnit = {
44
+ mode: 0,
45
+ units: all,
46
+ high: true
47
+ };
13
48
  const union = (a, b, mode) => {
14
- const units = new Uint8Array(TableSize);
15
- for (let i = 0; i < TableSize; i++)
16
- units[i] = a.units[i] | b.units[i];
17
- return { mode, units, high: a.high || b.high };
49
+ const units = new Uint8Array(TableSize);
50
+ for (let i = 0; i < TableSize; i++) units[i] = a.units[i] | b.units[i];
51
+ return {
52
+ mode,
53
+ units,
54
+ high: a.high || b.high
55
+ };
56
+ };
57
+ const withMode = (f, mode) => f.mode === mode ? f : {
58
+ ...f,
59
+ mode
18
60
  };
19
- const withMode = (f, mode) => f.mode === mode ? f : { ...f, mode };
20
61
  const lowerAscii = (c) => c >= 65 && c <= 90 ? c + 32 : c;
21
62
  const upperAscii = (c) => c >= 97 && c <= 122 ? c - 32 : c;
22
- const ofUnits = (codes, mode = Strict) => {
23
- const units = new Uint8Array(TableSize);
24
- let high = false;
25
- for (const c of codes) {
26
- if (c < TableSize)
27
- units[c] = 1;
28
- else
29
- high = true;
30
- }
31
- return { mode, units, high };
63
+ const ofUnits = (codes, mode = 0) => {
64
+ const units = new Uint8Array(TableSize);
65
+ let high = false;
66
+ for (const c of codes) if (c < TableSize) units[c] = 1;
67
+ else high = true;
68
+ return {
69
+ mode,
70
+ units,
71
+ high
72
+ };
73
+ };
74
+ var FirstSets = class {
75
+ kind;
76
+ memo = /* @__PURE__ */ new Map();
77
+ constructor(kind) {
78
+ this.kind = kind;
79
+ }
80
+ of(p) {
81
+ if (this.kind === 2) return unknown;
82
+ if (this.memo.has(p)) return this.memo.get(p) ?? unknown;
83
+ this.memo.set(p, void 0);
84
+ const f = this.compute(nodeOf(p));
85
+ this.memo.set(p, f);
86
+ return f;
87
+ }
88
+ /** Units of the code points of a set, as an encoding (or `Token`) reads them. */
89
+ setUnits(set, enc, mode) {
90
+ if (enc === void 0 || kindOfEncoding(enc) === 0) {
91
+ if (this.kind === 1) return {
92
+ mode,
93
+ units: set.table,
94
+ high: false
95
+ };
96
+ return {
97
+ mode,
98
+ units: set.table,
99
+ high: reachesAbove(set, TableSize)
100
+ };
101
+ }
102
+ if (enc.unit !== 1) return void 0;
103
+ const fast = fastLimit(enc);
104
+ if (fast === 0) return void 0;
105
+ const units = set.table.slice();
106
+ if (fast < TableSize) units.fill(reachesAbove(set, fast) ? 1 : 0, fast);
107
+ return {
108
+ mode,
109
+ units,
110
+ high: false
111
+ };
112
+ }
113
+ compute(node) {
114
+ const kind = this.kind;
115
+ switch (node._tag) {
116
+ case "Succeed":
117
+ case "Sync":
118
+ case "Location":
119
+ case "RestLen":
120
+ case "Eof": return emptyOptional;
121
+ case "Fail": return node.mode === "Backtrack" ? failing : unknown;
122
+ case "Any": return node.encoding !== void 0 && kindOfEncoding(node.encoding) !== kind ? unknown : anyUnit;
123
+ case "Take": return node.count === 0 ? emptyOptional : anyUnit;
124
+ case "Literal": {
125
+ const lit = node.literal;
126
+ if (node.encoding !== void 0) {
127
+ if (kindOfEncoding(node.encoding) !== kind) return unknown;
128
+ if (node.caseless) return lit.length === 0 ? unknown : anyUnit;
129
+ const encoded = node.encoding.encode(lit);
130
+ if (encoded.length === 0) return emptyOptional;
131
+ return ofUnits([Predicate.isString(encoded) ? encoded.charCodeAt(0) : encoded[0]]);
132
+ }
133
+ if (lit.length === 0) return emptyOptional;
134
+ let first;
135
+ if (Predicate.isString(lit)) first = kind === 0 ? lit.charCodeAt(0) : new TextEncoder().encode(lit)[0];
136
+ else if (lit instanceof Uint8Array && kind === 1) first = lit[0];
137
+ else return unknown;
138
+ return ofUnits(node.caseless ? [
139
+ first,
140
+ lowerAscii(first),
141
+ upperAscii(first)
142
+ ] : [first]);
143
+ }
144
+ case "OneOf":
145
+ case "TakeWhile": {
146
+ if (node.encoding !== void 0 && kindOfEncoding(node.encoding) !== kind) return unknown;
147
+ const min = node._tag === "OneOf" ? 1 : node.min;
148
+ if (node._tag === "TakeWhile" && node.max === 0) return emptyOptional;
149
+ const mode = min > 0 ? 0 : Optional;
150
+ if (node.negate) return mode === 0 ? anyUnit : withMode(anyUnit, Optional);
151
+ const set = node.encoding === void 0 ? tokenSet(node.set, kind) : textSet(node.set);
152
+ return this.setUnits(set, node.encoding, mode) ?? (mode === 0 ? anyUnit : unknown);
153
+ }
154
+ case "Map":
155
+ case "As":
156
+ case "Tap":
157
+ case "TryMap":
158
+ case "FilterMap":
159
+ case "Filter":
160
+ case "Taken":
161
+ case "WithTaken":
162
+ case "Span":
163
+ case "WithSpan":
164
+ case "Context":
165
+ case "Expected":
166
+ case "MapError":
167
+ case "OrFail":
168
+ case "Peek":
169
+ case "Trace":
170
+ case "Syntax":
171
+ case "ResumeAfter":
172
+ case "RetryAfter": return this.of(node.self);
173
+ case "FlatMap":
174
+ case "SeparatedFold":
175
+ case "Dispatch": {
176
+ const f = this.of(node._tag === "Dispatch" ? node.selector : node.self);
177
+ return f.mode === 0 ? f : unknown;
178
+ }
179
+ case "Mode": {
180
+ const f = this.of(node.self);
181
+ return node.from === "Backtrack" ? f.mode === Unknown ? f : unknown : f;
182
+ }
183
+ case "Opt":
184
+ case "OrElseSucceed": {
185
+ const f = this.of(node.self);
186
+ return f.mode === Unknown ? f : withMode(f, Optional);
187
+ }
188
+ case "Seq":
189
+ case "Struct": return this.sequence(node.parsers);
190
+ case "ZipWith": return this.sequence([node.self, node.that]);
191
+ case "Alt": {
192
+ if (node.parsers.length === 0) return failing;
193
+ let acc;
194
+ let mode = 0;
195
+ for (const p of node.parsers) {
196
+ const f = this.of(p);
197
+ if (f.mode === Unknown) return unknown;
198
+ if (f.mode === Optional) mode = Optional;
199
+ acc = acc === void 0 ? f : union(acc, f, mode);
200
+ }
201
+ return acc === void 0 ? failing : withMode(acc, mode);
202
+ }
203
+ case "Repeat":
204
+ case "Fold":
205
+ case "Separated": {
206
+ if (node.max === 0) return emptyOptional;
207
+ const f = this.of(node.self);
208
+ if (f.mode !== 0) return unknown;
209
+ return node.min === 0 ? withMode(f, Optional) : f;
210
+ }
211
+ case "Suspend": return this.of(node.resolve());
212
+ default: return unknown;
213
+ }
214
+ }
215
+ sequence(parsers) {
216
+ let acc;
217
+ for (const p of parsers) {
218
+ const f = this.of(p);
219
+ if (f.mode === Unknown) return unknown;
220
+ acc = acc === void 0 ? f : union(acc, f, f.mode);
221
+ if (f.mode === 0) return acc;
222
+ }
223
+ return acc ?? emptyOptional;
224
+ }
32
225
  };
33
- export class FirstSets {
34
- kind;
35
- memo = new Map();
36
- constructor(kind) {
37
- this.kind = kind;
38
- }
39
- of(p) {
40
- if (this.kind === 2)
41
- return unknown;
42
- if (this.memo.has(p))
43
- return this.memo.get(p) ?? unknown; // in progress: a cycle
44
- this.memo.set(p, undefined);
45
- const f = this.compute(nodeOf(p));
46
- this.memo.set(p, f);
47
- return f;
48
- }
49
- /** Units of the code points of a set, as an encoding (or `Token`) reads them. */
50
- setUnits(set, enc, mode) {
51
- if (enc === undefined || kindOfEncoding(enc) === 0) {
52
- if (this.kind === 1)
53
- return { mode, units: set.table, high: false };
54
- return { mode, units: set.table, high: reachesAbove(set, TableSize) };
55
- }
56
- if (enc.unit !== 1)
57
- return undefined;
58
- const fast = fastLimit(enc);
59
- if (fast === 0)
60
- return undefined;
61
- const units = set.table.slice();
62
- // Multi-unit sequences start with a unit at or above `fast`
63
- if (fast < TableSize)
64
- units.fill(reachesAbove(set, fast) ? 1 : 0, fast);
65
- return { mode, units, high: false };
66
- }
67
- compute(node) {
68
- const kind = this.kind;
69
- switch (node._tag) {
70
- case "Succeed":
71
- case "Sync":
72
- case "Location":
73
- case "RestLen":
74
- case "Eof":
75
- return emptyOptional;
76
- case "Fail":
77
- return node.mode === "Backtrack" ? failing : unknown;
78
- case "Any":
79
- return node.encoding !== undefined && kindOfEncoding(node.encoding) !== kind ? unknown : anyUnit;
80
- case "Take":
81
- return node.count === 0 ? emptyOptional : anyUnit;
82
- case "Literal": {
83
- const lit = node.literal;
84
- if (node.encoding !== undefined) {
85
- if (kindOfEncoding(node.encoding) !== kind)
86
- return unknown;
87
- if (node.caseless)
88
- return lit.length === 0 ? unknown : anyUnit;
89
- const encoded = node.encoding.encode(lit);
90
- if (encoded.length === 0)
91
- return emptyOptional;
92
- return ofUnits([typeof encoded === "string" ? encoded.charCodeAt(0) : encoded[0]]);
93
- }
94
- if (lit.length === 0)
95
- return emptyOptional;
96
- let first;
97
- if (typeof lit === "string") {
98
- first = kind === 0 ? lit.charCodeAt(0) : new TextEncoder().encode(lit)[0];
99
- }
100
- else if (lit instanceof Uint8Array && kind === 1) {
101
- first = lit[0];
102
- }
103
- else {
104
- return unknown;
105
- }
106
- return ofUnits(node.caseless ? [first, lowerAscii(first), upperAscii(first)] : [first]);
107
- }
108
- case "OneOf":
109
- case "TakeWhile": {
110
- if (node.encoding !== undefined && kindOfEncoding(node.encoding) !== kind)
111
- return unknown;
112
- const min = node._tag === "OneOf" ? 1 : node.min;
113
- if (node._tag === "TakeWhile" && node.max === 0)
114
- return emptyOptional;
115
- const mode = min > 0 ? Strict : Optional;
116
- if (node.negate)
117
- return mode === Strict ? anyUnit : withMode(anyUnit, Optional);
118
- const set = node.encoding === undefined ? tokenSet(node.set, kind) : textSet(node.set);
119
- return this.setUnits(set, node.encoding, mode) ?? (mode === Strict ? anyUnit : unknown);
120
- }
121
- case "Map":
122
- case "As":
123
- case "Tap":
124
- case "TryMap":
125
- case "FilterMap":
126
- case "Filter":
127
- case "Taken":
128
- case "WithTaken":
129
- case "Span":
130
- case "WithSpan":
131
- case "Context":
132
- case "Expected":
133
- case "MapError":
134
- case "OrFail":
135
- case "Peek":
136
- case "Trace":
137
- case "ResumeAfter":
138
- case "RetryAfter":
139
- return this.of(node.self);
140
- case "FlatMap":
141
- case "SeparatedFold":
142
- case "Dispatch": {
143
- const f = this.of(node._tag === "Dispatch" ? node.selector : node.self);
144
- return f.mode === Strict ? f : unknown;
145
- }
146
- case "Mode": {
147
- const f = this.of(node.self);
148
- return node.from === "Backtrack" ? (f.mode === Unknown ? f : unknown) : f;
149
- }
150
- case "Opt":
151
- case "OrElseSucceed": {
152
- const f = this.of(node.self);
153
- return f.mode === Unknown ? f : withMode(f, Optional);
154
- }
155
- case "Seq":
156
- case "Struct":
157
- return this.sequence(node.parsers);
158
- case "ZipWith":
159
- return this.sequence([node.self, node.that]);
160
- case "Alt": {
161
- if (node.parsers.length === 0)
162
- return failing;
163
- let acc;
164
- let mode = Strict;
165
- for (const p of node.parsers) {
166
- const f = this.of(p);
167
- if (f.mode === Unknown)
168
- return unknown;
169
- if (f.mode === Optional)
170
- mode = Optional;
171
- acc = acc === undefined ? f : union(acc, f, mode);
172
- }
173
- return withMode(acc, mode);
174
- }
175
- case "Repeat":
176
- case "Fold":
177
- case "Separated": {
178
- if (node.max === 0)
179
- return emptyOptional;
180
- const f = this.of(node.self);
181
- if (f.mode !== Strict)
182
- return unknown;
183
- return node.min === 0 ? withMode(f, Optional) : f;
184
- }
185
- case "Suspend":
186
- return this.of(node.resolve());
187
- default:
188
- return unknown;
189
- }
190
- }
191
- sequence(parsers) {
192
- let acc;
193
- for (const p of parsers) {
194
- const f = this.of(p);
195
- if (f.mode === Unknown)
196
- return unknown;
197
- acc = acc === undefined ? f : union(acc, f, f.mode);
198
- if (f.mode === Strict)
199
- return acc;
200
- }
201
- return acc ?? emptyOptional;
202
- }
203
- }
204
- export const planAlt = (firsts) => {
205
- const n = firsts.length;
206
- if (n < 2 || n > 64)
207
- return undefined;
208
- const lists = [];
209
- const index = new Map();
210
- const listOf = (keep) => {
211
- const list = [];
212
- for (let i = 0; i < n; i++)
213
- if (keep(firsts[i]))
214
- list.push(i);
215
- const key = list.join(",");
216
- let k = index.get(key);
217
- if (k === undefined) {
218
- k = lists.length;
219
- lists.push(list);
220
- index.set(key, k);
221
- }
222
- return k;
223
- };
224
- const byUnit = new Uint8Array(TableSize);
225
- for (let u = 0; u < TableSize; u++)
226
- byUnit[u] = listOf((f) => f.mode !== Strict || f.units[u] === 1);
227
- const high = listOf((f) => f.mode !== Strict || f.high);
228
- const end = listOf((f) => f.mode !== Strict);
229
- if (lists.length === 1 && lists[0].length === n)
230
- return undefined;
231
- if (lists.length > 255)
232
- return undefined;
233
- return { byUnit, high, end, lists };
226
+ const planAlt = (firsts) => {
227
+ const n = firsts.length;
228
+ if (n < 2 || n > 64) return void 0;
229
+ const lists = [];
230
+ const index = /* @__PURE__ */ new Map();
231
+ const listOf = (keep) => {
232
+ const list = [];
233
+ for (let i = 0; i < n; i++) if (keep(firsts[i])) list.push(i);
234
+ const key = list.join(",");
235
+ let k = index.get(key);
236
+ if (k === void 0) {
237
+ k = lists.length;
238
+ lists.push(list);
239
+ index.set(key, k);
240
+ }
241
+ return k;
242
+ };
243
+ const byUnit = new Uint8Array(TableSize);
244
+ for (let u = 0; u < TableSize; u++) byUnit[u] = listOf((f) => f.mode !== 0 || f.units[u] === 1);
245
+ const high = listOf((f) => f.mode !== 0 || f.high);
246
+ const end = listOf((f) => f.mode !== 0);
247
+ if (lists.length === 1 && lists[0].length === n) return void 0;
248
+ if (lists.length > 255) return void 0;
249
+ return {
250
+ byUnit,
251
+ high,
252
+ end,
253
+ lists
254
+ };
234
255
  };
256
+ //#endregion
257
+ export { FirstSets, Strict, planAlt };
258
+
235
259
  //# sourceMappingURL=first.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"first.js","sourceRoot":"","sources":["../../../src/internal/compiler/first.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"first.js","names":[],"sources":["../../../src/internal/compiler/first.ts"],"sourcesContent":["/**\n * First sets: which input units can start a match of a parser.\n *\n * A first set has a mode:\n *\n * - `Strict`: when the next unit is not in `units` (or the input has\n * ended), the parser fails with `Backtrack`.\n * - `Optional`: in that case, the parser either fails with `Backtrack` or\n * succeeds without consuming input.\n * - `Unknown`: no guarantee.\n *\n * Units are UTF-16 code units for strings and bytes for byte inputs; units\n * from `TableSize` up are summarized by `high`. Array inputs have no units.\n *\n * Skipping a parser that is certain to fail also skips the callbacks it\n * would have run before failing, which is why callbacks must be pure.\n */\nimport * as Predicate from \"effect/Predicate\"\nimport type { Encoding } from \"../../Encoding.js\"\nimport type { Node, ParserLike } from \"../node.js\"\nimport { nodeOf } from \"../node.js\"\nimport { fastLimit } from \"../text.js\"\nimport type { CharSet } from \"./sets.js\"\nimport { kindOfEncoding, reachesAbove, TableSize, textSet, tokenSet } from \"./sets.js\"\n\nexport const Strict = 0\nconst Optional = 1\nconst Unknown = 2\n\nexport interface First {\n readonly mode: 0 | 1 | 2\n readonly units: Uint8Array\n readonly high: boolean\n}\n\nconst none = /*#__PURE__*/ new Uint8Array(TableSize)\nconst all = /*#__PURE__*/ new Uint8Array(TableSize).fill(1)\n\nconst unknown: First = { mode: Unknown, units: all, high: true }\nconst emptyOptional: First = { mode: Optional, units: none, high: false }\nconst failing: First = { mode: Strict, units: none, high: false }\nconst anyUnit: First = { mode: Strict, units: all, high: true }\n\nconst union = (a: First, b: First, mode: 0 | 1 | 2): First => {\n const units = new Uint8Array(TableSize)\n for (let i = 0; i < TableSize; i++) units[i] = a.units[i] | b.units[i]\n return { mode, units, high: a.high || b.high }\n}\n\nconst withMode = (f: First, mode: 0 | 1 | 2): First => (f.mode === mode ? f : { ...f, mode })\n\nconst lowerAscii = (c: number): number => (c >= 65 && c <= 90 ? c + 32 : c)\nconst upperAscii = (c: number): number => (c >= 97 && c <= 122 ? c - 32 : c)\n\nconst ofUnits = (codes: ReadonlyArray<number>, mode: 0 | 1 | 2 = Strict): First => {\n const units = new Uint8Array(TableSize)\n let high = false\n for (const c of codes) {\n if (c < TableSize) units[c] = 1\n else high = true\n }\n return { mode, units, high }\n}\n\nexport class FirstSets {\n private readonly memo = new Map<ParserLike, First | undefined>()\n constructor(readonly kind: 0 | 1 | 2) {}\n\n of(p: ParserLike): First {\n if (this.kind === 2) return unknown\n if (this.memo.has(p)) return this.memo.get(p) ?? unknown // in progress: a cycle\n this.memo.set(p, undefined)\n const f = this.compute(nodeOf(p))\n this.memo.set(p, f)\n return f\n }\n\n /** Units of the code points of a set, as an encoding (or `Token`) reads them. */\n private setUnits(set: CharSet, enc: Encoding<any> | undefined, mode: 0 | 1): First | undefined {\n if (enc === undefined || kindOfEncoding(enc) === 0) {\n if (this.kind === 1) return { mode, units: set.table, high: false }\n return { mode, units: set.table, high: reachesAbove(set, TableSize) }\n }\n if (enc.unit !== 1) return undefined\n const fast = fastLimit(enc)\n if (fast === 0) return undefined\n const units = set.table.slice()\n // Multi-unit sequences start with a unit at or above `fast`\n if (fast < TableSize) units.fill(reachesAbove(set, fast) ? 1 : 0, fast)\n return { mode, units, high: false }\n }\n\n private compute(node: Node): First {\n const kind = this.kind as 0 | 1\n switch (node._tag) {\n case \"Succeed\":\n case \"Sync\":\n case \"Location\":\n case \"RestLen\":\n case \"Eof\":\n return emptyOptional\n case \"Fail\":\n return node.mode === \"Backtrack\" ? failing : unknown\n case \"Any\":\n return node.encoding !== undefined && kindOfEncoding(node.encoding) !== kind ? unknown : anyUnit\n case \"Take\":\n return node.count === 0 ? emptyOptional : anyUnit\n case \"Literal\": {\n const lit = node.literal\n if (node.encoding !== undefined) {\n if (kindOfEncoding(node.encoding) !== kind) return unknown\n if (node.caseless) return lit.length === 0 ? unknown : anyUnit\n const encoded = node.encoding.encode(lit as string)\n if (encoded.length === 0) return emptyOptional\n return ofUnits([Predicate.isString(encoded) ? encoded.charCodeAt(0) : encoded[0]])\n }\n if (lit.length === 0) return emptyOptional\n let first: number\n if (Predicate.isString(lit)) {\n first = kind === 0 ? lit.charCodeAt(0) : new TextEncoder().encode(lit)[0]\n } else if (lit instanceof Uint8Array && kind === 1) {\n first = lit[0]\n } else {\n return unknown\n }\n return ofUnits(node.caseless ? [first, lowerAscii(first), upperAscii(first)] : [first])\n }\n case \"OneOf\":\n case \"TakeWhile\": {\n if (node.encoding !== undefined && kindOfEncoding(node.encoding) !== kind) return unknown\n const min = node._tag === \"OneOf\" ? 1 : node.min\n if (node._tag === \"TakeWhile\" && node.max === 0) return emptyOptional\n const mode = min > 0 ? Strict : Optional\n if (node.negate) return mode === Strict ? anyUnit : withMode(anyUnit, Optional)\n const set = node.encoding === undefined ? tokenSet(node.set, kind) : textSet(node.set)\n return this.setUnits(set, node.encoding, mode) ?? (mode === Strict ? anyUnit : unknown)\n }\n case \"Map\":\n case \"As\":\n case \"Tap\":\n case \"TryMap\":\n case \"FilterMap\":\n case \"Filter\":\n case \"Taken\":\n case \"WithTaken\":\n case \"Span\":\n case \"WithSpan\":\n case \"Context\":\n case \"Expected\":\n case \"MapError\":\n case \"OrFail\":\n case \"Peek\":\n case \"Trace\":\n case \"Syntax\":\n case \"ResumeAfter\":\n case \"RetryAfter\":\n return this.of(node.self)\n case \"FlatMap\":\n case \"SeparatedFold\":\n case \"Dispatch\": {\n const f = this.of(node._tag === \"Dispatch\" ? node.selector : node.self)\n return f.mode === Strict ? f : unknown\n }\n case \"Mode\": {\n const f = this.of(node.self)\n return node.from === \"Backtrack\" ? (f.mode === Unknown ? f : unknown) : f\n }\n case \"Opt\":\n case \"OrElseSucceed\": {\n const f = this.of(node.self)\n return f.mode === Unknown ? f : withMode(f, Optional)\n }\n case \"Seq\":\n case \"Struct\":\n return this.sequence(node.parsers)\n case \"ZipWith\":\n return this.sequence([node.self, node.that])\n case \"Alt\": {\n if (node.parsers.length === 0) return failing\n let acc: First | undefined\n let mode: 0 | 1 | 2 = Strict\n for (const p of node.parsers) {\n const f = this.of(p)\n if (f.mode === Unknown) return unknown\n if (f.mode === Optional) mode = Optional\n acc = acc === undefined ? f : union(acc, f, mode)\n }\n return acc === undefined ? failing : withMode(acc, mode)\n }\n case \"Repeat\":\n case \"Fold\":\n case \"Separated\": {\n if (node.max === 0) return emptyOptional\n const f = this.of(node.self)\n if (f.mode !== Strict) return unknown\n return node.min === 0 ? withMode(f, Optional) : f\n }\n case \"Suspend\":\n return this.of(node.resolve())\n default:\n return unknown\n }\n }\n\n private sequence(parsers: ReadonlyArray<ParserLike>): First {\n let acc: First | undefined\n for (const p of parsers) {\n const f = this.of(p)\n if (f.mode === Unknown) return unknown\n acc = acc === undefined ? f : union(acc, f, f.mode)\n if (f.mode === Strict) return acc\n }\n return acc ?? emptyOptional\n }\n}\n\n/**\n * For an `Alt`: the branches worth trying for each next unit, each next\n * high unit, and at the end of the input, or `undefined` when pruning\n * would never skip a branch.\n */\nexport interface AltPlan {\n /** Indexed by unit: indexes into `lists`. */\n readonly byUnit: Uint8Array\n readonly high: number\n readonly end: number\n readonly lists: ReadonlyArray<ReadonlyArray<number>>\n}\n\nexport const planAlt = (firsts: ReadonlyArray<First>): AltPlan | undefined => {\n const n = firsts.length\n if (n < 2 || n > 64) return undefined\n const lists: Array<ReadonlyArray<number>> = []\n const index = new Map<string, number>()\n const listOf = (keep: (f: First) => boolean): number => {\n const list: Array<number> = []\n for (let i = 0; i < n; i++) if (keep(firsts[i])) list.push(i)\n const key = list.join(\",\")\n let k = index.get(key)\n if (k === undefined) {\n k = lists.length\n lists.push(list)\n index.set(key, k)\n }\n return k\n }\n const byUnit = new Uint8Array(TableSize)\n for (let u = 0; u < TableSize; u++) byUnit[u] = listOf((f) => f.mode !== Strict || f.units[u] === 1)\n const high = listOf((f) => f.mode !== Strict || f.high)\n const end = listOf((f) => f.mode !== Strict)\n if (lists.length === 1 && lists[0].length === n) return undefined\n if (lists.length > 255) return undefined\n return { byUnit, high, end, lists }\n}\n"],"mappings":"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"}
@@ -1,20 +1,9 @@
1
- import type { ParserLike } from "../node.js";
2
- import type { Fallback, Step } from "./closure.js";
1
+ import { Backend } from "./registry.js";
2
+ //#region src/internal/compiler/jit.d.ts
3
3
  /**
4
- * Whether `new Function` works here (it doesn't under a Content Security
5
- * Policy). Checked once, and again if `globalThis.Function` is replaced.
4
+ * The JIT as a backend: generated code where `new Function` is allowed,
5
+ * otherwise (or if generating fails) the closure compiler.
6
6
  */
7
- export declare const jitSupported: () => boolean;
8
- /** Generates the source of a compiled parser, without building it. */
9
- export declare const generate: (root: ParserLike, kind: 0 | 1 | 2, resumable?: boolean) => {
10
- readonly source: string;
11
- readonly constants: ReadonlyArray<unknown>;
12
- readonly fallbacks: ReadonlyArray<Fallback>;
13
- };
14
- /** Compiles a root parser for one input kind with `new Function`. */
15
- export declare const compileJit: (root: ParserLike, kind: 0 | 1 | 2, resumable?: boolean) => {
16
- readonly step: Step;
17
- readonly fallbacks: ReadonlyArray<Fallback>;
18
- readonly source: string;
19
- };
7
+ export declare const backend: Backend;
8
+ //#endregion
20
9
  //# sourceMappingURL=jit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"jit.d.ts","sourceRoot":"","sources":["../../../src/internal/compiler/jit.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAgB,UAAU,EAAE,MAAM,YAAY,CAAA;AAM1D,OAAO,KAAK,EAAmB,QAAQ,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAyCnE;;;GAGG;AACH,eAAO,MAAM,YAAY,QAAO,OAU/B,CAAA;AAq9BD,sEAAsE;AACtE,eAAO,MAAM,QAAQ,SAAU,UAAU,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,0BAAsB;IAC9E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IAC1C,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;CAQ5C,CAAA;AAED,qEAAqE;AACrE,eAAO,MAAM,UAAU,SAAU,UAAU,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,0BAAsB;IAChF,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAUxB,CAAA"}
1
+ {"version":3,"file":"jit.d.ts","names":[],"sources":["../../../src/internal/compiler/jit.ts"],"mappings":";;;;;;qBAkwCa,SAAS"}