@tabnas/debug 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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 jsonicjs
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,67 @@
1
+ # @tabnas/debug
2
+
3
+ Debug / introspection plugin for the
4
+ [`tabnas`](https://github.com/tabnas/parser) parser.
5
+
6
+ It makes a grammar *visible*: a structured `model()` and a printable
7
+ `describe()` return a description of an instance's installed grammar
8
+ (rules, tokens, plugins), `abnf()` re-expresses it as ABNF, and `trace`
9
+ logs a parse step by step. A dev/test aid — never a runtime dependency.
10
+
11
+ ## Install
12
+
13
+ ```bash
14
+ npm install @tabnas/parser @tabnas/debug
15
+ ```
16
+
17
+ ## Use
18
+
19
+ ```js
20
+ const { Tabnas } = require('@tabnas/parser')
21
+ const { Debug } = require('@tabnas/debug')
22
+
23
+ const tn = new Tabnas({ tag: 'demo' })
24
+ tn.use(Debug, { print: false, trace: false })
25
+
26
+ // describe() is the printable form; model() is the structured form.
27
+ typeof tn.debug.describe() // => 'string'
28
+
29
+ const m = tn.debug.model()
30
+ m.tag // => 'demo'
31
+ m.config.start // => 'val'
32
+ m.plugins.map((p) => p.name) // => ['Debug']
33
+ Array.isArray(m.rules) // => true
34
+ ```
35
+
36
+ ## Structured output — `model()`
37
+
38
+ `describe()` renders the instance as text; `model()` returns the same
39
+ information as a typed, JSON-serialisable object (`DebugModel`):
40
+
41
+ | field | what it holds |
42
+ |---|---|
43
+ | `tag` | the instance tag |
44
+ | `tokens` | `{ tin, name, fixed? }[]` — the token table |
45
+ | `tokenSets` | named token sets → member tins |
46
+ | `rules` | each rule's `open` / `close` alternates as `{ seq, push, replace, back, counters, groups, action, cond, modifier }` |
47
+ | `graph` | per-rule push/replace edges (`openPush`, `openReplace`, `closePush`, `closeReplace`) |
48
+ | `lexer` | the lexer matchers (`order`, `matcher`, `make`) |
49
+ | `config` | start rule, finish flag, safe-key, and the per-lexer enable flags |
50
+ | `plugins` | the applied plugins (name + options) |
51
+ | `abnf` | the live grammar rendered as ABNF text |
52
+
53
+ The grammar-structure fields round-trip through `JSON.stringify`.
54
+
55
+ ## Documentation
56
+
57
+ - [Tutorial](doc/tutorial.md) — zero to a working inspection, step by step.
58
+ - [How-to guide](doc/guide.md) — focused recipes (diff grammars, capture
59
+ traces, round-trip ABNF).
60
+ - [Reference](doc/reference.md) — the exact exports, options and types.
61
+ - [Concepts](doc/concepts.md) — how it works and why.
62
+
63
+ The Go port lives in [`../go`](../go) and tracks this implementation.
64
+
65
+ ## License
66
+
67
+ MIT.
@@ -0,0 +1,61 @@
1
+ import type { Plugin } from '@tabnas/parser';
2
+ export type DebugTokenInfo = {
3
+ tin: number;
4
+ name: string;
5
+ fixed?: string;
6
+ };
7
+ export type DebugTokenSet = {
8
+ name: string;
9
+ tins: number[];
10
+ };
11
+ export type DebugAltInfo = {
12
+ seq: (string | string[])[];
13
+ push?: string;
14
+ replace?: string;
15
+ back?: number;
16
+ counters?: Record<string, number>;
17
+ groups: string[];
18
+ action: boolean;
19
+ cond: boolean;
20
+ modifier: boolean;
21
+ };
22
+ export type DebugRuleInfo = {
23
+ name: string;
24
+ open: DebugAltInfo[];
25
+ close: DebugAltInfo[];
26
+ };
27
+ export type DebugRuleEdges = {
28
+ name: string;
29
+ openPush: string[];
30
+ openReplace: string[];
31
+ closePush: string[];
32
+ closeReplace: string[];
33
+ };
34
+ export type DebugLexMatcher = {
35
+ order: number;
36
+ matcher: string;
37
+ make: string;
38
+ };
39
+ export type DebugConfigInfo = {
40
+ start: string;
41
+ finish: boolean;
42
+ safeKey: boolean;
43
+ lex: Record<string, boolean>;
44
+ };
45
+ export type DebugPluginInfo = {
46
+ name: string;
47
+ options?: Record<string, any>;
48
+ };
49
+ export type DebugModel = {
50
+ tag: string;
51
+ tokens: DebugTokenInfo[];
52
+ tokenSets: DebugTokenSet[];
53
+ rules: DebugRuleInfo[];
54
+ graph: DebugRuleEdges[];
55
+ lexer: DebugLexMatcher[];
56
+ config: DebugConfigInfo;
57
+ plugins: DebugPluginInfo[];
58
+ abnf: string;
59
+ };
60
+ declare const Debug: Plugin;
61
+ export { Debug };
package/dist/debug.js ADDED
@@ -0,0 +1,760 @@
1
+ "use strict";
2
+ /* Copyright (c) 2021-2026 Richard Rodger, MIT License */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Debug = void 0;
5
+ const parser_1 = require("@tabnas/parser");
6
+ const DEFAULTS = {
7
+ print: true,
8
+ trace: {
9
+ step: true,
10
+ rule: true,
11
+ lex: true,
12
+ parse: true,
13
+ node: true,
14
+ stack: true,
15
+ },
16
+ };
17
+ const { entries, tokenize } = parser_1.util;
18
+ const Debug = (tabnas, options) => {
19
+ options.trace =
20
+ true === options.trace ? { ...DEFAULTS.trace } : options.trace;
21
+ const { keys, values, entries } = tabnas.util;
22
+ tabnas.debug = {
23
+ abnf: function () {
24
+ return emitAbnf(tabnas);
25
+ },
26
+ describe: function () {
27
+ let cfg = tabnas.internal().config;
28
+ let match = cfg.lex.match;
29
+ let rules = tabnas.rule();
30
+ return [
31
+ '========= INSTANCE ========',
32
+ ' tag: ' + (tabnas.internal().merged.tag ?? ''),
33
+ '\n',
34
+ '========= TOKENS ========',
35
+ Object.entries(cfg.t)
36
+ .filter((te) => 'string' === typeof te[1])
37
+ .map((te) => {
38
+ return (' ' +
39
+ te[0] +
40
+ '\t' +
41
+ te[1] +
42
+ '\t' +
43
+ ((s) => (s ? '"' + s + '"' : ''))(cfg.fixed.ref[te[0]] || ''));
44
+ })
45
+ .join('\n'),
46
+ '\n',
47
+ Object.entries(cfg.tokenSet)
48
+ .map((te) => {
49
+ return (' ' +
50
+ te[0] +
51
+ '\t' +
52
+ Object.keys(cfg.tokenSetTins[te[0]] ?? []));
53
+ })
54
+ .join('\n'),
55
+ '\n',
56
+ '========= RULES =========',
57
+ ruleTree(tabnas, keys(rules), rules),
58
+ '\n',
59
+ '========= ALTS =========',
60
+ values(rules)
61
+ .map((rs) => ' ' +
62
+ rs.name +
63
+ ':\n' +
64
+ descAlt(tabnas, rs, 'open') +
65
+ descAlt(tabnas, rs, 'close'))
66
+ .join('\n\n'),
67
+ '\n',
68
+ '========= LEXER =========',
69
+ ' ' +
70
+ ((match &&
71
+ match.map((m) => m.order + ': ' + m.matcher + ' (' + m.make.name + ')')) ||
72
+ []).join('\n '),
73
+ '\n',
74
+ '========= CONFIG ========',
75
+ [
76
+ ' start: ' + cfg.rule.start,
77
+ ' finish: ' + cfg.rule.finish,
78
+ ' safeKey: ' + cfg.safe.key,
79
+ ' lex.fixed: ' + cfg.fixed.lex,
80
+ ' lex.space: ' + cfg.space.lex,
81
+ ' lex.line: ' + cfg.line.lex,
82
+ ' lex.text: ' + cfg.text.lex,
83
+ ' lex.number: ' + cfg.number.lex,
84
+ ' lex.comment: ' + cfg.comment.lex,
85
+ ' lex.string: ' + cfg.string.lex,
86
+ ' lex.value: ' + cfg.value.lex,
87
+ ].join('\n'),
88
+ '\n',
89
+ '\n',
90
+ '========= PLUGIN =========',
91
+ ' ' +
92
+ tabnas
93
+ .internal()
94
+ .plugins.map((p) => p.name +
95
+ (p.options
96
+ ? entries(p.options).reduce((s, e) => (s += '\n ' + e[0] + ': ' + JSON.stringify(e[1])), '')
97
+ : ''))
98
+ .join('\n '),
99
+ '\n',
100
+ '========= ABNF =========',
101
+ emitAbnf(tabnas),
102
+ '\n',
103
+ ].join('\n');
104
+ },
105
+ // Structured counterpart to describe(): the instance/grammar as a
106
+ // typed, JSON-serialisable object (token table, rules + alternates,
107
+ // rule-reference graph, lexer matchers, config, plugins, ABNF text).
108
+ model: function () {
109
+ const cfg = tabnas.internal().config;
110
+ const rules = tabnas.rule();
111
+ const match = cfg.lex.match;
112
+ return {
113
+ tag: tabnas.internal().merged.tag ?? '',
114
+ tokens: Object.entries(cfg.t)
115
+ .filter((te) => 'string' === typeof te[1])
116
+ .map((te) => {
117
+ const fixed = cfg.fixed.ref[te[0]];
118
+ const info = { tin: Number(te[0]), name: te[1] };
119
+ if (fixed)
120
+ info.fixed = fixed;
121
+ return info;
122
+ }),
123
+ tokenSets: Object.entries(cfg.tokenSet).map((te) => ({
124
+ name: te[0],
125
+ tins: Array.isArray(te[1])
126
+ ? te[1].slice()
127
+ : Object.keys(cfg.tokenSetTins[te[0]] ?? {}).map(Number),
128
+ })),
129
+ rules: values(rules).map((rs) => ({
130
+ name: rs.name,
131
+ open: rs.def.open.map((a) => altInfo(tabnas, a)),
132
+ close: rs.def.close.map((a) => altInfo(tabnas, a)),
133
+ })),
134
+ graph: keys(rules).map((n) => ({
135
+ name: n,
136
+ openPush: ruleEdges(rules, n, 'open', 'p'),
137
+ openReplace: ruleEdges(rules, n, 'open', 'r'),
138
+ closePush: ruleEdges(rules, n, 'close', 'p'),
139
+ closeReplace: ruleEdges(rules, n, 'close', 'r'),
140
+ })),
141
+ lexer: (match || []).map((m) => ({
142
+ order: m.order,
143
+ matcher: String(m.matcher),
144
+ make: (m.make && m.make.name) || '',
145
+ })),
146
+ config: {
147
+ start: cfg.rule.start,
148
+ finish: cfg.rule.finish,
149
+ safeKey: cfg.safe.key,
150
+ lex: {
151
+ fixed: cfg.fixed.lex,
152
+ space: cfg.space.lex,
153
+ line: cfg.line.lex,
154
+ text: cfg.text.lex,
155
+ number: cfg.number.lex,
156
+ comment: cfg.comment.lex,
157
+ string: cfg.string.lex,
158
+ value: cfg.value.lex,
159
+ },
160
+ },
161
+ plugins: tabnas.internal().plugins.map((p) => {
162
+ const info = { name: p.name };
163
+ if (p.options)
164
+ info.options = p.options;
165
+ return info;
166
+ }),
167
+ abnf: emitAbnf(tabnas),
168
+ };
169
+ },
170
+ };
171
+ // Wrap use() once per instance so repeated application or child forks
172
+ // (the engine re-runs parent plugins on make()) do not re-stack the wrapper.
173
+ if (!tabnas.__debugUseWrapped) {
174
+ ;
175
+ tabnas.__debugUseWrapped = true;
176
+ const origUse = tabnas.use.bind(tabnas);
177
+ tabnas.use = (...args) => {
178
+ let self = origUse(...args);
179
+ if (options.print) {
180
+ // use() may return a wrapper instance; describe() whichever carries it.
181
+ const inst = self && self.debug ? self : tabnas;
182
+ if (inst.debug && inst.debug.describe) {
183
+ tabnas
184
+ .internal()
185
+ .config.debug.get_console()
186
+ .log('USE:', (args[0] && args[0].name) || '', '\n\n', inst.debug.describe());
187
+ }
188
+ }
189
+ return self;
190
+ };
191
+ }
192
+ if (options.trace) {
193
+ tabnas.options({
194
+ parse: {
195
+ prepare: {
196
+ debug: (_tabnas, ctx, _meta) => {
197
+ // Call through the console provider each time so a user-supplied
198
+ // get_console() whose log() depends on `this` is not detached.
199
+ const con = ctx.cfg.debug.get_console();
200
+ con.log('\n========= TRACE ==========');
201
+ ctx.log =
202
+ ctx.log ||
203
+ ((kind, ...rest) => {
204
+ if (LOGKIND[kind] && options.trace[kind]) {
205
+ con.log(LOGKIND[kind](...rest)
206
+ .filter((item) => 'object' != typeof item)
207
+ .map((item) => 'function' == typeof item ? item.name : item)
208
+ .join(' '));
209
+ }
210
+ });
211
+ },
212
+ },
213
+ },
214
+ });
215
+ }
216
+ };
217
+ exports.Debug = Debug;
218
+ // Emit an ABNF representation of the instance's *live* grammar.
219
+ //
220
+ // This reads ONLY the running engine (config + normalised rule specs);
221
+ // it never imports @tabnas/abnf. The mapping is the empirical inverse of
222
+ // abnf's forward encoding (see the round-trip test): tabnas rules become
223
+ // ABNF productions, OPEN alts become `/`-separated alternatives, the
224
+ // token sequence (.s) plus any push/replace target (.p/.r) becomes a
225
+ // space-separated element list, and each token resolves to an ABNF
226
+ // terminal via the fixed-literal / match-regex config.
227
+ //
228
+ // Actions (a.a) carry no ABNF meaning and are ignored. Constructs that
229
+ // cannot be represented (e.g. arbitrary match regexes) are emitted as
230
+ // ABNF comments so the output stays valid and self-documenting, even
231
+ // though such rules will not round-trip.
232
+ function emitAbnf(tabnas) {
233
+ const cfg = tabnas.internal().config;
234
+ const rules = tabnas.rule();
235
+ // bnf wraps grammars in a synthetic '__start__' rule (open .p -> the
236
+ // real start, close matches #ZZ); skip it and lead with the real start.
237
+ // A hand-written grammar's cfg.rule.start is itself a real rule, so keep
238
+ // it and emit it first like any other production.
239
+ const synthWrapper = '__start__' === cfg.rule.start ? cfg.rule.start : null;
240
+ let startRule = synthWrapper ? null : cfg.rule.start;
241
+ if (synthWrapper) {
242
+ const wrapper = rules[synthWrapper];
243
+ if (wrapper) {
244
+ for (const alt of wrapper.def.open) {
245
+ if ('string' === typeof alt.p) {
246
+ startRule = alt.p;
247
+ break;
248
+ }
249
+ if ('string' === typeof alt.r) {
250
+ startRule = alt.r;
251
+ break;
252
+ }
253
+ }
254
+ }
255
+ }
256
+ // tin (number) -> token name (e.g. 18 -> '#RX_..'); use tabnas.token.
257
+ // name -> tin via cfg.t (which also carries the reverse mapping).
258
+ const nameToTin = (name) => {
259
+ const tin = cfg.t[name];
260
+ return 'number' === typeof tin ? tin : undefined;
261
+ };
262
+ // The engine's reserved end-of-source token; never an ABNF element.
263
+ const endTin = nameToTin('#ZZ');
264
+ // Order productions: real start first, then every other non-wrapper
265
+ // rule in insertion order, de-duplicated.
266
+ const ruleNames = Object.keys(rules).filter((rn) => rn !== synthWrapper);
267
+ const ordered = [];
268
+ const seen = new Set();
269
+ if (startRule && rules[startRule]) {
270
+ ordered.push(startRule);
271
+ seen.add(startRule);
272
+ }
273
+ for (const rn of ruleNames) {
274
+ if (!seen.has(rn)) {
275
+ ordered.push(rn);
276
+ seen.add(rn);
277
+ }
278
+ }
279
+ // Every token renders as its bare name in rule bodies; `used` collects
280
+ // each token's definition for the comment legend printed at the top.
281
+ const used = new Map();
282
+ const lines = [];
283
+ for (const rn of ordered) {
284
+ const rs = rules[rn];
285
+ const alts = [];
286
+ for (const alt of rs.def.open) {
287
+ alts.push(emitAbnfAlt(tabnas, cfg, alt, endTin, used));
288
+ }
289
+ // Best-effort: a close-alt that continues into another rule
290
+ // (.p/.r, ignoring the end-token close) contributes a trailing
291
+ // reference. Epsilon close alts (no .s/.p/.r) add an empty
292
+ // alternative so optional/repetition shapes round-trip.
293
+ // An epsilon close alt (no .s/.p/.r, and not the #ZZ end) means the
294
+ // close continuation is OPTIONAL — render it as `[ cont ]`.
295
+ const closeFirstTin = (alt) => Array.isArray(alt.s) && 1 === alt.s.length
296
+ ? ('number' === typeof alt.s[0] ? alt.s[0] : cfg.t[alt.s[0]])
297
+ : undefined;
298
+ const hasEpsilonClose = rs.def.close.some((alt) => !(null != endTin && closeFirstTin(alt) === endTin) &&
299
+ (!Array.isArray(alt.s) || 0 === alt.s.length) &&
300
+ 'string' !== typeof alt.p &&
301
+ 'string' !== typeof alt.r);
302
+ for (const alt of rs.def.close) {
303
+ const isEndAlt = null != endTin && closeFirstTin(alt) === endTin;
304
+ if (isEndAlt)
305
+ continue;
306
+ // Only fold in close continuations that actually reference a rule;
307
+ // pure capture-actions (no .s/.p/.r) on a head rule are noise.
308
+ if ('string' === typeof alt.p || 'string' === typeof alt.r) {
309
+ const cont = emitAbnfAlt(tabnas, cfg, alt, endTin, used);
310
+ const piece = hasEpsilonClose ? '[ ' + cont + ' ]' : cont;
311
+ if (0 < alts.length) {
312
+ alts[alts.length - 1] =
313
+ (alts[alts.length - 1] + ' ' + piece).trim();
314
+ }
315
+ else {
316
+ alts.push(piece);
317
+ }
318
+ }
319
+ }
320
+ // A rule with no usable open alts but an epsilon possibility still
321
+ // needs to print something; default to an empty alternative.
322
+ const body = 0 === alts.length ? '' : alts.join(' / ');
323
+ lines.push(rn + ' = ' + body);
324
+ }
325
+ // Define each token as its own ABNF rule (named terminals, like the
326
+ // ABNF core rules e.g. `DIGIT = %x30-39`): a quoted literal, a
327
+ // char-range, or a prose-val `<...>` for built-in lexer tokens. Emitted
328
+ // after the grammar productions, with `=` aligned for readability.
329
+ if (0 < used.size) {
330
+ const pad = Math.max(...[...used.keys()].map((n) => n.length));
331
+ lines.push('');
332
+ for (const [name, form] of used) {
333
+ lines.push(name.padEnd(pad) + ' = ' + form);
334
+ }
335
+ }
336
+ return lines.join('\n');
337
+ }
338
+ // Render a single normalised alt as an ABNF element sequence: each
339
+ // token in .s, then any .p/.r rule reference, space-separated. An alt
340
+ // with no elements renders as the empty string (an empty alternative).
341
+ function emitAbnfAlt(tabnas, cfg, alt, endTin, used) {
342
+ const els = [];
343
+ // .s entries are token *names* (e.g. '#HI'), token *tins* (numbers),
344
+ // or — in subset form — an array of either. Resolve each to a tin via
345
+ // the engine's bidirectional token table (cfg.t) before rendering.
346
+ const toTin = (t) => 'number' === typeof t ? t : cfg.t[t];
347
+ // When `b` (backup/lookahead) is set together with a push/replace, the
348
+ // `.s` tokens are a *predictive peek* — they are matched to choose this
349
+ // alt but NOT consumed here; the pushed rule consumes them. Emitting
350
+ // them as terminals would double-count the input, so skip them and let
351
+ // the rule reference stand alone (this is how bnf encodes FIRST-set
352
+ // guards and the `[X]` optional-group dispatch).
353
+ const peekOnly = alt.b && ('string' === typeof alt.p || 'string' === typeof alt.r);
354
+ const seq = peekOnly || !Array.isArray(alt.s) ? [] : alt.s;
355
+ for (const item of seq) {
356
+ if (null == item)
357
+ continue;
358
+ if (Array.isArray(item)) {
359
+ const inner = item
360
+ .map(toTin)
361
+ .filter((t) => null != t && t !== endTin)
362
+ .map((t) => emitAbnfTerminal(tabnas, cfg, t, used));
363
+ if (0 < inner.length)
364
+ els.push('( ' + inner.join(' / ') + ' )');
365
+ continue;
366
+ }
367
+ const tin = toTin(item);
368
+ if (null == tin || tin === endTin)
369
+ continue;
370
+ els.push(emitAbnfTerminal(tabnas, cfg, tin, used));
371
+ }
372
+ // A push/replace target is a forward reference to another production.
373
+ if ('string' === typeof alt.p)
374
+ els.push(alt.p);
375
+ else if ('string' === typeof alt.r)
376
+ els.push(alt.r);
377
+ return els.join(' ');
378
+ }
379
+ // Render a token reference: every token appears by its bare NAME (e.g.
380
+ // '#PL' -> 'PL', '#NR' -> 'NR'), and its definition is recorded in `used`
381
+ // for the comment legend. A token name that is actually a rule name is a
382
+ // nonterminal reference and is returned as-is (no legend entry).
383
+ function emitAbnfTerminal(tabnas, cfg, tin, used) {
384
+ const fullName = tabnas.token[tin];
385
+ const rules = tabnas.rule();
386
+ if (fullName && rules[fullName]) {
387
+ return fullName;
388
+ }
389
+ const name = (fullName || 'T' + tin).replace(/^#/, '');
390
+ if (!used.has(name)) {
391
+ used.set(name, abnfTokenForm(cfg, tin, fullName));
392
+ }
393
+ return name;
394
+ }
395
+ // The legend definition for a token — what it matches:
396
+ // - fixed literal -> %s"<lit>" (letters) / "<lit>" (punctuation)
397
+ // - /^<lit>/i (letters) -> "<lit>" (case-insensitive literal)
398
+ // - /^[\uXXXX-\uYYYY]/ -> %xXX-YY (char range)
399
+ // - built-in matcher -> <number> / <string> / ... (lexer-provided)
400
+ function abnfTokenForm(cfg, tin, fullName) {
401
+ const fixedLit = cfg.fixed.ref[tin];
402
+ if ('string' === typeof fixedLit) {
403
+ return /[A-Za-z]/.test(fixedLit)
404
+ ? '%s"' + fixedLit + '"'
405
+ : '"' + fixedLit + '"';
406
+ }
407
+ const re = cfg.match.token[tin] ?? cfg.match.token['' + tin];
408
+ if (re instanceof RegExp) {
409
+ return regexToAbnf(re);
410
+ }
411
+ // Built-in lexer token: describe it (it is lexer-provided, so a grammar
412
+ // using it does not round-trip through bnf).
413
+ const bare = (fullName || '' + tin).replace(/^#/, '');
414
+ const desc = {
415
+ NR: 'number',
416
+ ST: 'string',
417
+ TX: 'text',
418
+ VL: 'value',
419
+ SP: 'space',
420
+ LN: 'line',
421
+ CM: 'comment',
422
+ AA: 'any',
423
+ UK: 'unknown',
424
+ BD: 'bad',
425
+ ZZ: 'end-of-source',
426
+ };
427
+ return '<' + (desc[bare] || 'built-in ' + bare) + '>';
428
+ }
429
+ // Translate the anchored RegExp bnf installs for a match token back to
430
+ // ABNF, covering the two shapes bnf actually emits.
431
+ function regexToAbnf(re) {
432
+ // Drop the leading anchor bnf always prepends.
433
+ let src = re.source;
434
+ if ('^' === src[0])
435
+ src = src.slice(1);
436
+ // Single char-class range: [\uXXXX-\uYYYY] -> %xXX-YY
437
+ const range = src.match(/^\[\\u([0-9A-Fa-f]{4})-\\u([0-9A-Fa-f]{4})\]$/);
438
+ if (range) {
439
+ const lo = parseInt(range[1], 16).toString(16).toUpperCase();
440
+ const hi = parseInt(range[2], 16).toString(16).toUpperCase();
441
+ return '%x' + lo + '-' + hi;
442
+ }
443
+ // Single char-class range with bare hex escapes: [\xXX-\xYY].
444
+ const range2 = src.match(/^\[\\x([0-9A-Fa-f]{2})-\\x([0-9A-Fa-f]{2})\]$/);
445
+ if (range2) {
446
+ return ('%x' +
447
+ parseInt(range2[1], 16).toString(16).toUpperCase() +
448
+ '-' +
449
+ parseInt(range2[2], 16).toString(16).toUpperCase());
450
+ }
451
+ // Case-insensitive literal: bnf encodes a bare ABNF string `"foo"`
452
+ // that contains at least one letter as `/^<escaped-foo>/i`, where
453
+ // <escaped-foo> escapes the regex metacharacters \ ^ $ . * + ? ( ) [
454
+ // ] { } |. Recover the literal by unescaping, then verify the
455
+ // round-trip so we never misread a genuine regex as a literal.
456
+ if (re.flags.includes('i')) {
457
+ // Unescape both the metacharacters bnf escapes and the forward
458
+ // slash that RegExp.prototype.source escapes automatically.
459
+ const lit = src.replace(/\\([\\^$.*+?()[\]{}|/])/g, '$1');
460
+ // Validate: re-encode the candidate exactly as bnf would and confirm
461
+ // the resulting RegExp source matches, so a real regex is never
462
+ // mistaken for a literal.
463
+ const reEncoded = new RegExp('^' + escapeRegExpLike(lit), 'i').source;
464
+ if (reEncoded === re.source && isAbnfQuotable(lit)) {
465
+ return '"' + lit + '"';
466
+ }
467
+ }
468
+ // Anything else: keep it visible but mark it as non-round-tripping.
469
+ return '; /' + re.source + '/' + re.flags;
470
+ }
471
+ // Mirror of bnf's escapeRegExp, used only to validate that an unescaped
472
+ // candidate literal re-escapes to exactly the observed regex source.
473
+ function escapeRegExpLike(s) {
474
+ return s.replace(/[\\^$.*+?()[\]{}|]/g, '\\$&');
475
+ }
476
+ // An ABNF char-val (quoted string) may hold printable ASCII except the
477
+ // double quote: %x20-21 / %x23-7E.
478
+ function isAbnfQuotable(s) {
479
+ if (0 === s.length)
480
+ return false;
481
+ for (let i = 0; i < s.length; i++) {
482
+ const c = s.charCodeAt(i);
483
+ if (0x22 === c)
484
+ return false; // double quote
485
+ if (c < 0x20 || c > 0x7e)
486
+ return false;
487
+ }
488
+ return true;
489
+ }
490
+ function descAlt(tabnas, rs, kind) {
491
+ const { entries } = tabnas.util;
492
+ return 0 === rs.def[kind].length
493
+ ? ''
494
+ : ' ' +
495
+ kind.toUpperCase() +
496
+ ':\n' +
497
+ rs.def[kind]
498
+ .map((a, i) => ' ' +
499
+ ('' + i).padStart(5, ' ') +
500
+ ' ' +
501
+ ('[' +
502
+ (a.s || [])
503
+ .map((tin) => null == tin
504
+ ? '***INVALID***'
505
+ : 'number' === typeof tin
506
+ ? tabnas.token[tin]
507
+ : Array.isArray(tin) ? '[' + tin.map((t) => tabnas.token[t]) + ']'
508
+ : ('' + tin))
509
+ .join(' ') +
510
+ '] ').padEnd(32, ' ') +
511
+ (a.r ? ' r=' + ('string' === typeof a.r ? a.r : '<F>') : '') +
512
+ (a.p ? ' p=' + ('string' === typeof a.p ? a.p : '<F>') : '') +
513
+ (!a.r && !a.p ? '\t' : '') +
514
+ '\t' +
515
+ (null == a.b ? '' : 'b=' + a.b) +
516
+ '\t' +
517
+ (null == a.n
518
+ ? ''
519
+ : 'n=' +
520
+ entries(a.n).map(([k, v]) => k + ':' + v)) +
521
+ '\t' +
522
+ (null == a.a ? '' : 'A') +
523
+ (null == a.c ? '' : 'C') +
524
+ (null == a.h ? '' : 'H') +
525
+ '\t' +
526
+ (null == a.c?.n
527
+ ? '\t'
528
+ : ' CN=' +
529
+ entries(a.c.n).map(([k, v]) => k + ':' + v)) +
530
+ (null == a.c?.d ? '' : ' CD=' + a.c.d) +
531
+ // a.g is normalised by the engine to a (possibly empty) string[].
532
+ (a.g && a.g.length ? '\tg=' + a.g.join(',') : ''))
533
+ .join('\n') +
534
+ '\n';
535
+ }
536
+ function ruleTree(tabnas, rn, rsm) {
537
+ const { values, omap } = tabnas.util;
538
+ return rn.reduce((a, n) => ((a +=
539
+ ' ' +
540
+ n +
541
+ ':\n ' +
542
+ values(omap({
543
+ op: ruleTreeStep(rsm, n, 'open', 'p'),
544
+ or: ruleTreeStep(rsm, n, 'open', 'r'),
545
+ cp: ruleTreeStep(rsm, n, 'close', 'p'),
546
+ cr: ruleTreeStep(rsm, n, 'close', 'r'),
547
+ },
548
+ // Drop only truly-empty categories (ruleTreeStep returns '' for
549
+ // those); 0 < length keeps single-character rule-name targets.
550
+ ([n, d]) => [
551
+ 0 < d.length ? n : undefined,
552
+ n + ': ' + d,
553
+ ])).join('\n ') +
554
+ '\n'),
555
+ a), '');
556
+ }
557
+ function ruleTreeStep(rsm, name, state, step) {
558
+ return [
559
+ ...new Set(rsm[name].def[state]
560
+ .filter((alt) => alt[step])
561
+ .map((alt) => alt[step])
562
+ .map((step) => ('string' === typeof step ? step : '<F>'))),
563
+ ].join(' ');
564
+ }
565
+ // Structured form of a single alternate (the data behind descAlt's text).
566
+ function altInfo(tabnas, a) {
567
+ const seq = (a.s || []).map((tin) => null == tin
568
+ ? '***INVALID***'
569
+ : 'number' === typeof tin
570
+ ? tabnas.token[tin]
571
+ : Array.isArray(tin)
572
+ ? tin.map((t) => ('number' === typeof t ? tabnas.token[t] : String(t)))
573
+ : String(tin));
574
+ const info = {
575
+ seq,
576
+ groups: a.g && a.g.length ? a.g.slice() : [],
577
+ action: null != a.a,
578
+ cond: null != a.c,
579
+ modifier: null != a.h,
580
+ };
581
+ if ('string' === typeof a.p)
582
+ info.push = a.p;
583
+ else if (a.p)
584
+ info.push = '<fn>';
585
+ if ('string' === typeof a.r)
586
+ info.replace = a.r;
587
+ else if (a.r)
588
+ info.replace = '<fn>';
589
+ if (null != a.b)
590
+ info.back = a.b;
591
+ if (null != a.n)
592
+ info.counters = a.n;
593
+ return info;
594
+ }
595
+ // The distinct push/replace rule targets of a rule's open/close alts —
596
+ // the structured form of ruleTreeStep (array instead of a joined string).
597
+ function ruleEdges(rsm, name, state, step) {
598
+ return [
599
+ ...new Set(rsm[name].def[state]
600
+ .filter((alt) => alt[step])
601
+ .map((alt) => ('string' === typeof alt[step] ? alt[step] : '<fn>'))),
602
+ ];
603
+ }
604
+ function descTokenState(ctx) {
605
+ return ('[' +
606
+ (ctx.NOTOKEN === ctx.t0 ? '' : ctx.F(ctx.t0.src)) +
607
+ (ctx.NOTOKEN === ctx.t1 ? '' : ' ' + ctx.F(ctx.t1.src)) +
608
+ ']~[' +
609
+ (ctx.NOTOKEN === ctx.t0 ? '' : tokenize(ctx.t0.tin, ctx.cfg)) +
610
+ (ctx.NOTOKEN === ctx.t1 ? '' : ' ' + tokenize(ctx.t1.tin, ctx.cfg)) +
611
+ ']');
612
+ }
613
+ function descParseState(ctx, rule, lex) {
614
+ return (ctx.F(ctx.src().substring(lex.pnt.sI, lex.pnt.sI + 16)).padEnd(18, ' ') +
615
+ ' ' +
616
+ descTokenState(ctx).padEnd(34, ' ') +
617
+ ' ' +
618
+ ('' + rule.d).padStart(4, ' '));
619
+ }
620
+ function descRuleState(ctx, rule) {
621
+ let en = entries(rule.n);
622
+ let eu = entries(rule.u);
623
+ let ek = entries(rule.k);
624
+ return ('' +
625
+ (0 === en.length
626
+ ? ''
627
+ : ' N<' +
628
+ en
629
+ .filter((n) => n[1])
630
+ .map((n) => n[0] + '=' + n[1])
631
+ .join(';') +
632
+ '>') +
633
+ (0 === eu.length
634
+ ? ''
635
+ : ' U<' + eu.map((u) => u[0] + '=' + ctx.F(u[1])).join(';') + '>') +
636
+ (0 === ek.length
637
+ ? ''
638
+ : ' K<' + ek.map((k) => k[0] + '=' + ctx.F(k[1])).join(';') + '>'));
639
+ }
640
+ function descAltSeq(alt, cfg) {
641
+ return ('[' +
642
+ (alt.s || [])
643
+ .map((tin) => 'number' === typeof tin
644
+ ? tokenize(tin, cfg)
645
+ : Array.isArray(tin)
646
+ ? '[' + tin.map((t) => tokenize(t, cfg)) + ']'
647
+ : '')
648
+ .join(' ') +
649
+ '] ');
650
+ }
651
+ const LOG = {
652
+ RuleState: {
653
+ o: parser_1.S.open.toUpperCase(),
654
+ c: parser_1.S.close.toUpperCase(),
655
+ },
656
+ };
657
+ const LOGKIND = {
658
+ step: (...rest) => rest,
659
+ stack: (ctx, rule, lex) => [
660
+ parser_1.S.logindent + parser_1.S.stack,
661
+ descParseState(ctx, rule, lex),
662
+ // S.indent.repeat(Math.max(rule.d + ('o' === rule.state ? -1 : 1), 0)) +
663
+ parser_1.S.indent.repeat(rule.d) +
664
+ '/' +
665
+ ctx.rs
666
+ // .slice(0, ctx.rsI)
667
+ .slice(0, rule.d)
668
+ .map((r) => r.name + '~' + r.i)
669
+ .join('/'),
670
+ '~',
671
+ '/' +
672
+ ctx.rs
673
+ // .slice(0, ctx.rsI)
674
+ .slice(0, rule.d)
675
+ .map((r) => ctx.F(r.node))
676
+ .join('/'),
677
+ // 'd=' + rule.d,
678
+ //'rsI=' + ctx.rsI,
679
+ ctx,
680
+ rule,
681
+ lex,
682
+ ],
683
+ rule: (ctx, rule, lex) => [
684
+ rule,
685
+ ctx,
686
+ lex,
687
+ parser_1.S.logindent + parser_1.S.rule + parser_1.S.space,
688
+ descParseState(ctx, rule, lex),
689
+ parser_1.S.indent.repeat(rule.d) +
690
+ (rule.name + '~' + rule.i + parser_1.S.colon + LOG.RuleState[rule.state]).padEnd(16),
691
+ ('prev=' +
692
+ rule.prev.i +
693
+ ' parent=' +
694
+ rule.parent.i +
695
+ ' child=' +
696
+ rule.child.i).padEnd(28),
697
+ descRuleState(ctx, rule),
698
+ ],
699
+ node: (ctx, rule, lex, next) => [
700
+ rule,
701
+ ctx,
702
+ lex,
703
+ next,
704
+ parser_1.S.logindent + parser_1.S.node + parser_1.S.space,
705
+ descParseState(ctx, rule, lex),
706
+ parser_1.S.indent.repeat(rule.d) +
707
+ ('why=' + next.why + parser_1.S.space + '<' + ctx.F(rule.node) + '>').padEnd(46),
708
+ descRuleState(ctx, rule),
709
+ ],
710
+ parse: (ctx, rule, lex, match, cond, altI, alt, out) => {
711
+ let ns = match && out.n ? entries(out.n) : null;
712
+ let us = match && out.u ? entries(out.u) : null;
713
+ let ks = match && out.k ? entries(out.k) : null;
714
+ return [
715
+ ctx,
716
+ rule,
717
+ lex,
718
+ parser_1.S.logindent + parser_1.S.parse,
719
+ descParseState(ctx, rule, lex),
720
+ parser_1.S.indent.repeat(rule.d) + (match ? 'alt=' + altI : 'no-alt'),
721
+ match && alt ? descAltSeq(alt, ctx.cfg) : '',
722
+ match && out.g && out.g.length ? 'g:' + out.g.join(',') + ' ' : '',
723
+ (match && out.p ? 'p:' + out.p + ' ' : '') +
724
+ (match && out.r ? 'r:' + out.r + ' ' : '') +
725
+ (match && out.b ? 'b:' + out.b + ' ' : ''),
726
+ alt && alt.c ? 'c:' + cond : parser_1.EMPTY,
727
+ null == ns ? '' : 'n:' + ns.map((p) => p[0] + '=' + p[1]).join(';'),
728
+ null == us ? '' : 'u:' + us.map((p) => p[0] + '=' + p[1]).join(';'),
729
+ null == ks ? '' : 'k:' + ks.map((p) => p[0] + '=' + p[1]).join(';'),
730
+ ];
731
+ },
732
+ lex: (ctx, rule, lex, pnt, sI, match, tkn, alt, altI, tI) => [
733
+ parser_1.S.logindent + parser_1.S.lex + parser_1.S.space + parser_1.S.space,
734
+ descParseState(ctx, rule, lex),
735
+ parser_1.S.indent.repeat(rule.d) +
736
+ // S.indent.repeat(rule.d) + S.lex, // Log entry prefix.
737
+ // Name of token from tin (token identification numer).
738
+ tokenize(tkn.tin, ctx.cfg),
739
+ ctx.F(tkn.src), // Format token src for log.
740
+ pnt.sI, // Current source index.
741
+ pnt.rI + ':' + pnt.cI, // Row and column.
742
+ match?.name || '',
743
+ alt
744
+ ? 'on:alt=' +
745
+ altI +
746
+ ';' +
747
+ (alt.g || []).join(',') +
748
+ ';t=' +
749
+ tI +
750
+ ';' +
751
+ descAltSeq(alt, ctx.cfg)
752
+ : '',
753
+ ctx.F(lex.src.substring(sI, sI + 16)),
754
+ ctx,
755
+ rule,
756
+ lex,
757
+ ],
758
+ };
759
+ Debug.defaults = DEFAULTS;
760
+ //# sourceMappingURL=debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"root":["../src/debug.ts"],"version":"6.0.3"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@tabnas/debug",
3
+ "version": "0.2.0",
4
+ "main": "dist/debug.js",
5
+ "type": "commonjs",
6
+ "types": "dist/debug.d.ts",
7
+ "description": "Debug plugin for the tabnas parser — tracing helpers and a describe() method.",
8
+ "homepage": "https://github.com/rjrodger/tabnas-debug",
9
+ "keywords": [
10
+ "tabnas",
11
+ "debug",
12
+ "plugin",
13
+ "parser"
14
+ ],
15
+ "author": "Richard Rodger (http://richardrodger.com)",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git://github.com/rjrodger/tabnas-debug.git"
19
+ },
20
+ "scripts": {
21
+ "test": "node --enable-source-maps --test test/**/*.test.js",
22
+ "watch": "tsc --build src -w",
23
+ "build": "tsc --build src",
24
+ "clean": "rm -rf node_modules dist dist-test yarn.lock package-lock.json",
25
+ "reset": "npm run clean && npm i && npm run build && npm test"
26
+ },
27
+ "license": "MIT",
28
+ "files": [
29
+ "dist",
30
+ "LICENSE"
31
+ ],
32
+ "exports": {
33
+ ".": "./dist/debug.js"
34
+ },
35
+ "peerDependencies": {
36
+ "@tabnas/parser": "^0.2.0"
37
+ },
38
+ "devDependencies": {
39
+ "@tabnas/abnf": "file:../../abnf/ts",
40
+ "@tabnas/parser": "file:../../parser/ts",
41
+ "@tabnas/railroad": "file:../../railroad/ts",
42
+ "@types/node": "25.6.0",
43
+ "typescript": "6.0.3"
44
+ },
45
+ "engines": {
46
+ "node": ">=24"
47
+ }
48
+ }