@thomasfosterau/effect-parse 0.0.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.
- package/README.md +247 -230
- package/dist/Ascii.d.ts +32 -53
- package/dist/Ascii.d.ts.map +1 -1
- package/dist/Ascii.js +576 -571
- package/dist/Ascii.js.map +1 -1
- package/dist/Binary.d.ts +6 -29
- package/dist/Binary.d.ts.map +1 -1
- package/dist/Binary.js +129 -116
- package/dist/Binary.js.map +1 -1
- package/dist/Bits.d.ts +4 -2
- package/dist/Bits.d.ts.map +1 -1
- package/dist/Bits.js +121 -123
- package/dist/Bits.js.map +1 -1
- package/dist/Compiler.d.ts +39 -0
- package/dist/Compiler.d.ts.map +1 -0
- package/dist/Compiler.js +48 -0
- package/dist/Compiler.js.map +1 -0
- package/dist/Encoding.d.ts +29 -46
- package/dist/Encoding.d.ts.map +1 -1
- package/dist/Encoding.js +76 -75
- package/dist/Encoding.js.map +1 -1
- package/dist/Expression.d.ts +15 -49
- package/dist/Expression.d.ts.map +1 -1
- package/dist/Expression.js +143 -131
- package/dist/Expression.js.map +1 -1
- package/dist/Input.d.ts +206 -177
- package/dist/Input.d.ts.map +1 -1
- package/dist/Input.js +317 -299
- package/dist/Input.js.map +1 -1
- package/dist/Nom.d.ts +44 -84
- package/dist/Nom.d.ts.map +1 -1
- package/dist/Nom.js +423 -453
- package/dist/Nom.js.map +1 -1
- package/dist/ParseError.d.ts +54 -49
- package/dist/ParseError.d.ts.map +1 -1
- package/dist/ParseError.js +233 -275
- package/dist/ParseError.js.map +1 -1
- package/dist/Parser.d.ts +345 -313
- package/dist/Parser.d.ts.map +1 -1
- package/dist/Parser.js +2010 -1802
- package/dist/Parser.js.map +1 -1
- package/dist/ParserSchema.d.ts +8 -7
- package/dist/ParserSchema.d.ts.map +1 -1
- package/dist/ParserSchema.js +49 -49
- package/dist/ParserSchema.js.map +1 -1
- package/dist/ParserStream.d.ts +26 -20
- package/dist/ParserStream.d.ts.map +1 -1
- package/dist/ParserStream.js +267 -255
- package/dist/ParserStream.js.map +1 -1
- package/dist/Syntax.d.ts +401 -0
- package/dist/Syntax.d.ts.map +1 -0
- package/dist/Syntax.js +717 -0
- package/dist/Syntax.js.map +1 -0
- package/dist/Text.d.ts +98 -134
- package/dist/Text.d.ts.map +1 -1
- package/dist/Text.js +534 -496
- package/dist/Text.js.map +1 -1
- package/dist/Token.d.ts +60 -42
- package/dist/Token.d.ts.map +1 -1
- package/dist/Token.js +331 -265
- package/dist/Token.js.map +1 -1
- package/dist/index.d.ts +16 -17
- package/dist/index.js +16 -17
- package/dist/internal/compiler/closure.d.ts +14 -16
- package/dist/internal/compiler/closure.d.ts.map +1 -1
- package/dist/internal/compiler/closure.js +1458 -1637
- package/dist/internal/compiler/closure.js.map +1 -1
- package/dist/internal/compiler/entries.d.ts +11 -11
- package/dist/internal/compiler/entries.d.ts.map +1 -1
- package/dist/internal/compiler/entries.js +36 -26
- package/dist/internal/compiler/entries.js.map +1 -1
- package/dist/internal/compiler/first.d.ts +19 -19
- package/dist/internal/compiler/first.d.ts.map +1 -1
- package/dist/internal/compiler/first.js +251 -227
- package/dist/internal/compiler/first.js.map +1 -1
- package/dist/internal/compiler/jit.d.ts +6 -17
- package/dist/internal/compiler/jit.d.ts.map +1 -1
- package/dist/internal/compiler/jit.js +860 -988
- package/dist/internal/compiler/jit.js.map +1 -1
- package/dist/internal/compiler/registry.d.ts +20 -21
- package/dist/internal/compiler/registry.d.ts.map +1 -1
- package/dist/internal/compiler/registry.js +21 -41
- package/dist/internal/compiler/registry.js.map +1 -1
- package/dist/internal/compiler/sets.d.ts +9 -13
- package/dist/internal/compiler/sets.d.ts.map +1 -1
- package/dist/internal/compiler/sets.js +76 -73
- package/dist/internal/compiler/sets.js.map +1 -1
- package/dist/internal/entries.d.ts +3 -3
- package/dist/internal/entries.d.ts.map +1 -1
- package/dist/internal/entries.js +38 -30
- package/dist/internal/entries.js.map +1 -1
- package/dist/internal/node.d.ts +177 -173
- package/dist/internal/node.d.ts.map +1 -1
- package/dist/internal/node.js +77 -66
- package/dist/internal/node.js.map +1 -1
- package/dist/internal/numbers.d.ts +7 -8
- package/dist/internal/numbers.d.ts.map +1 -1
- package/dist/internal/numbers.js +246 -276
- package/dist/internal/numbers.js.map +1 -1
- package/dist/internal/resume.d.ts +6 -24
- package/dist/internal/resume.d.ts.map +1 -1
- package/dist/internal/resume.js +30 -29
- package/dist/internal/resume.js.map +1 -1
- package/dist/internal/run.d.ts +15 -0
- package/dist/internal/run.d.ts.map +1 -0
- package/dist/internal/run.js +36 -0
- package/dist/internal/run.js.map +1 -0
- package/dist/internal/stack.d.ts +16 -0
- package/dist/internal/stack.d.ts.map +1 -0
- package/dist/internal/stack.js +26 -0
- package/dist/internal/stack.js.map +1 -0
- package/dist/internal/syntax.d.ts +146 -0
- package/dist/internal/syntax.d.ts.map +1 -0
- package/dist/internal/syntax.js +305 -0
- package/dist/internal/syntax.js.map +1 -0
- package/dist/internal/text.d.ts +10 -2
- package/dist/internal/text.d.ts.map +1 -1
- package/dist/internal/text.js +295 -345
- package/dist/internal/text.js.map +1 -1
- package/dist/internal/tokens.d.ts +25 -30
- package/dist/internal/tokens.d.ts.map +1 -1
- package/dist/internal/tokens.js +369 -363
- package/dist/internal/tokens.js.map +1 -1
- package/package.json +42 -28
- package/src/Ascii.ts +278 -187
- package/src/Binary.ts +150 -44
- package/src/Bits.ts +6 -3
- package/src/Compiler.ts +98 -0
- package/src/Expression.ts +10 -5
- package/src/Input.ts +106 -28
- package/src/Nom.ts +4 -3
- package/src/ParseError.ts +48 -51
- package/src/Parser.ts +1163 -795
- package/src/ParserStream.ts +104 -80
- package/src/Syntax.ts +900 -0
- package/src/Text.ts +272 -187
- package/src/Token.ts +180 -87
- package/src/index.ts +2 -0
- package/src/internal/compiler/closure.ts +121 -88
- package/src/internal/compiler/entries.ts +21 -8
- package/src/internal/compiler/first.ts +17 -15
- package/src/internal/compiler/jit.ts +360 -157
- package/src/internal/compiler/registry.ts +12 -33
- package/src/internal/compiler/sets.ts +17 -11
- package/src/internal/entries.ts +4 -2
- package/src/internal/node.ts +51 -37
- package/src/internal/numbers.ts +22 -20
- package/src/internal/resume.ts +8 -4
- package/src/internal/run.ts +41 -0
- package/src/internal/stack.ts +36 -0
- package/src/internal/syntax.ts +421 -0
- package/src/internal/text.ts +32 -25
- package/src/internal/tokens.ts +96 -51
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
|
@@ -1,235 +1,259 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as Predicate from "effect/Predicate";
|
|
2
2
|
import { fastLimit } from "../text.js";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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 =
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
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
|
|
2
|
-
|
|
1
|
+
import { Backend } from "./registry.js";
|
|
2
|
+
//#region src/internal/compiler/jit.d.ts
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
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
|
|
8
|
-
|
|
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","
|
|
1
|
+
{"version":3,"file":"jit.d.ts","names":[],"sources":["../../../src/internal/compiler/jit.ts"],"mappings":";;;;;;qBAkwCa,SAAS"}
|