@tabnas/parser 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/error.js +5 -0
- package/dist/error.js.map +1 -1
- package/dist/lexer.d.ts +6 -3
- package/dist/lexer.js +189 -89
- package/dist/lexer.js.map +1 -1
- package/dist/merge.d.ts +3 -0
- package/dist/merge.js +482 -0
- package/dist/merge.js.map +1 -0
- package/dist/parser.d.ts +1 -0
- package/dist/parser.js +35 -6
- package/dist/parser.js.map +1 -1
- package/dist/rules.d.ts +10 -3
- package/dist/rules.js +121 -52
- package/dist/rules.js.map +1 -1
- package/dist/tabnas.d.ts +1 -0
- package/dist/tabnas.js +49 -51
- package/dist/tabnas.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.js.map +1 -1
- package/dist/utility.js +80 -1
- package/dist/utility.js.map +1 -1
- package/dist-test/json-plugin.js +202 -0
- package/dist-test/json-plugin.js.map +1 -0
- package/dist-test/tsconfig.tsbuildinfo +1 -0
- package/package.json +5 -4
package/dist/merge.js
ADDED
|
@@ -0,0 +1,482 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* Copyright (c) 2013-2026 Richard Rodger, MIT License */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.mergeInstances = mergeInstances;
|
|
5
|
+
const defaults_1 = require("./defaults");
|
|
6
|
+
// Plain-object check for the options walk. Option trees are built by
|
|
7
|
+
// deep() from literals (and occasionally Object.create(null)), so both
|
|
8
|
+
// Object-constructed and null-prototype objects count.
|
|
9
|
+
function isplain(v) {
|
|
10
|
+
if (null == v || 'object' !== typeof v || Array.isArray(v)) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
const proto = Object.getPrototypeOf(v);
|
|
14
|
+
return null === proto || proto === Object.prototype;
|
|
15
|
+
}
|
|
16
|
+
// Leaf equality for option values: functions by reference, RegExp by
|
|
17
|
+
// source+flags, arrays element-wise, plain objects key-wise (for
|
|
18
|
+
// object-valued array elements), everything else by Object.is (so NaN
|
|
19
|
+
// equals NaN, matching values like result.fail entries).
|
|
20
|
+
function leafeq(u, v) {
|
|
21
|
+
if (Object.is(u, v)) {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
if (u instanceof RegExp && v instanceof RegExp) {
|
|
25
|
+
return u.source === v.source && u.flags === v.flags;
|
|
26
|
+
}
|
|
27
|
+
if (Array.isArray(u) && Array.isArray(v)) {
|
|
28
|
+
return u.length === v.length && u.every((e, i) => leafeq(e, v[i]));
|
|
29
|
+
}
|
|
30
|
+
if (isplain(u) && isplain(v)) {
|
|
31
|
+
const uk = Object.keys(u);
|
|
32
|
+
const vk = Object.keys(v);
|
|
33
|
+
return (uk.length === vk.length && uk.every((k) => leafeq(u[k], v[k])));
|
|
34
|
+
}
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
// Commutative option merge: values present in only one tree, or equal
|
|
38
|
+
// in both, merge cleanly; where the trees disagree, the side that
|
|
39
|
+
// still equals the shared default loses; both sides non-default and
|
|
40
|
+
// unequal is a genuine grammar conflict and throws naming the path.
|
|
41
|
+
function mergeOptionTrees(av, bv, dv, path) {
|
|
42
|
+
if (undefined === av) {
|
|
43
|
+
return bv;
|
|
44
|
+
}
|
|
45
|
+
if (undefined === bv) {
|
|
46
|
+
return av;
|
|
47
|
+
}
|
|
48
|
+
if (isplain(av) && isplain(bv)) {
|
|
49
|
+
const out = {};
|
|
50
|
+
const bkeys = Object.keys(bv);
|
|
51
|
+
const union = [
|
|
52
|
+
...Object.keys(av),
|
|
53
|
+
...bkeys.filter((k) => !(k in av)),
|
|
54
|
+
];
|
|
55
|
+
for (const k of union) {
|
|
56
|
+
const merged = mergeOptionTrees(av[k], bv[k], isplain(dv) ? dv[k] : undefined, [...path, k]);
|
|
57
|
+
if (undefined !== merged) {
|
|
58
|
+
out[k] = merged;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return out;
|
|
62
|
+
}
|
|
63
|
+
if (leafeq(av, bv)) {
|
|
64
|
+
return av;
|
|
65
|
+
}
|
|
66
|
+
if (leafeq(av, dv)) {
|
|
67
|
+
return bv;
|
|
68
|
+
}
|
|
69
|
+
if (leafeq(bv, dv)) {
|
|
70
|
+
return av;
|
|
71
|
+
}
|
|
72
|
+
throw new Error('merge: conflicting option values at ' + path.join('.'));
|
|
73
|
+
}
|
|
74
|
+
// Two fixed-token names claiming one source string would make
|
|
75
|
+
// configure() silently drop one of them — refuse instead.
|
|
76
|
+
function checkFixedTokenSources(options) {
|
|
77
|
+
const token = options.fixed?.token;
|
|
78
|
+
if (null == token) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const bysrc = {};
|
|
82
|
+
for (const name of Object.keys(token)) {
|
|
83
|
+
const src = token[name];
|
|
84
|
+
if (null != bysrc[src] && bysrc[src] !== name) {
|
|
85
|
+
throw new Error('merge: fixed tokens ' + bysrc[src] + ' and ' + name +
|
|
86
|
+
' both claim source ' + JSON.stringify(src));
|
|
87
|
+
}
|
|
88
|
+
bysrc[src] = name;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// De-share match.token matcher objects. configure() annotates each
|
|
92
|
+
// matcher (RegExp or function) in place with the instance's `tin$`
|
|
93
|
+
// (utility.ts) — a matcher object shared between the merged options
|
|
94
|
+
// and a source instance would have its annotation overwritten when
|
|
95
|
+
// the merged instance configures, silently corrupting the source's
|
|
96
|
+
// lexer. RegExps are cloned (keeping the user-set `eager$` opt-out);
|
|
97
|
+
// function-form matchers get a delegating wrapper.
|
|
98
|
+
function deshareMatchTokens(options) {
|
|
99
|
+
const token = options.match?.token;
|
|
100
|
+
if (null == token) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const fresh = {};
|
|
104
|
+
for (const name of Object.keys(token)) {
|
|
105
|
+
const m = token[name];
|
|
106
|
+
if (m instanceof RegExp) {
|
|
107
|
+
const re = new RegExp(m.source, m.flags);
|
|
108
|
+
if (m.eager$) {
|
|
109
|
+
re.eager$ = true;
|
|
110
|
+
}
|
|
111
|
+
fresh[name] = re;
|
|
112
|
+
}
|
|
113
|
+
else if ('function' === typeof m) {
|
|
114
|
+
const wrapped = (lex, rule, tI) => m(lex, rule, tI);
|
|
115
|
+
if (m.eager$) {
|
|
116
|
+
wrapped.eager$ = true;
|
|
117
|
+
}
|
|
118
|
+
fresh[name] = wrapped;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
fresh[name] = m;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
options.match.token = fresh;
|
|
125
|
+
}
|
|
126
|
+
// Rebuild the lex matcher registry with keys inserted in (order, name)
|
|
127
|
+
// order. configure() sorts matchers by `order` with a stable sort, so
|
|
128
|
+
// insertion order decides ties — this makes the merged matcher
|
|
129
|
+
// sequence deterministic regardless of merge direction.
|
|
130
|
+
function orderLexMatch(options) {
|
|
131
|
+
const match = options.lex?.match;
|
|
132
|
+
if (null == match) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const names = Object.keys(match).sort((a, b) => {
|
|
136
|
+
const oa = match[a]?.order ?? 0;
|
|
137
|
+
const ob = match[b]?.order ?? 0;
|
|
138
|
+
return oa !== ob ? oa - ob : a < b ? -1 : a > b ? 1 : 0;
|
|
139
|
+
});
|
|
140
|
+
const ordered = {};
|
|
141
|
+
for (const name of names) {
|
|
142
|
+
ordered[name] = match[name];
|
|
143
|
+
}
|
|
144
|
+
options.lex.match = ordered;
|
|
145
|
+
}
|
|
146
|
+
// Translate one `s` entry from the source Tin space to token names.
|
|
147
|
+
// String entries (token or tokenset names) pass through; the merged
|
|
148
|
+
// instance re-resolves them at normalization time.
|
|
149
|
+
function untin(entry, cfg) {
|
|
150
|
+
const name = (tin) => {
|
|
151
|
+
const n = cfg.t[tin];
|
|
152
|
+
if (null == n) {
|
|
153
|
+
throw new Error('merge: unknown token tin: ' + tin);
|
|
154
|
+
}
|
|
155
|
+
return n;
|
|
156
|
+
};
|
|
157
|
+
if ('number' === typeof entry) {
|
|
158
|
+
return name(entry);
|
|
159
|
+
}
|
|
160
|
+
if (Array.isArray(entry)) {
|
|
161
|
+
return entry.map((e) => ('number' === typeof e ? name(e) : e));
|
|
162
|
+
}
|
|
163
|
+
return entry;
|
|
164
|
+
}
|
|
165
|
+
// Presence vector deciding "complexity" order between alts whose
|
|
166
|
+
// token sequences are identical: more complex first, compared
|
|
167
|
+
// element-wise in this fixed field order.
|
|
168
|
+
function altComplexity(alt) {
|
|
169
|
+
return [
|
|
170
|
+
alt.c ? 1 : 0,
|
|
171
|
+
alt.e ? 1 : 0,
|
|
172
|
+
alt.h ? 1 : 0,
|
|
173
|
+
alt.b ? 1 : 0,
|
|
174
|
+
alt.n ? Object.keys(alt.n).length : 0,
|
|
175
|
+
alt.a ? 1 : 0,
|
|
176
|
+
alt.u ? 1 : 0,
|
|
177
|
+
alt.k ? 1 : 0,
|
|
178
|
+
alt.p ? 1 : 0,
|
|
179
|
+
alt.r ? 1 : 0,
|
|
180
|
+
];
|
|
181
|
+
}
|
|
182
|
+
// Build the portable form of a normalized alt. The canonical
|
|
183
|
+
// per-position key is the sorted, space-joined token-name expansion of
|
|
184
|
+
// that position (uniform over single tokens, tokensets, and Tin-array
|
|
185
|
+
// subsets), computed from the source-resolved alt.t tables.
|
|
186
|
+
function portable(alt, cfg, tag) {
|
|
187
|
+
const t = alt.t || [];
|
|
188
|
+
const keys = t.map((tins) => tins
|
|
189
|
+
.map((tin) => cfg.t[tin])
|
|
190
|
+
.sort()
|
|
191
|
+
.join(' '));
|
|
192
|
+
const clone = { ...alt };
|
|
193
|
+
delete clone.t;
|
|
194
|
+
delete clone.S;
|
|
195
|
+
delete clone.sN;
|
|
196
|
+
clone.s =
|
|
197
|
+
alt.s && alt.s.length
|
|
198
|
+
? alt.s.map((entry) => untin(entry, cfg))
|
|
199
|
+
: null;
|
|
200
|
+
clone.g = [...(alt.g || [])];
|
|
201
|
+
if (alt.n) {
|
|
202
|
+
clone.n = { ...alt.n };
|
|
203
|
+
}
|
|
204
|
+
if (alt.u) {
|
|
205
|
+
clone.u = { ...alt.u };
|
|
206
|
+
}
|
|
207
|
+
if (alt.k) {
|
|
208
|
+
clone.k = { ...alt.k };
|
|
209
|
+
}
|
|
210
|
+
return {
|
|
211
|
+
alt: clone,
|
|
212
|
+
keys,
|
|
213
|
+
complexity: altComplexity(alt),
|
|
214
|
+
gkey: (alt.g || []).join(','),
|
|
215
|
+
tag,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
// The interleave comparator (<0 means a first):
|
|
219
|
+
// 1. first differing position: lexicographic token-name order;
|
|
220
|
+
// 2. one sequence a prefix of the other: longer first (so empty-s
|
|
221
|
+
// catch-all alts sort last);
|
|
222
|
+
// 3. identical sequences: more complex first, then group tags;
|
|
223
|
+
// 4. finally the source tag — never equal across the two parsers, so
|
|
224
|
+
// the order is total and independent of merge direction.
|
|
225
|
+
function compareAlts(a, b) {
|
|
226
|
+
const n = Math.min(a.keys.length, b.keys.length);
|
|
227
|
+
for (let i = 0; i < n; i++) {
|
|
228
|
+
if (a.keys[i] !== b.keys[i]) {
|
|
229
|
+
return a.keys[i] < b.keys[i] ? -1 : 1;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
if (a.keys.length !== b.keys.length) {
|
|
233
|
+
return b.keys.length - a.keys.length;
|
|
234
|
+
}
|
|
235
|
+
for (let i = 0; i < a.complexity.length; i++) {
|
|
236
|
+
const d = b.complexity[i] - a.complexity[i];
|
|
237
|
+
if (0 !== d) {
|
|
238
|
+
return d;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
if (a.gkey !== b.gkey) {
|
|
242
|
+
return a.gkey < b.gkey ? -1 : 1;
|
|
243
|
+
}
|
|
244
|
+
return a.tag < b.tag ? -1 : a.tag > b.tag ? 1 : 0;
|
|
245
|
+
}
|
|
246
|
+
// Function-field equality for dedupe: reference identity, or — since
|
|
247
|
+
// every plugin run creates fresh closures, so two instances that
|
|
248
|
+
// installed the same plugin never share references — identical source
|
|
249
|
+
// text. Source equality is blind to captured environments, which is
|
|
250
|
+
// why the callers below restrict it to cases where that cannot change
|
|
251
|
+
// parse behavior.
|
|
252
|
+
function fneq(u, v) {
|
|
253
|
+
if (u === v) {
|
|
254
|
+
return true;
|
|
255
|
+
}
|
|
256
|
+
return ('function' === typeof u &&
|
|
257
|
+
'function' === typeof v &&
|
|
258
|
+
u.toString() === v.toString());
|
|
259
|
+
}
|
|
260
|
+
// Identical alts (same token keys and group tags, same behavior
|
|
261
|
+
// fields, same data props by value) are emitted once — the
|
|
262
|
+
// shared-base-plugin case, where both instances installed the same
|
|
263
|
+
// grammar plugin. Fields compare by reference or by function source;
|
|
264
|
+
// for the source path the alts must be unconditioned (or share one
|
|
265
|
+
// condition reference): with no condition the first of two
|
|
266
|
+
// identical-sequence alts always wins the match and the second is
|
|
267
|
+
// unreachable, so the dedupe cannot change behavior even if the
|
|
268
|
+
// source-equal closures captured different environments.
|
|
269
|
+
function identicalAlts(a, b) {
|
|
270
|
+
if (a.keys.length !== b.keys.length ||
|
|
271
|
+
!a.keys.every((k, i) => k === b.keys[i]) ||
|
|
272
|
+
a.gkey !== b.gkey) {
|
|
273
|
+
return false;
|
|
274
|
+
}
|
|
275
|
+
if (a.alt.c !== b.alt.c && (a.alt.c || b.alt.c)) {
|
|
276
|
+
return false;
|
|
277
|
+
}
|
|
278
|
+
return (fneq(a.alt.a, b.alt.a) &&
|
|
279
|
+
fneq(a.alt.h, b.alt.h) &&
|
|
280
|
+
fneq(a.alt.e, b.alt.e) &&
|
|
281
|
+
(a.alt.b === b.alt.b || fneq(a.alt.b, b.alt.b)) &&
|
|
282
|
+
(a.alt.p === b.alt.p || fneq(a.alt.p, b.alt.p)) &&
|
|
283
|
+
(a.alt.r === b.alt.r || fneq(a.alt.r, b.alt.r)) &&
|
|
284
|
+
leafeq(a.alt.n, b.alt.n) &&
|
|
285
|
+
leafeq(a.alt.u, b.alt.u) &&
|
|
286
|
+
leafeq(a.alt.k, b.alt.k));
|
|
287
|
+
}
|
|
288
|
+
// Standard two-pointer merge: each source list stays internally
|
|
289
|
+
// stable (original alt order is preserved relative to itself), the
|
|
290
|
+
// comparator only decides interleaving across the two lists. Dedupe
|
|
291
|
+
// runs first, position-independently: an alt of y identical to ANY
|
|
292
|
+
// alt of x is dropped (x is the canonical smaller-tag side, so the
|
|
293
|
+
// outcome is direction-independent) — head-only comparison would miss
|
|
294
|
+
// shared-base alts shifted by each side's own additions.
|
|
295
|
+
function interleave(xs, ys) {
|
|
296
|
+
const yy = ys.filter((y) => !xs.some((x) => identicalAlts(x, y)));
|
|
297
|
+
const out = [];
|
|
298
|
+
let i = 0;
|
|
299
|
+
let j = 0;
|
|
300
|
+
while (i < xs.length && j < yy.length) {
|
|
301
|
+
if (compareAlts(xs[i], yy[j]) <= 0) {
|
|
302
|
+
out.push(xs[i++]);
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
out.push(yy[j++]);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
while (i < xs.length) {
|
|
309
|
+
out.push(xs[i++]);
|
|
310
|
+
}
|
|
311
|
+
while (j < yy.length) {
|
|
312
|
+
out.push(yy[j++]);
|
|
313
|
+
}
|
|
314
|
+
return out;
|
|
315
|
+
}
|
|
316
|
+
// Extract the portable rule records of one instance. fnref keys are
|
|
317
|
+
// renamed '@x' -> '@<tag>:x' so the two parsers' named actions cannot
|
|
318
|
+
// collide; the '<tag>:' infix can never match the reserved
|
|
319
|
+
// '@<rulename>-<phase>' lifecycle pattern, so renamed entries never
|
|
320
|
+
// auto-install (the already-installed bo/ao/bc/ac arrays are carried
|
|
321
|
+
// verbatim instead). '$'-refs are engine builtins — identical
|
|
322
|
+
// references on both sides — and stay unprefixed.
|
|
323
|
+
function ruleRecords(tn, tag) {
|
|
324
|
+
const internal = tn.internal();
|
|
325
|
+
const cfg = internal.config;
|
|
326
|
+
const rsm = internal.parser.rule();
|
|
327
|
+
const records = {};
|
|
328
|
+
for (const name of Object.keys(rsm)) {
|
|
329
|
+
const def = rsm[name].def;
|
|
330
|
+
const fnref = {};
|
|
331
|
+
for (const key of Object.keys(def.fnref)) {
|
|
332
|
+
if (key.includes('$')) {
|
|
333
|
+
fnref[key] = def.fnref[key];
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
fnref['@' + tag + ':' + key.substring(1)] = def.fnref[key];
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
records[name] = {
|
|
340
|
+
fnref,
|
|
341
|
+
bo: [...def.bo],
|
|
342
|
+
ao: [...def.ao],
|
|
343
|
+
bc: [...def.bc],
|
|
344
|
+
ac: [...def.ac],
|
|
345
|
+
open: def.open.map((alt) => portable(alt, cfg, tag)),
|
|
346
|
+
close: def.close.map((alt) => portable(alt, cfg, tag)),
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
return records;
|
|
350
|
+
}
|
|
351
|
+
// Concatenate lifecycle actions in canonical (tag) order, deduping by
|
|
352
|
+
// function identity or source text so a handler contributed by a
|
|
353
|
+
// plugin both instances installed (fresh closures per plugin run, same
|
|
354
|
+
// source) installs once — otherwise e.g. a shared base grammar's
|
|
355
|
+
// element handler would append every element twice. Source equality
|
|
356
|
+
// cannot see captured environments; a handler whose behavior differs
|
|
357
|
+
// only via its closure environment dedupes to the smaller-tag side's
|
|
358
|
+
// copy (documented).
|
|
359
|
+
function concatActions(xs, ys) {
|
|
360
|
+
const out = [...xs];
|
|
361
|
+
for (const fn of ys) {
|
|
362
|
+
if (!out.some((existing) => fneq(existing, fn))) {
|
|
363
|
+
out.push(fn);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
return out;
|
|
367
|
+
}
|
|
368
|
+
// Fresh alt clone per plugin invocation: normalt mutates alts in
|
|
369
|
+
// place (match tables, sorted g), and the synthetic plugin re-runs on
|
|
370
|
+
// make()-derived children, which must not share alt objects.
|
|
371
|
+
function cloneAlt(alt) {
|
|
372
|
+
const out = { ...alt };
|
|
373
|
+
out.s = Array.isArray(alt.s) ? [...alt.s] : alt.s;
|
|
374
|
+
out.g = [...(alt.g || [])];
|
|
375
|
+
if (alt.n) {
|
|
376
|
+
out.n = { ...alt.n };
|
|
377
|
+
}
|
|
378
|
+
if (alt.u) {
|
|
379
|
+
out.u = { ...alt.u };
|
|
380
|
+
}
|
|
381
|
+
if (alt.k) {
|
|
382
|
+
out.k = { ...alt.k };
|
|
383
|
+
}
|
|
384
|
+
return out;
|
|
385
|
+
}
|
|
386
|
+
// Merge two instances into a new one. `makeInstance` is injected by
|
|
387
|
+
// tabnas.ts (avoids an import cycle) and builds a fresh instance from
|
|
388
|
+
// the merged options — deliberately not make() from either side, so
|
|
389
|
+
// the result cannot depend on argument order.
|
|
390
|
+
function mergeInstances(a, b, makeInstance) {
|
|
391
|
+
const tagOf = (tn, which) => {
|
|
392
|
+
const tag = tn.internal().merged.tag;
|
|
393
|
+
if (null == tag || '' === tag || '-' === tag) {
|
|
394
|
+
throw new Error('merge: the ' + which + ' instance needs a tag option ' +
|
|
395
|
+
'(used to prefix its named actions)');
|
|
396
|
+
}
|
|
397
|
+
return String(tag);
|
|
398
|
+
};
|
|
399
|
+
const tagA = tagOf(a, 'first');
|
|
400
|
+
const tagB = tagOf(b, 'second');
|
|
401
|
+
if (tagA === tagB) {
|
|
402
|
+
throw new Error('merge: instance tags must differ, both are ' +
|
|
403
|
+
JSON.stringify(tagA));
|
|
404
|
+
}
|
|
405
|
+
// Canonical order by tag: everything below is independent of which
|
|
406
|
+
// instance was the merge receiver.
|
|
407
|
+
const [x, y] = tagA < tagB ? [a, b] : [b, a];
|
|
408
|
+
const [tagX, tagY] = tagA < tagB ? [tagA, tagB] : [tagB, tagA];
|
|
409
|
+
// `tag` is computed for the result and `plugins` is handled by the
|
|
410
|
+
// synthetic plugin below — neither takes part in the conflict walk.
|
|
411
|
+
const strip = (tree) => {
|
|
412
|
+
const { tag, plugins, ...rest } = tree;
|
|
413
|
+
return rest;
|
|
414
|
+
};
|
|
415
|
+
const mergedOptions = mergeOptionTrees(strip(x.internal().merged), strip(y.internal().merged), defaults_1.defaults, []);
|
|
416
|
+
mergedOptions.tag = tagX + '~' + tagY;
|
|
417
|
+
checkFixedTokenSources(mergedOptions);
|
|
418
|
+
deshareMatchTokens(mergedOptions);
|
|
419
|
+
orderLexMatch(mergedOptions);
|
|
420
|
+
const xRecords = ruleRecords(x, tagX);
|
|
421
|
+
const yRecords = ruleRecords(y, tagY);
|
|
422
|
+
const ruleNames = [
|
|
423
|
+
...Object.keys(xRecords),
|
|
424
|
+
...Object.keys(yRecords).filter((n) => !(n in xRecords)),
|
|
425
|
+
].sort();
|
|
426
|
+
const empty = {
|
|
427
|
+
fnref: {}, bo: [], ao: [], bc: [], ac: [], open: [], close: [],
|
|
428
|
+
};
|
|
429
|
+
const records = {};
|
|
430
|
+
for (const name of ruleNames) {
|
|
431
|
+
const xr = xRecords[name] || empty;
|
|
432
|
+
const yr = yRecords[name] || empty;
|
|
433
|
+
records[name] = {
|
|
434
|
+
fnref: { ...xr.fnref, ...yr.fnref },
|
|
435
|
+
bo: concatActions(xr.bo, yr.bo),
|
|
436
|
+
ao: concatActions(xr.ao, yr.ao),
|
|
437
|
+
bc: concatActions(xr.bc, yr.bc),
|
|
438
|
+
ac: concatActions(xr.ac, yr.ac),
|
|
439
|
+
open: interleave(xr.open, yr.open),
|
|
440
|
+
close: interleave(xr.close, yr.close),
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
// Synthetic plugin carrying the merged grammar. Installing rules
|
|
444
|
+
// via a plugin (rather than directly) keeps make() derivation
|
|
445
|
+
// working: children rebuild their rules by re-running plugins.
|
|
446
|
+
// fnref entries are assigned directly (not via rs.fnref()) so the
|
|
447
|
+
// renamed keys never trigger lifecycle auto-install; the lifecycle
|
|
448
|
+
// arrays carry the already-installed handlers.
|
|
449
|
+
const mergedGrammar = function (tn) {
|
|
450
|
+
for (const name of ruleNames) {
|
|
451
|
+
const rec = records[name];
|
|
452
|
+
tn.rule(name, (rs) => {
|
|
453
|
+
Object.assign(rs.def.fnref, rec.fnref);
|
|
454
|
+
rs.def.bo.push(...rec.bo);
|
|
455
|
+
rs.def.ao.push(...rec.ao);
|
|
456
|
+
rs.def.bc.push(...rec.bc);
|
|
457
|
+
rs.def.ac.push(...rec.ac);
|
|
458
|
+
if (0 < rec.open.length) {
|
|
459
|
+
rs.open(rec.open.map((p) => cloneAlt(p.alt)), { append: true });
|
|
460
|
+
}
|
|
461
|
+
if (0 < rec.close.length) {
|
|
462
|
+
rs.close(rec.close.map((p) => cloneAlt(p.alt)), { append: true });
|
|
463
|
+
}
|
|
464
|
+
});
|
|
465
|
+
}
|
|
466
|
+
};
|
|
467
|
+
Object.defineProperty(mergedGrammar, 'name', { value: 'merged' });
|
|
468
|
+
const out = makeInstance(mergedOptions);
|
|
469
|
+
out.use(mergedGrammar);
|
|
470
|
+
// Event subscribers carry over too, in canonical order.
|
|
471
|
+
const sub = out.internal().sub;
|
|
472
|
+
const xSub = x.internal().sub;
|
|
473
|
+
const ySub = y.internal().sub;
|
|
474
|
+
for (const kind of ['lex', 'rule']) {
|
|
475
|
+
const combined = [...(xSub[kind] || []), ...(ySub[kind] || [])];
|
|
476
|
+
if (0 < combined.length) {
|
|
477
|
+
sub[kind] = [...(sub[kind] || []), ...combined];
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
return out;
|
|
481
|
+
}
|
|
482
|
+
//# sourceMappingURL=merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../src/merge.ts"],"names":[],"mappings":"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"}
|
package/dist/parser.d.ts
CHANGED
package/dist/parser.js
CHANGED
|
@@ -12,6 +12,11 @@ Object.defineProperty(exports, "makeRule", { enumerable: true, get: function ()
|
|
|
12
12
|
Object.defineProperty(exports, "makeRuleSpec", { enumerable: true, get: function () { return rules_1.makeRuleSpec; } });
|
|
13
13
|
// Rule-driven parser: start() parses from scratch, clone() makes a child sibling.
|
|
14
14
|
class Parser {
|
|
15
|
+
// Per-Parser caches for per-parse setup that depends only on cfg.
|
|
16
|
+
// options()/make() build a fresh Parser (makeParser/clone), so these
|
|
17
|
+
// never outlive the configuration they were built from.
|
|
18
|
+
#nrspec; // Empty spec backing the NORULE sentinel.
|
|
19
|
+
#srcfmt; // Debug source formatter.
|
|
15
20
|
constructor(options, cfg, j) {
|
|
16
21
|
this.rsm = {}; // Rule specs keyed by rule name.
|
|
17
22
|
this.options = options;
|
|
@@ -44,6 +49,7 @@ class Parser {
|
|
|
44
49
|
start(src, tabnas, meta, parent_ctx) {
|
|
45
50
|
let root;
|
|
46
51
|
let endtkn = (0, lexer_1.makeToken)('#ZZ', (0, utility_1.tokenize)('#ZZ', this.cfg), undefined, types_1.EMPTY, (0, lexer_1.makePoint)(-1));
|
|
52
|
+
let bdtin = (0, utility_1.tokenize)('#BD', this.cfg);
|
|
47
53
|
let notoken = (0, lexer_1.makeNoToken)();
|
|
48
54
|
// Build the per-parse Context. NORULE is patched in once we have
|
|
49
55
|
// the actual no-rule sentinel — the constructor uses NOTOKEN as a
|
|
@@ -58,15 +64,19 @@ class Parser {
|
|
|
58
64
|
inst: () => tabnas,
|
|
59
65
|
sub: tabnas.internal().sub,
|
|
60
66
|
rsm: this.rsm,
|
|
61
|
-
F: (0, utility_1.srcfmt)(this.cfg),
|
|
67
|
+
F: (this.#srcfmt ??= (0, utility_1.srcfmt)(this.cfg)),
|
|
62
68
|
NOTOKEN: notoken,
|
|
63
69
|
NORULE: {},
|
|
64
70
|
});
|
|
65
71
|
// Merge in any caller-supplied parent_ctx (plugin tests use this
|
|
66
72
|
// to seed `meta` or other fields). `deep` mutates the class
|
|
67
73
|
// instance in place, so getters/setters and methods survive.
|
|
68
|
-
|
|
69
|
-
|
|
74
|
+
if (null != parent_ctx) {
|
|
75
|
+
(0, utility_1.deep)(ctx, parent_ctx);
|
|
76
|
+
}
|
|
77
|
+
// The no-rule sentinel Rule is per-parse, but its (empty) spec is
|
|
78
|
+
// immutable and cfg-scoped, so build the spec once per Parser.
|
|
79
|
+
let norule = (0, rules_1.makeRule)((this.#nrspec ??= (0, rules_1.makeRuleSpec)(this.ji, this.cfg, {})), ctx);
|
|
70
80
|
ctx.NORULE = norule;
|
|
71
81
|
ctx.rule = norule;
|
|
72
82
|
// makelog(ctx, meta)
|
|
@@ -83,7 +93,13 @@ class Parser {
|
|
|
83
93
|
throw new error_1.TabnasError(utility_1.S.unexpected, { src }, ctx.t0, norule, ctx);
|
|
84
94
|
}
|
|
85
95
|
}
|
|
86
|
-
|
|
96
|
+
// Bad tokens are converted to throws by the engine's own token
|
|
97
|
+
// consumers (the parse_alts fetch loop, and the trailing-content
|
|
98
|
+
// check below) rather than by wrapping lex.next in a closure — the
|
|
99
|
+
// old badlex wrapper cost a bind + closure + Lex shape transition
|
|
100
|
+
// per parse and an extra call frame per token. The exported badlex
|
|
101
|
+
// helper remains for standalone-lexer users.
|
|
102
|
+
let lex = (0, lexer_1.makeLex)(ctx);
|
|
87
103
|
// Stash lex on ctx so ctx.rewind can push tokens back onto the
|
|
88
104
|
// lexer's pending-token queue.
|
|
89
105
|
ctx.lex = lex;
|
|
@@ -97,7 +113,10 @@ class Parser {
|
|
|
97
113
|
// rule open and close, and for each rule on each char to be
|
|
98
114
|
// virtual (like map, list), and double for safety margin (allows
|
|
99
115
|
// lots of backtracking), and apply a multipler option as a get-out-of-jail.
|
|
100
|
-
let
|
|
116
|
+
let rsmCount = 0;
|
|
117
|
+
for (let _rn in this.rsm)
|
|
118
|
+
rsmCount++;
|
|
119
|
+
let maxr = 2 * rsmCount * lex.src.length * 2 * ctx.cfg.rule.maxmul;
|
|
101
120
|
// Process rules on tokens
|
|
102
121
|
let kI = 0;
|
|
103
122
|
// This loop is the heart of the engine. Keep processing rule
|
|
@@ -114,7 +133,17 @@ class Parser {
|
|
|
114
133
|
kI++;
|
|
115
134
|
}
|
|
116
135
|
// TODO: option to allow trailing content
|
|
117
|
-
|
|
136
|
+
const endtry = lex.next(rule);
|
|
137
|
+
if (bdtin === endtry.tin) {
|
|
138
|
+
// A bad token in trailing content carries its own error code
|
|
139
|
+
// (e.g. unterminated_string), matching the old badlex wrapper.
|
|
140
|
+
let details = {};
|
|
141
|
+
if (null != endtry.use) {
|
|
142
|
+
details.use = endtry.use;
|
|
143
|
+
}
|
|
144
|
+
throw new error_1.TabnasError(endtry.why || utility_1.S.unexpected, details, endtry, rule, ctx);
|
|
145
|
+
}
|
|
146
|
+
if (endtkn.tin !== endtry.tin) {
|
|
118
147
|
throw new error_1.TabnasError(utility_1.S.unexpected, {}, ctx.t0, norule, ctx);
|
|
119
148
|
}
|
|
120
149
|
// NOTE: by returning root, we get implicit closing of maps and lists.
|
package/dist/parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":";AAAA,yDAAyD;;;AAiBzD,mCAA+B;AAE/B,uCAAmC;AAEnC,
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
|