@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 +21 -0
- package/README.md +67 -0
- package/dist/debug.d.ts +61 -0
- package/dist/debug.js +760 -0
- package/dist/debug.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +48 -0
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.
|
package/dist/debug.d.ts
ADDED
|
@@ -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
|
+
}
|