diff --git a/dist/bnf.d.ts b/dist/bnf.d.ts index b1b4509..a8c378d 100644 --- a/dist/bnf.d.ts +++ b/dist/bnf.d.ts @@ -2,6 +2,7 @@ import type { BnfConvertOptions, GrammarSpec, Rule } from './types'; type BnfElement = { kind: 'term'; literal: string; + caseSensitive?: boolean; } | { kind: 'ref'; name: string; @@ -18,6 +19,11 @@ type BnfElement = { } | { kind: 'plus'; inner: BnfElement; +} | { + kind: 'rep'; + min: number; + max: number; + inner: BnfElement; } | { kind: 'group'; alts: BnfSequence[]; @@ -26,9 +32,29 @@ type BnfSequence = BnfElement[]; type BnfProduction = { name: string; alts: BnfSequence[]; + incremental?: boolean; + probeDispatch?: ProbeDispatchSpec; + probeHelper?: { + vocabElements: BnfElement[]; + }; + nodeKind?: 'user' | 'core' | 'helper'; +}; +type ProbeDispatchSpec = { + probeRule: string; + disambiguator: BnfElement; + withBranch: string; + noBranch: string; }; type BnfGrammar = { productions: BnfProduction[]; + ambiguities?: AmbiguityReport[]; +}; +type AmbiguityReport = { + rule: string; + altIdx: number; + optIdx: number; + reason: string; + resolved: boolean; }; declare const bnfRules: Record void; diff --git a/dist/bnf.js b/dist/bnf.js index 66d9a72..3e35140 100644 --- a/dist/bnf.js +++ b/dist/bnf.js @@ -10,29 +10,39 @@ exports.eliminateLeftRecursion = eliminateLeftRecursion; // jsonic rules. Each rule names its `open`/`close` alt list and, where // necessary, a `bo`/`bc` state hook for AST assembly. // +// Stage 8: incremental alternatives via `name =/ alt` now fold +// into the earlier production with the same name. Quoted strings +// default to case-insensitive (ABNF semantics), `%s` / `%i` force +// sensitivity explicitly, numeric values and repetition prefixes +// work as in previous stages. +// // Token vocabulary: -// #LT `<` -// #GT `>` -// #DEF `::=` -// #PIPE `|` -// #QM `?` -// #STAR `*` -// #PLUS `+` +// #DEF `=` (rule-definition operator) +// #DEFA `=/` (incremental-alternatives operator) +// #ALT `/` (alternation) +// #STAR `*` (repetition separator) +// #NUM decimal repetition count (matched via match.token) +// #NV `%[xdb]NN[(-NN|(.NN)*)]` numeric value (match.token) +// #SS `%s` (case-sensitive string prefix) +// #SI `%i` (case-insensitive string prefix — same as default) // #LP `(` // #RP `)` -// #RX /pattern/flags (regex terminal, matched via match.token) +// #OB `[` (optional-group open) +// #CB `]` (optional-group close) // #TX bare identifier (jsonic default text token) // #ST quoted string literal (jsonic default string token) // #ZZ end-of-source // // Grammar: -// bnf ::= production* -// production ::= '<' IDENT '>' '::=' alts -// alts ::= seq ('|' seq)* -// seq ::= element* -// element ::= atom postfix? -// atom ::= '<' IDENT '>' | STRING | REGEX | IDENT | '(' alts ')' -// postfix ::= '?' | '*' | '+' +// bnf = production* +// production = IDENT ('=' / '=/') alts +// alts = seq ('/' seq)* +// seq = element* +// element = repetition? atom +// repetition = NUM '*' NUM / NUM '*' / '*' NUM / '*' / NUM +// atom = IDENT | STRING | ['%s' | '%i'] STRING | NUMVAL +// | '(' alts ')' | '[' alts ']' +// numval = '%' ('x' / 'd' / 'b') DIGITS [ '-' DIGITS | ('.' DIGITS)* ] const bnfRules = { // Top-level: accumulates productions into r.node. bnf: { @@ -46,31 +56,54 @@ const bnfRules = { // One production per invocation; tail-recurses (r:'prod') for the // next. Inherits its parent's node (the productions array) and // appends to it in `bc` once its `alts` child has returned. + // Production header is `IDENT =` — a bareword rule name followed + // by the `=` definition operator. prod: { open: [ + // Standalone definition: name = alts { - s: '#LT #TX #GT #DEF', - a: (r) => { r.u.name = r.o[1].val; }, + s: '#TX #DEF', + a: (r) => { + r.u.name = r.o[0].val; + r.u.incremental = false; + }, + p: 'alts', + }, + // Incremental alternatives: name =/ alts + { + s: '#TX #DEFA', + a: (r) => { + r.u.name = r.o[0].val; + r.u.incremental = true; + }, p: 'alts', }, ], close: [ - { s: '#LT', b: 1, r: 'prod' }, + // A TX followed by `=` or `=/` means the next production has + // begun — back up 2 tokens so a fresh `prod` invocation sees + // them. + { s: '#TX #DEF', b: 2, r: 'prod' }, + { s: '#TX #DEFA', b: 2, r: 'prod' }, { b: 1 }, ], bc: (r) => { if (r.child && r.child.node !== undefined) { - r.node.push({ name: r.u.name, alts: r.child.node }); + const prod = { name: r.u.name, alts: r.child.node }; + if (r.u.incremental) + prod.incremental = true; + r.node.push(prod); } }, }, - // A list of alternative sequences separated by `|`. Owns its own - // array (`bo` resets it) and pushes each seq result in `bc`. + // A list of alternative sequences separated by `/` (ABNF + // alternation). Owns its own array (`bo` resets it) and pushes + // each seq result in `bc`. alts: { bo: (r) => { r.node = []; }, open: [{ p: 'seq' }], close: [ - { s: '#PIPE', p: 'seq' }, + { s: '#ALT', p: 'seq' }, { b: 1 }, ], bc: (r) => { @@ -79,178 +112,234 @@ const bnfRules = { } }, }, - // A (possibly empty) sequence of elements. The 4-token lookahead - // `#LT #TX #GT #DEF` detects a following production boundary and - // bails out without consuming the tokens; a plain `#LT #TX #GT` - // match (tried second so it loses to the longer alt) is a + // A (possibly empty) sequence of elements. The 2-token lookahead + // `#TX #DEF` detects a following production boundary and bails + // out without consuming the tokens; a plain `#TX` at the leading + // position (tried later so the longer alt wins) is a rule // reference inside the current sequence. seq: { bo: (r) => { r.node = []; }, open: [ - { s: '#LT #TX #GT #DEF', b: 4, g: 'end' }, - { s: '#PIPE', b: 1, g: 'end' }, + { s: '#TX #DEF', b: 2, g: 'end' }, + { s: '#TX #DEFA', b: 2, g: 'end' }, + { s: '#ALT', b: 1, g: 'end' }, { s: '#ZZ', b: 1, g: 'end' }, { s: '#RP', b: 1, g: 'end' }, - // Listing element-starter tokens in `s:` here ensures each one - // appears in the rule's tcol so the match-matcher (for `#RX`) - // is allowed to fire when the source is lexed. - { s: '#LT', b: 1, p: 'elem' }, + { s: '#CB', b: 1, g: 'end' }, + // Listing element-starter tokens in `s:` here ensures the + // tcol-driven matcher considers each one when lexing. { s: '#ST', b: 1, p: 'elem' }, - { s: '#RX', b: 1, p: 'elem' }, + { s: '#NV', b: 1, p: 'elem' }, + { s: '#SS', b: 1, p: 'elem' }, + { s: '#SI', b: 1, p: 'elem' }, { s: '#TX', b: 1, p: 'elem' }, { s: '#LP', b: 1, p: 'elem' }, + { s: '#OB', b: 1, p: 'elem' }, + { s: '#STAR', b: 1, p: 'elem' }, + { s: '#NUM', b: 1, p: 'elem' }, { p: 'elem' }, ], close: [ - { s: '#LT #TX #GT #DEF', b: 4, g: 'end' }, - { s: '#PIPE', b: 1, g: 'end' }, + { s: '#TX #DEF', b: 2, g: 'end' }, + { s: '#TX #DEFA', b: 2, g: 'end' }, + { s: '#ALT', b: 1, g: 'end' }, { s: '#ZZ', b: 1, g: 'end' }, { s: '#RP', b: 1, g: 'end' }, - { s: '#LT', b: 1, p: 'elem' }, + { s: '#CB', b: 1, g: 'end' }, { s: '#ST', b: 1, p: 'elem' }, - { s: '#RX', b: 1, p: 'elem' }, + { s: '#NV', b: 1, p: 'elem' }, + { s: '#SS', b: 1, p: 'elem' }, + { s: '#SI', b: 1, p: 'elem' }, { s: '#TX', b: 1, p: 'elem' }, { s: '#LP', b: 1, p: 'elem' }, + { s: '#OB', b: 1, p: 'elem' }, + { s: '#STAR', b: 1, p: 'elem' }, + { s: '#NUM', b: 1, p: 'elem' }, { b: 1 }, ], }, - // One element: an atom (``, string, bare ident, or a - // parenthesised group of alternatives), optionally followed by a - // postfix operator (`?`, `*`, `+`). The atom is stashed on - // `r.u.atom` so the close state can wrap it before pushing onto the - // parent seq's node array. For groups, the atom is synthesised from - // the child `alts` rule's node in the close state. + // One element: an optional ABNF repetition prefix (`*A`, `1*A`, + // `m*nA`, `*nA`, `m*A`, `nA`) followed by an atom. The prefix is + // matched up front, stored on `r.u.min`/`r.u.max`; then `atom` is + // pushed to parse the actual element body, whose result is wrapped + // into an AST node and appended to the parent seq's array in close. elem: { + bo: (r) => { r.u.min = 1; r.u.max = 1; }, open: [ + // NUM '*' NUM — bounded repetition, followed by the atom + // itself (listed via the ATOM tokenset so every atom-starter + // tin — including `#NV` — is in tcol for this position). { - s: '#LT #TX #GT', - a: (r) => { - r.u.atom = { kind: 'ref', name: r.o[1].val }; - }, - }, - { - s: '#ST', + s: '#NUM #STAR #NUM #ATOM', + b: 1, a: (r) => { - r.u.atom = { kind: 'term', literal: r.o[0].val }; + r.u.min = parseInt(r.o[0].src, 10); + r.u.max = parseInt(r.o[2].src, 10); }, + p: 'atom', }, + // NUM '*' — at-least-NUM repetition followed by an atom. { - s: '#RX', + s: '#NUM #STAR #ATOM', + b: 1, a: (r) => { - // r.o[0].src is the raw text `/pattern/flags`. Split it. - const raw = r.o[0].src; - const lastSlash = raw.lastIndexOf('/'); - r.u.atom = { - kind: 'regex', - pattern: raw.slice(1, lastSlash), - flags: raw.slice(lastSlash + 1), - }; + r.u.min = parseInt(r.o[0].src, 10); + r.u.max = Infinity; }, + p: 'atom', }, + // '*' NUM — at-most-NUM repetition. { - s: '#TX', + s: '#STAR #NUM #ATOM', + b: 1, a: (r) => { - r.u.atom = { kind: 'ref', name: r.o[0].val }; + r.u.min = 0; + r.u.max = parseInt(r.o[1].src, 10); }, + p: 'atom', }, + // '*' — zero-or-more. { - s: '#LP', - a: (r) => { r.u.group = true; }, - p: 'alts', + s: '#STAR #ATOM', + b: 1, + a: (r) => { r.u.min = 0; r.u.max = Infinity; }, + p: 'atom', }, - ], - close: [ - // Group followed by postfix — two-token combos, tried first so - // they beat the one-token RP / postfix alts below. Guarded with - // a condition to avoid matching a stray `)` in the simple-atom - // case. + // NUM — exact repetition count. { - s: '#RP #QM', - c: (r) => r.u.group === true, + s: '#NUM #ATOM', + b: 1, a: (r) => { - r.node.push({ - kind: 'opt', - inner: { kind: 'group', alts: r.child.node }, - }); + const n = parseInt(r.o[0].src, 10); + r.u.min = n; + r.u.max = n; }, + p: 'atom', }, - { - s: '#RP #STAR', - c: (r) => r.u.group === true, + // No prefix — push atom directly (min = max = 1). + { p: 'atom' }, + ], + close: [{ + // Wrap the returned atom (r.child.node) based on r.u.min/max + // and append to the parent seq's array. a: (r) => { - r.node.push({ - kind: 'star', - inner: { kind: 'group', alts: r.child.node }, - }); + const item = r.child.node; + const { min, max } = r.u; + if (min === 1 && max === 1) { + r.node.push(item); + } + else if (min === 0 && max === Infinity) { + r.node.push({ kind: 'star', inner: item }); + } + else if (min === 1 && max === Infinity) { + r.node.push({ kind: 'plus', inner: item }); + } + else if (min === 0 && max === 1) { + r.node.push({ kind: 'opt', inner: item }); + } + else { + r.node.push({ kind: 'rep', min, max, inner: item }); + } }, - }, + }], + }, + // The atom body — a bareword ref, quoted-string terminal, + // parenthesised group, or bracketed optional. Sets its OWN r.node + // to the AST element so the enclosing `elem` rule can read it + // from `r.child.node` in its close state. + atom: { + bo: (r) => { r.node = undefined; }, + open: [ + // Case-sensitive string: %s"foo" { - s: '#RP #PLUS', - c: (r) => r.u.group === true, + s: '#SS #ST', a: (r) => { - r.node.push({ - kind: 'plus', - inner: { kind: 'group', alts: r.child.node }, - }); + r.node = { + kind: 'term', + literal: r.o[1].val, + caseSensitive: true, + }; }, }, - // Plain group (no postfix). + // Case-insensitive string: %i"foo" (same as bare "foo" below, + // but spelled explicitly). { - s: '#RP', - c: (r) => r.u.group === true, + s: '#SI #ST', a: (r) => { - r.node.push({ kind: 'group', alts: r.child.node }); + r.node = { kind: 'term', literal: r.o[1].val }; }, }, - // Simple atom + postfix. + // Bare quoted string — case-insensitive per ABNF default. { - s: '#QM', + s: '#ST', a: (r) => { - r.node.push({ kind: 'opt', inner: r.u.atom }); + r.node = { kind: 'term', literal: r.o[0].val }; }, }, { - s: '#STAR', + s: '#NV', a: (r) => { - r.node.push({ kind: 'star', inner: r.u.atom }); + r.node = parseNumericValue(r.o[0].src); }, }, { - s: '#PLUS', + s: '#TX', a: (r) => { - r.node.push({ kind: 'plus', inner: r.u.atom }); + r.node = { kind: 'ref', name: r.o[0].val }; }, }, - // Simple atom, no postfix. These alts declare the "next atom" - // tokens so the lexer — which consults tcol to decide which - // matchers to try — emits them as their proper types (in - // particular `#RX`) rather than as generic text. - { - s: '#LT', b: 1, - a: (r) => { r.node.push(r.u.atom); }, - }, - { - s: '#ST', b: 1, - a: (r) => { r.node.push(r.u.atom); }, - }, { - s: '#RX', b: 1, - a: (r) => { r.node.push(r.u.atom); }, + s: '#LP', + a: (r) => { r.u.groupKind = 'group'; }, + p: 'alts', }, { - s: '#TX', b: 1, - a: (r) => { r.node.push(r.u.atom); }, + s: '#OB', + a: (r) => { r.u.groupKind = 'opt'; }, + p: 'alts', }, + ], + close: [ { - s: '#LP', b: 1, - a: (r) => { r.node.push(r.u.atom); }, + s: '#RP', + c: (r) => r.u.groupKind === 'group', + a: (r) => { + r.node = { kind: 'group', alts: r.child.node }; + }, }, - // Final fallback for end-of-sequence markers (`|`, `)`, `#ZZ`, - // or a production boundary). { - b: 1, - a: (r) => { r.node.push(r.u.atom); }, + s: '#CB', + c: (r) => r.u.groupKind === 'opt', + a: (r) => { + r.node = { + kind: 'opt', + inner: { kind: 'group', alts: r.child.node }, + }; + }, }, + // For simple atoms (string/ref), r.node is already set by + // open; we want to pop without consuming the next token. + // List every token that can legitimately follow an atom so + // the lexer's tcol-driven match-matcher emits #NUM, #STAR, + // and friends as their proper types here — otherwise the + // default number-matcher would lex `1` as #NR and the + // enclosing seq.close wouldn't recognise the digit as the + // start of a repetition prefix. + { s: '#TX', b: 1 }, + { s: '#ST', b: 1 }, + { s: '#NV', b: 1 }, + { s: '#SS', b: 1 }, + { s: '#SI', b: 1 }, + { s: '#NUM', b: 1 }, + { s: '#STAR', b: 1 }, + { s: '#LP', b: 1 }, + { s: '#OB', b: 1 }, + { s: '#RP', b: 1 }, + { s: '#CB', b: 1 }, + { s: '#ALT', b: 1 }, + { s: '#DEF', b: 1 }, + { s: '#ZZ', b: 1 }, + { b: 1 }, ], }, }; @@ -266,30 +355,64 @@ function getBnfParser() { rule: { start: 'bnf' }, fixed: { token: { - // Clear JSON-oriented defaults — `[` and friends would - // otherwise pre-empt the `#RX` regex matcher for - // `/[class]/` terminals. - '#OB': null, - '#CB': null, + // Clear JSON-oriented defaults we're not using so `:`, `,` + // and `{` have no special meaning inside BNF source. '#OS': null, '#CS': null, '#CL': null, '#CA': null, - '#LT': '<', - '#GT': '>', - '#DEF': '::=', - '#PIPE': '|', - '#QM': '?', + // Re-map `#OB` / `#CB` from JSON's `{` / `}` to ABNF's + // `[` / `]` optional-group brackets. + '#OB': '[', + '#CB': ']', + '#DEF': '=', + // `=/` — ABNF's incremental-alternatives operator. Longer + // than `=`, so jsonic's longest-match-wins fixed matcher + // tries it first. + '#DEFA': '=/', + '#ALT': '/', '#STAR': '*', - '#PLUS': '+', '#LP': '(', '#RP': ')', }, }, match: { - // Regex terminals inside BNF source: /pattern/flags. token: { - '#RX': /^\/(?:[^\/\\]|\\.)*\/[a-z]*/, + // ABNF repetition counts: decimal integers. + '#NUM': /^[0-9]+/, + // ABNF numeric value notation: + // %xNN single hex code point + // %dNN single decimal code point + // %bNN single binary code point + // %xNN-NN hex range + // %xNN.NN.NN concatenated hex code points (= string) + // Digits are permissive (hex covers the decimal / binary + // subsets); `parseNumericValue` re-validates against the + // actual base. + '#NV': /^%[xdbXDB][0-9a-fA-F]+(?:[-.][0-9a-fA-F]+)*/, + // `%s` / `%i` prefixes on a quoted string. The lookahead + // requires `"` so they don't steal the `%` of `%xNN`. + '#SS': /^%[sS](?=")/, + '#SI': /^%[iI](?=")/, + }, + }, + tokenSet: { + // Tokens that can legitimately open an atom. Declaring this + // as a set lets elem.open use `#ATOM` inside its `s:` patterns + // — that way the tcol at the atom-starter position includes + // every matcher tin (notably #NV), so the lexer doesn't fall + // through to #TX when the actual atom is `%xNN`. + ATOM: ['#ST', '#NV', '#TX', '#LP', '#OB', '#SS', '#SI'], + }, + comment: { + // ABNF uses `;` to start a line comment. Override jsonic's + // default `hash` definition (which used `#`) and disable the + // other comment styles so `//` and `/* */` aren't confused + // with the alternation operator. + def: { + hash: { line: true, start: ';', lex: true, eatline: false }, + slash: null, + multi: null, }, }, }); @@ -319,63 +442,226 @@ function getBnfParser() { // `term` and `ref`. Each `X?`, `X*`, `X+` occurrence is replaced by a // reference to a newly-generated helper production that expresses the // same language in plain BNF. -// Rewrite direct left recursion (P → P α₁ | … | P αₙ | β₁ | … | βₘ) -// into the equivalent right-recursive form -// P → (β₁ | … | βₘ) (α₁ | … | αₙ)* +// Eliminate left recursion — both direct (P → P α) and indirect +// (P → Q α, Q → P β) — via Paull's algorithm. +// +// Order the productions, and for each A_i walk back over A_1..A_{i-1} +// inlining any leading reference into A_i's alternatives. Once the +// only remaining leading self-reference on A_i is direct, rewrite to +// the iterative form +// P → (β_1 | … | β_m) (α_1 | … | α_n)* // which jsonic's push-down parser can execute without re-entering P -// at the same source position. Each non-recursive alternative -// becomes a "seed", and the body following the leading P-reference -// in each recursive alternative becomes a star-iterated tail. +// at the same source position. // -// Indirect cycles (P → Q α, Q → P β) are *not* rewritten — the doc's -// runtime guard via `r.k.seenPAt` would be needed for those, and is -// out of scope for this pass. If detected they're flagged so the -// emitter doesn't silently fall through. +// The substitution step can duplicate alternatives, so pathological +// grammars will enlarge — caller is expected to keep the grammar +// reasonably small (this is a first-step converter, not a full +// toolchain). function eliminateLeftRecursion(grammar) { - const out = []; - for (const prod of grammar.productions) { - const recursive = []; - const seeds = []; - for (const alt of prod.alts) { - if (alt.length > 0 && - alt[0].kind === 'ref' && - alt[0].name === prod.name) { - // Strip the leading self-reference; the rest is the - // operator/tail to iterate. - recursive.push(alt.slice(1)); - } - else { - seeds.push(alt); + const originalOrder = grammar.productions.map((p) => p.name); + // Order productions so that rules referenced at a leading position + // are processed before the rules that reference them. Paull's + // substitution inlines A_j's alts into A_i for j < i, so putting + // dependencies first is what makes nullable-prefixed hidden left + // recursion reachable by the substitution step. + // + // Note: substitution here always runs, even for cycle-free + // grammars. The reason is pragmatic rather than theoretical — + // populating tcol from multi-token altPrefixes (needed so the + // lexer's regex matchers fire with the right tin in nested + // contexts) requires the full inlined shape. A future refactor + // could compute tcol from the un-substituted grammar and only + // apply Paull's to the cyclic SCCs, which would preserve more + // named-rule structure in the emitted AST. + let prods = topoOrderForPaull(grammar.productions.map((p) => ({ + name: p.name, + alts: p.alts.map((a) => a.slice()), + nodeKind: p.nodeKind, + }))); + for (let i = 0; i < prods.length; i++) { + // For each earlier production A_j, inline any alternative of + // A_i whose leading element is a reference to A_j. + for (let j = 0; j < i; j++) { + prods[i] = substituteLeadingRef(prods[i], prods[j]); + } + prods[i] = eliminateDirectLeftRec(prods[i]); + } + // Restore the caller's declared order, so the start rule still + // ends up first (and the user sees their rule names in a + // recognisable order when inspecting the spec). + const byName = new Map(prods.map((p) => [p.name, p])); + const ordered = []; + for (const name of originalOrder) { + const p = byName.get(name); + if (p) { + ordered.push(p); + byName.delete(name); + } + } + // Any generated productions created during substitution (none in + // the current implementation) would fall through here. + for (const p of byName.values()) + ordered.push(p); + return { productions: ordered }; +} +// Tarjan-flavoured SCC scan over the leading-reference graph: +// returns the names of productions that participate in at least one +// cycle (self-loop or longer). Used to scope Paull's substitution to +// only the rules that actually need it. +function findLeadingRefCycleMembers(prods) { + const byName = new Map(prods.map((p) => [p.name, p])); + const leadingRefs = (p) => { + const out = []; + for (const alt of p.alts) { + if (alt.length === 0) + continue; + const first = alt[0]; + if (first.kind === 'ref' && byName.has(first.name)) + out.push(first.name); + } + return out; + }; + // Tarjan's SCC algorithm. + let index = 0; + const stack = []; + const onStack = new Set(); + const indices = new Map(); + const lowlinks = new Map(); + const cyclic = new Set(); + function strongConnect(name) { + indices.set(name, index); + lowlinks.set(name, index); + index++; + stack.push(name); + onStack.add(name); + const prod = byName.get(name); + if (prod) { + for (const target of leadingRefs(prod)) { + if (!indices.has(target)) { + strongConnect(target); + lowlinks.set(name, Math.min(lowlinks.get(name), lowlinks.get(target))); + } + else if (onStack.has(target)) { + lowlinks.set(name, Math.min(lowlinks.get(name), indices.get(target))); + } } } - if (recursive.length === 0) { - out.push(prod); - continue; + if (lowlinks.get(name) === indices.get(name)) { + // Pop the SCC. If it has more than one member, or it's a + // single member with a self-loop, mark as cyclic. + const scc = []; + let w; + do { + w = stack.pop(); + onStack.delete(w); + scc.push(w); + } while (w !== name); + const isCycle = scc.length > 1 || + (scc.length === 1 && leadingRefs(byName.get(scc[0])).includes(scc[0])); + if (isCycle) + for (const n of scc) + cyclic.add(n); + } + } + for (const p of prods) { + if (!indices.has(p.name)) + strongConnect(p.name); + } + return cyclic; +} +// Topological order over the "leading-position reference" graph: +// an edge A → B exists when A has at least one alternative whose +// first element is a reference to B. Cycles are preserved as-is +// (Paull's handles them via the substitution + direct-LR rewrite). +function topoOrderForPaull(prods) { + const byName = new Map(prods.map((p) => [p.name, p])); + const colour = new Map(); // 0 unseen, 1 in-progress, 2 done + const order = []; + function visit(name) { + const c = colour.get(name) ?? 0; + if (c !== 0) + return; // already seen or on the current path + colour.set(name, 1); + const p = byName.get(name); + if (p) { + for (const alt of p.alts) { + if (alt.length > 0 && alt[0].kind === 'ref' && byName.has(alt[0].name)) { + visit(alt[0].name); + } + } + colour.set(name, 2); + order.push(p); } - if (seeds.length === 0) { - throw new Error(`bnf: rule '${prod.name}' is purely left-recursive ` + - `(no seed alternative); cannot eliminate`); + else { + colour.set(name, 2); } - for (const tail of recursive) { - if (tail.length === 0) { - // P → P with nothing else would loop forever even after - // rewriting (we'd get `P → seed ε*` which is just P → seed). - throw new Error(`bnf: rule '${prod.name}' has a trivial left-recursive ` + - `alternative (P ::= P) which cannot be desugared`); + } + for (const p of prods) + visit(p.name); + return order; +} +// For every alternative of `target` that begins with a ref to +// `source`, replace that alt with |source.alts| copies — each one +// with the leading source-ref expanded to one of source's alts. +function substituteLeadingRef(target, source) { + const newAlts = []; + for (const alt of target.alts) { + if (alt.length > 0 && + alt[0].kind === 'ref' && + alt[0].name === source.name) { + const tail = alt.slice(1); + for (const srcAlt of source.alts) { + newAlts.push([...srcAlt, ...tail]); } } - const seedElement = seeds.length === 1 && seeds[0].length === 1 - ? seeds[0][0] - : { kind: 'group', alts: seeds }; - const tailInner = recursive.length === 1 && recursive[0].length === 1 - ? recursive[0][0] - : { kind: 'group', alts: recursive }; - out.push({ - name: prod.name, - alts: [[seedElement, { kind: 'star', inner: tailInner }]], - }); + else { + newAlts.push(alt); + } + } + return { name: target.name, alts: newAlts, nodeKind: target.nodeKind }; +} +// Rewrite a single production's direct left recursion to its +// iterative equivalent. Equivalent to the previous version of +// `eliminateLeftRecursion` but scoped to one production. +function eliminateDirectLeftRec(prod) { + const recursive = []; + const seeds = []; + for (const alt of prod.alts) { + if (alt.length > 0 && + alt[0].kind === 'ref' && + alt[0].name === prod.name) { + recursive.push(alt.slice(1)); + } + else { + seeds.push(alt); + } + } + // A trivial recursive alt `[P]` (P ::= P, nothing else) would + // derive P from P with no progress — semantically a no-op. Drop + // them silently, since nullable-prefix expansion in Paull's can + // legitimately produce them and erroring would hide a legal + // grammar. + const nonTrivialRecursive = recursive.filter((t) => t.length > 0); + if (nonTrivialRecursive.length === 0) { + // Either no recursion at all, or only trivial self-refs — keep + // just the seeds. + return { name: prod.name, alts: seeds, nodeKind: prod.nodeKind }; + } + if (seeds.length === 0) { + throw new Error(`bnf: rule '${prod.name}' is purely left-recursive ` + + `(no seed alternative); cannot eliminate`); } - return { productions: out }; + const seedElement = seeds.length === 1 && seeds[0].length === 1 + ? seeds[0][0] + : { kind: 'group', alts: seeds }; + const tailInner = nonTrivialRecursive.length === 1 && nonTrivialRecursive[0].length === 1 + ? nonTrivialRecursive[0][0] + : { kind: 'group', alts: nonTrivialRecursive }; + return { + name: prod.name, + alts: [[seedElement, { kind: 'star', inner: tailInner }]], + nodeKind: prod.nodeKind, + }; } function desugar(grammar) { const extra = []; @@ -403,7 +689,7 @@ function desugar(grammar) { // then emit a helper production whose body is those alts. const innerAlts = el.alts.map((a) => desugarAlt(a)); const name = freshName('group'); - extra.push({ name, alts: innerAlts }); + extra.push({ name, alts: innerAlts, nodeKind: 'helper' }); return { kind: 'ref', name }; } // `opt`, `star`, `plus` all wrap a single inner element. @@ -413,34 +699,92 @@ function desugar(grammar) { if (el.kind === 'opt') { // H ::= inner | (empty) const name = freshName('opt_' + hint); - extra.push({ name, alts: [[inner], []] }); + extra.push({ name, alts: [[inner], []], nodeKind: 'helper' }); return { kind: 'ref', name }; } if (el.kind === 'star') { - // H ::= inner H | (empty) + // H = inner H / (empty) const name = freshName('star_' + hint); const selfRef = { kind: 'ref', name }; - extra.push({ name, alts: [[inner, selfRef], []] }); + extra.push({ name, alts: [[inner, selfRef], []], nodeKind: 'helper' }); return { kind: 'ref', name }; } - // plus: H ::= inner Tail where Tail ::= inner Tail | (empty) - const tailName = freshName('star_' + hint); - const plusName = freshName('plus_' + hint); - const tailRef = { kind: 'ref', name: tailName }; - extra.push({ - name: tailName, - alts: [[inner, tailRef], []], - }); - extra.push({ - name: plusName, - alts: [[inner, tailRef]], - }); - return { kind: 'ref', name: plusName }; + if (el.kind === 'plus') { + // H = inner Tail where Tail = inner Tail / (empty) + const tailName = freshName('star_' + hint); + const plusName = freshName('plus_' + hint); + const tailRef = { kind: 'ref', name: tailName }; + extra.push({ + name: tailName, + alts: [[inner, tailRef], []], + nodeKind: 'helper', + }); + extra.push({ + name: plusName, + alts: [[inner, tailRef]], + nodeKind: 'helper', + }); + return { kind: 'ref', name: plusName }; + } + // ABNF m*n bounded repetition. Desugars to a concatenation of + // `min` mandatory copies of the inner element followed by a + // tail that accepts up to `(max - min)` more. + // m*n A => A{m} [A[A[A...[A]]]] (nested optionals) + // m* A => A{m} *A (mandatory prefix + star) + // *n A => [A [A ... [A]]] (n nested optionals) + // The helper's single alt has `min` repetitions of inner, then + // either a star-helper for (min, ∞) or `max - min` nested + // optionals for a finite range. + const { min, max } = el; + const repName = freshName('rep_' + hint); + const repAlt = []; + for (let i = 0; i < min; i++) + repAlt.push(inner); + if (max === Infinity) { + // Tail: unbounded star of inner. + const tailStarName = freshName('star_' + hint); + const tailStarRef = { kind: 'ref', name: tailStarName }; + extra.push({ + name: tailStarName, + alts: [[inner, tailStarRef], []], + nodeKind: 'helper', + }); + repAlt.push(tailStarRef); + } + else { + // Nest (max - min) optionals: [A [A [A ...]]]. + let nested = []; + for (let i = 0; i < max - min; i++) { + // Wrap current `nested` into an optional and prepend `inner`. + if (nested.length === 0) { + nested = [{ kind: 'opt', inner: { kind: 'group', alts: [[inner]] } }]; + } + else { + nested = [{ + kind: 'opt', + inner: { kind: 'group', alts: [[inner, ...nested]] }, + }]; + } + } + repAlt.push(...nested); + } + extra.push({ name: repName, alts: [desugarAlt(repAlt)], nodeKind: 'helper' }); + return { kind: 'ref', name: repName }; } - const rewritten = grammar.productions.map((p) => ({ - name: p.name, - alts: p.alts.map(desugarAlt), - })); + const rewritten = grammar.productions.map((p) => { + const out = { + name: p.name, + alts: p.alts.map(desugarAlt), + nodeKind: p.nodeKind, + }; + // Probe-dispatch flags survive desugar unchanged — the emitter + // routes around the standard alt-compilation path for these. + if (p.probeDispatch) + out.probeDispatch = p.probeDispatch; + if (p.probeHelper) + out.probeHelper = p.probeHelper; + return out; + }); return { productions: [...rewritten, ...extra] }; } // Error raised when the BNF source itself can't be parsed. Surfaces @@ -477,20 +821,454 @@ function parseBnf(src) { if (!Array.isArray(productions) || productions.length === 0) { throw new BnfParseError('bnf: no productions found'); } - return { productions }; + const merged = mergeIncrementals(productions); + return { productions: withCoreRules(merged) }; +} +// RFC 5234 Appendix B.1 core rules. Parsed lazily on first use +// and spliced into any user grammar that references them but +// doesn't define them locally. +const CORE_RULES_ABNF = ` +ALPHA = %x41-5A / %x61-7A +BIT = "0" / "1" +CHAR = %x01-7F +CR = %x0D +LF = %x0A +CRLF = CR LF +CTL = %x00-1F / %x7F +DIGIT = %x30-39 +DQUOTE = %x22 +HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F" +HTAB = %x09 +OCTET = %x00-FF +SP = %x20 +VCHAR = %x21-7E +WSP = SP / HTAB +`; +let _coreRules = null; +function getCoreRules() { + if (_coreRules) + return _coreRules; + const parser = getBnfParser(); + const raw = parser(CORE_RULES_ABNF); + // Core rules flatten to `src` in the output AST — they're + // character-class bricks, not structural nodes users want to see + // one-per-matched-character. + for (const p of raw) + p.nodeKind = 'core'; + _coreRules = new Map(raw.map((p) => [p.name, p])); + return _coreRules; +} +function refsIn(alt, out) { + for (const el of alt) { + if (el.kind === 'ref') + out.add(el.name); + else if (el.kind === 'opt' || el.kind === 'star' || + el.kind === 'plus' || el.kind === 'rep') { + refsIn([el.inner], out); + } + else if (el.kind === 'group') { + for (const a of el.alts) + refsIn(a, out); + } + } +} +// Add each RFC 5234 core rule that the user's grammar references +// but doesn't define locally. Resolution is transitive: if the +// user mentions HEXDIG, DIGIT is pulled in too. User definitions +// always win — a local `DIGIT = …` is left untouched. +function withCoreRules(user) { + const core = getCoreRules(); + const defined = new Set(user.map((p) => p.name)); + const needed = new Set(); + const scan = (prods) => { + for (const p of prods) { + for (const alt of p.alts) + refsIn(alt, needed); + } + }; + scan(user); + const out = []; + // Transitively add core rules, in declaration order. + let added = true; + while (added) { + added = false; + for (const [name, prod] of core) { + if (defined.has(name)) + continue; + if (!needed.has(name)) + continue; + defined.add(name); + out.push(prod); + scan([prod]); + added = true; + } + } + return [...user, ...out]; +} +// Fold every `name =/ alt` production into the earlier production +// with the same name by appending its alternatives. Throws if an +// incremental references a name that hasn't been defined yet — ABNF +// requires the base production to appear first. +function mergeIncrementals(prods) { + const out = []; + const byName = new Map(); + for (const p of prods) { + if (p.incremental) { + const base = byName.get(p.name); + if (!base) { + throw new BnfParseError(`bnf: '${p.name} =/ …' has no earlier '${p.name} = …' to extend`); + } + base.alts.push(...p.alts); + continue; + } + // Strip the (absent) flag on a cleanly-written production so + // downstream code never sees it. + const clean = { name: p.name, alts: p.alts }; + if (p.nodeKind) + clean.nodeKind = p.nodeKind; + out.push(clean); + byName.set(p.name, clean); + } + return out; +} +// -- Probe-dispatch analyser + rewriter ----------------------------- +// +// ABNF has a large family of grammars that aren't LL(k) for any +// bounded k. The canonical example is RFC 3986's `authority`: +// +// authority = [ userinfo "@" ] host [ ":" port ] +// userinfo = *( unreserved / pct-encoded / sub-delims / ":" ) +// host = IP-literal / IPv4address / reg-name +// reg-name = *( unreserved / pct-encoded / sub-delims ) +// +// `userinfo` and `reg-name` share a character vocabulary, so a +// FIRST-set dispatcher can't decide which branch the optional +// `[ userinfo "@" ]` belongs to — the disambiguating `@` can be +// arbitrarily far from the start. +// +// For the common pattern `[X D] Y` — an optional group whose body +// ends with a terminal D, followed by a sequence Y whose leading +// terminals overlap with X's — we handle the ambiguity by rewriting +// the rule to a probe+phase-retry dispatcher: +// +// 1. On first entry (phase 0), mark the token position and push a +// failure-proof probe rule that greedily consumes every token +// in the joint vocabulary of X and Y. +// 2. When the probe returns, peek ctx.t[0]: +// D seen → phase = 1 (take the `X D Y` branch) +// D absent → phase = 2 (take the `Y` branch) +// Rewind to the mark and `r:` back into the dispatcher. +// 3. The dispatcher's open has a `c:`-guarded alt for each phase +// that pushes the corresponding committed branch. +// +// The primitives used (`r:`, `k:`, `c:`, `ctx.mark`, `ctx.rewind`, +// `ctx.t`) are the same building blocks rules/parser already exposes +// — no new jsonic machinery is needed. +// Predicate: element is `[ X D ]` where X is one or more elements +// and D is a terminal literal or a regex terminal. +function isProbeableOpt(el) { + if (el.kind !== 'opt') + return null; + const inner = el.inner; + if (inner.kind !== 'group') + return null; + if (inner.alts.length !== 1) + return null; + const seq = inner.alts[0]; + if (seq.length < 2) + return null; + const last = seq[seq.length - 1]; + if (last.kind !== 'term' && last.kind !== 'regex') + return null; + return { xSeq: seq.slice(0, -1), disambiguator: last }; +} +// Union of every terminal reachable by walking an element's subtree, +// following refs transitively. Cycles are broken by the visited set. +// Returns terminals as BnfElements so the caller isn't tied to the +// emitter's token-allocation step. +function collectTerminalVocabElements(el, grammar, out, visited) { + if (el.kind === 'term') { + const k = termKey(el); + if (!out.has(k)) + out.set(k, el); + return; + } + if (el.kind === 'regex') { + const k = regexKey(el); + if (!out.has(k)) + out.set(k, el); + return; + } + if (el.kind === 'ref') { + if (visited.has(el.name)) + return; + visited.add(el.name); + const prod = grammar.productions.find((p) => p.name === el.name); + if (!prod) + return; + for (const alt of prod.alts) + for (const sub of alt) + collectTerminalVocabElements(sub, grammar, out, visited); + return; + } + if (el.kind === 'opt' || el.kind === 'star' || el.kind === 'plus' || + el.kind === 'rep') { + collectTerminalVocabElements(el.inner, grammar, out, visited); + return; + } + if (el.kind === 'group') { + for (const alt of el.alts) + for (const sub of alt) + collectTerminalVocabElements(sub, grammar, out, visited); + return; + } +} +function collectSeqVocabElements(seq, grammar) { + const out = new Map(); + const visited = new Set(); + for (const el of seq) + collectTerminalVocabElements(el, grammar, out, visited); + return out; +} +function mapsOverlap(a, b) { + for (const x of a.keys()) + if (b.has(x)) + return true; + return false; +} +// Rewrite every ambiguous `[X D] Y` subsequence in `grammar` into a +// probe-dispatch pattern. The grammar at this point still has `opt`, +// `group`, `star`, `plus`, `rep` sugar — intentionally, since that's +// where the pattern is easy to recognise. Runs BEFORE token +// allocation; probe metadata stores BnfElements, and the emitter +// resolves them to token names at emit time. +function rewriteProbeDispatches(grammar) { + const reports = grammar.ambiguities ?? []; + const extra = []; + const used = new Set(grammar.productions.map((p) => p.name)); + function freshName(hint) { + let name = hint; + let i = 1; + while (used.has(name)) { + name = hint + i; + i++; + } + used.add(name); + return name; + } + const rewritten = []; + for (const prod of grammar.productions) { + let newAlts = []; + let touched = false; + for (let altIdx = 0; altIdx < prod.alts.length; altIdx++) { + const alt = prod.alts[altIdx]; + let resultAlt = []; + for (let i = 0; i < alt.length; i++) { + const el = alt[i]; + const info = isProbeableOpt(el); + if (!info) { + resultAlt.push(el); + continue; + } + const ySeq = alt.slice(i + 1); + if (ySeq.length === 0) { + // `[X D]` is the last thing in the alt — nothing follows, so + // there's nothing to disambiguate against. Standard emit. + resultAlt.push(el); + continue; + } + const xVocab = collectSeqVocabElements(info.xSeq, grammar); + const yVocab = collectSeqVocabElements(ySeq, grammar); + if (!mapsOverlap(xVocab, yVocab)) { + // The optional's leading tokens don't overlap with the tail's + // leading tokens, so the normal FIRST-based dispatcher can + // decide. No rewrite needed. + resultAlt.push(el); + continue; + } + // Joint vocab: union of everything the probe might need to + // consume. Includes the disambiguator, which we then remove so + // the probe stops on it and the peek works. + const vocab = new Map([...xVocab, ...yVocab]); + const d = info.disambiguator; + const dKey = d.kind === 'term' ? termKey(d) + : d.kind === 'regex' ? regexKey(d) + : null; + if (dKey) + vocab.delete(dKey); + const dispatchName = freshName(`${prod.name}$pd${i}`); + const probeName = freshName(`${dispatchName}$probe`); + const withName = freshName(`${dispatchName}$with`); + const noName = freshName(`${dispatchName}$no`); + // Synthesise the probe helper. + extra.push({ + name: probeName, + alts: [], + probeHelper: { vocabElements: [...vocab.values()] }, + nodeKind: 'helper', + }); + // Synthesise the committed branches. `with` = X D Y, `no` = Y. + extra.push({ + name: withName, + alts: [[...info.xSeq, info.disambiguator, ...ySeq]], + nodeKind: 'helper', + }); + extra.push({ + name: noName, + alts: [ySeq], + nodeKind: 'helper', + }); + // Synthesise the dispatcher. The `alts` list is a "virtual" + // spec — two ref-only alts — that exists solely to feed + // computeFirstSets the right FIRST/nullable answers (FIRST + // = FIRST(with) ∪ FIRST(no)). The emitter checks + // `probeDispatch` first and emits the phase-retry body + // instead of compiling `alts`. + extra.push({ + name: dispatchName, + alts: [ + [{ kind: 'ref', name: withName }], + [{ kind: 'ref', name: noName }], + ], + probeDispatch: { + probeRule: probeName, + disambiguator: info.disambiguator, + withBranch: withName, + noBranch: noName, + }, + nodeKind: 'helper', + }); + reports.push({ + rule: prod.name, altIdx, optIdx: i, + reason: `optional prefix shares vocabulary with tail`, + resolved: true, + }); + resultAlt.push({ kind: 'ref', name: dispatchName }); + // Everything that followed the opt is now inside the dispatcher + // (withBranch / noBranch), so skip the rest of the alt. + i = alt.length; + touched = true; + } + newAlts.push(resultAlt); + } + if (touched) { + rewritten.push({ + name: prod.name, + alts: newAlts, + nodeKind: prod.nodeKind, + }); + } + else { + rewritten.push(prod); + } + } + return { + productions: [...rewritten, ...extra], + ambiguities: reports, + }; +} +// Emit a probe helper production. A self-looping rule that matches any +// one of the vocab tokens and restarts; a final empty-alt fallback +// ensures the rule NEVER fails — if the current lookahead isn't in the +// vocab (or we're at #ZZ), the rule pops cleanly. This is the +// failure-proof property the probe pattern relies on. +function emitProbeHelper(prod, tag, ruleSpec, literals, regexTokens) { + const elems = prod.probeHelper.vocabElements; + const opens = []; + for (const el of elems) { + const tok = el.kind === 'term' + ? literals.get(termKey(el)) + : el.kind === 'regex' ? regexTokens.get(regexKey(el)) + : undefined; + if (tok) + opens.push({ s: tok, r: prod.name, g: tag }); + } + // Empty fallback — pops without consuming anything. Must be last. + opens.push({ g: tag }); + ruleSpec[prod.name] = { open: opens }; +} +// Emit a probe-dispatch production. Encodes the three-phase retry +// pattern; uses only standard jsonic primitives (r:, p:, c:, k:, +// ctx.mark/rewind/t). +function emitProbeDispatch(prod, tag, ruleSpec, refs, literals, regexTokens) { + const { probeRule, disambiguator, withBranch, noBranch } = prod.probeDispatch; + const disambiguatorToken = disambiguator.kind === 'term' + ? literals.get(termKey(disambiguator)) + : disambiguator.kind === 'regex' + ? regexTokens.get(regexKey(disambiguator)) + : undefined; + if (!disambiguatorToken) { + throw new Error(`bnf: probe-dispatch rule '${prod.name}' has unresolvable ` + + `disambiguator (kind=${disambiguator.kind})`); + } + const initMark = refs.register((r, ctx) => { + r.k.pd_phase = 0; + r.k.pd_mark = ctx.mark(); + }); + const decide = refs.register((r, ctx) => { + // ctx.t[0] is the first token the probe didn't consume. The probe + // never fails, so this always reflects a real position. + const peek = ctx.t[0]; + ctx.rewind(r.k.pd_mark); + const matched = peek && peek.name === disambiguatorToken; + r.k.pd_phase = matched ? 1 : 2; + }); + const bubble = refs.register((r) => { + if (r.child && r.child.node !== undefined) + r.node = r.child.node; + }); + ruleSpec[prod.name] = { + open: [ + // Phase 0 — first pass: mark and probe. + { + c: refs.register((r) => !r.k.pd_phase), + a: initMark, + p: probeRule, + g: tag, + }, + // Phase 1 — disambiguator was seen: commit to X D Y. + { + c: refs.register((r) => r.k.pd_phase === 1), + p: withBranch, + g: tag, + }, + // Phase 2 — disambiguator was not seen: commit to Y alone. + { + c: refs.register((r) => r.k.pd_phase === 2), + p: noBranch, + g: tag, + }, + ], + close: [ + // Phase 0 close: decide phase based on peek, rewind, retry self. + { + c: refs.register((r) => r.k.pd_phase === 0), + a: decide, + r: prod.name, + g: tag, + }, + // Phase 1 / 2 close: lift the committed child's node up. + { a: bubble, g: tag }, + ], + }; } // Convert a BNF grammar AST into a jsonic GrammarSpec. function emitGrammarSpec(grammar, opts) { const start = opts?.start ?? grammar.productions[0].name; const tag = opts?.tag ?? 'bnf'; // Eliminate direct left recursion (P → P α | β) by rewriting to - // the equivalent right-recursive form P → β (α)*, then flatten any - // EBNF sugar (`?`, `*`, `+`, grouping) into plain BNF. + // the equivalent right-recursive form P → β (α)*, then detect + // ambiguous `[X D] Y` optional-prefix patterns and rewrite them + // into probe-dispatch helpers; finally flatten any EBNF sugar + // (`?`, `*`, `+`, grouping) into plain BNF. grammar = eliminateLeftRecursion(grammar); + grammar = rewriteProbeDispatches(grammar); grammar = desugar(grammar); // Allocate a fixed token for each unique literal, and a match - // token for each unique regex terminal. - const literals = new Map(); // literal -> token name + // token for each unique regex terminal. Literals are keyed by + // (literal, effective-case-sensitivity) so a `%s"foo"` (sensitive) + // and a bare `"foo"` (insensitive) produce distinct tokens. + const literals = new Map(); // literal-key -> token name const regexTokens = new Map(); // regex key -> token name const usedNames = new Set(); const fixedTokens = {}; @@ -498,19 +1276,59 @@ function emitGrammarSpec(grammar, opts) { for (const prod of grammar.productions) { for (const alt of prod.alts) { for (const el of alt) { - if (el.kind === 'term' && !literals.has(el.literal)) { - const name = allocTokenName(el.literal, usedNames); - literals.set(el.literal, name); - fixedTokens[name] = el.literal; + if (el.kind === 'term') { + const key = termKey(el); + if (!literals.has(key)) { + const name = allocTokenName(el.literal, usedNames); + literals.set(key, name); + if (isEffectivelyCaseSensitive(el)) { + fixedTokens[name] = el.literal; + } + else { + // Insensitive literal with at least one letter — emit + // as an anchored regex with the `i` flag. Mark the + // matcher `eager$` so jsonic's lexer fires it even + // when the current rule's tcol doesn't list its tin. + const re = new RegExp('^' + escapeRegExp(el.literal), 'i'); + re.eager$ = true; + matchTokens[name] = re; + } + } + } + else if (el.kind === 'regex') { + const key = regexKey(el); + if (!regexTokens.has(key)) { + const name = allocTokenName('rx_' + el.pattern, usedNames); + regexTokens.set(key, name); + matchTokens[name] = new RegExp('^' + el.pattern, el.flags); + } + } + } + } + // Probe-helper productions store their vocab as BnfElements — + // walk those too so the required tokens get allocated. + if (prod.probeHelper) { + for (const el of prod.probeHelper.vocabElements) { + if (el.kind === 'term') { + const key = termKey(el); + if (!literals.has(key)) { + const name = allocTokenName(el.literal, usedNames); + literals.set(key, name); + if (isEffectivelyCaseSensitive(el)) { + fixedTokens[name] = el.literal; + } + else { + const re = new RegExp('^' + escapeRegExp(el.literal), 'i'); + re.eager$ = true; + matchTokens[name] = re; + } + } } else if (el.kind === 'regex') { const key = regexKey(el); if (!regexTokens.has(key)) { const name = allocTokenName('rx_' + el.pattern, usedNames); regexTokens.set(key, name); - // Anchor at the start of the forward-facing source — the - // lexer calls the matcher with `fwd`, so a leading `^` is - // required to avoid matching mid-stream. matchTokens[name] = new RegExp('^' + el.pattern, el.flags); } } @@ -520,14 +1338,20 @@ function emitGrammarSpec(grammar, opts) { const knownRules = new Set(grammar.productions.map((p) => p.name)); const { firstSets, nullable } = computeFirstSets(grammar, literals, regexTokens); const refs = new RefRegistry(); - // Emit each production as one or more jsonic rules. Simple - // (single-segment) alternatives fit directly into `rule.open`; - // multi-segment alternatives need a chain of auxiliary rules, one - // per segment after the first; multi-alt productions that mix the - // two use a FIRST-set dispatcher. const ruleSpec = {}; for (const prod of grammar.productions) { - emitProduction(prod, literals, regexTokens, knownRules, tag, ruleSpec, firstSets, nullable, refs); + if (prod.probeHelper) { + emitProbeHelper(prod, tag, ruleSpec, literals, regexTokens); + continue; + } + if (prod.probeDispatch) { + emitProbeDispatch(prod, tag, ruleSpec, refs, literals, regexTokens); + continue; + } + // Standard path: a (possibly single-segment) set of alternatives + // compiled to jsonic alts. Simple alts collapse into `open` alts + // directly; multi-segment alts emit a chain of aux rules. + emitProduction(prod, grammar, literals, regexTokens, knownRules, tag, ruleSpec, firstSets, nullable, refs); } // Wrap the user-visible start rule in a synthetic rule that // explicitly consumes #ZZ. Without this, a user rule that pops @@ -538,15 +1362,14 @@ function emitGrammarSpec(grammar, opts) { ruleSpec[startWrapper] = { open: [{ p: start, - // Initialise the top-level node so descendants can accumulate. - a: refs.register((r) => { r.node = []; }), g: tag, }], close: [{ s: '#ZZ', - // Lift the child's result into this rule's node so the value - // returned to the caller of `jsonic(...)` is the tree, not the - // initial empty array. + // Return the start rule's AST node directly — the `__start__` + // wrapper exists only to ensure end-of-source gets consumed. + // The caller of `jsonic(src)` receives the tagged user-rule + // node (e.g. `{rule: 'URI', src, kids: [...]}`) unadorned. a: refs.register((r) => { if (r.child && r.child.node !== undefined) { r.node = r.child.node; @@ -578,7 +1401,7 @@ function segmentize(alt, literals, regexTokens) { let current = { terms: [], ref: null }; for (const el of alt) { if (el.kind === 'term') { - current.terms.push(literals.get(el.literal)); + current.terms.push(literals.get(termKey(el))); } else if (el.kind === 'regex') { const key = regexKey(el); @@ -647,40 +1470,64 @@ class RefRegistry { return this.refs; } } -function segmentToAlt(seg, tag, refs, initNode) { +function mkAstNode(ruleName, nodeKind) { + return nodeKind === 'user' + ? { rule: ruleName, src: '', kids: [] } + : { src: '', kids: [] }; +} +function segmentToAlt(seg, tag, refs, initNode, ruleName, nodeKind) { const spec = { g: tag }; if (seg.terms.length > 0) spec.s = seg.terms.join(' '); if (seg.ref) spec.p = seg.ref; - // Default tree-building: push each matched terminal's source text - // into the rule's node. The first alt of a head rule also resets - // `r.node` to a fresh array — otherwise a child rule would inherit - // (and then mutate) its parent's node, giving a circular tree. + // Default tree-building: accumulate each matched terminal's source + // text into `r.node.src`. Head alts also allocate a fresh AST node + // so the child doesn't inherit (and then mutate) its parent's. const nterms = seg.terms.length; if (nterms > 0 || initNode) { spec.a = refs.register((r) => { if (initNode) - r.node = []; - for (let i = 0; i < nterms; i++) { - r.node.push(r.o[i].src); - } + r.node = mkAstNode(ruleName, nodeKind); + const n = r.node; + for (let i = 0; i < nterms; i++) + n.src += r.o[i].src; }); } return spec; } -// Close-state action: append the just-returned child rule's node -// (if any) to the current rule's node array. -function captureChildRef(refs) { +// Close-state action: merge the just-returned child rule's AST node +// into the current rule's. Tagged children (user rules) get pushed +// verbatim into `kids`; untagged (helper / core) flatten — their +// `src` appends and their `kids` extend. Either way `src` +// concatenates so every ancestor's `.src` reflects everything it +// matched. +function captureChildRef(refs, ruleName, nodeKind) { return refs.register((r) => { if (r.node == null) - r.node = []; - if (r.child && r.child.node !== undefined) { - r.node.push(r.child.node); + r.node = mkAstNode(ruleName, nodeKind); + const n = r.node; + const c = r.child && r.child.node; + if (c == null) + return; + if (typeof c !== 'object' || !('src' in c)) { + // Legacy shape — wrap as a leaf kid. + n.kids.push(c); + return; } + // Defensive: if the child somehow shares this rule's node + // object, skip the merge rather than push a self-reference. (A + // properly-emitted grammar always allocates fresh child nodes.) + if (c === n) + return; + n.src += c.src; + if (c.rule) + n.kids.push(c); + else if (Array.isArray(c.kids)) + n.kids.push(...c.kids); }); } -function emitProduction(prod, literals, regexTokens, knownRules, tag, ruleSpec, firstSets, nullable, refs) { +function emitProduction(prod, grammar, literals, regexTokens, knownRules, tag, ruleSpec, firstSets, nullable, refs) { for (const alt of prod.alts) { validateRefs(alt, knownRules, prod.name); } @@ -708,6 +1555,7 @@ function emitProduction(prod, literals, regexTokens, knownRules, tag, ruleSpec, alt.every((el) => el.kind === 'ref') && seg.terms.length === 0 && seg.ref != null; + const prodKind = prod.nodeKind ?? 'user'; if (needsPeek && isRefOnly) { const firstTokens = firstOfAlt(alt, literals, regexTokens, firstSets, nullable); if (firstTokens) { @@ -716,21 +1564,26 @@ function emitProduction(prod, literals, regexTokens, knownRules, tag, ruleSpec, s: tok, b: 1, p: seg.ref, - a: refs.register((r) => { r.node = []; }), + a: refs.register((r) => { + r.node = mkAstNode(prod.name, prodKind); + }), g: tag, }); } continue; } } - opens.push(segmentToAlt(seg, tag, refs, true)); + opens.push(segmentToAlt(seg, tag, refs, true, prod.name, prodKind)); } const rs = { open: opens }; // If any alt has a push, the close state must capture the // returned child. Add a universal fallback close alt whose // action is a no-op when there was no push. if (prod.alts.some((alt) => alt.some((el) => el.kind === 'ref'))) { - rs.close = [{ a: captureChildRef(refs), g: tag }]; + rs.close = [{ + a: captureChildRef(refs, prod.name, prod.nodeKind ?? 'user'), + g: tag, + }]; } ruleSpec[prod.name] = rs; return; @@ -738,7 +1591,7 @@ function emitProduction(prod, literals, regexTokens, knownRules, tag, ruleSpec, if (prod.alts.length === 1) { // Single-alt, multi-segment: chain rules directly on the // production. - emitChain(prod.name, prod.alts[0], literals, regexTokens, tag, ruleSpec, refs); + emitChain(prod.name, prod.alts[0], literals, regexTokens, tag, ruleSpec, refs, prod.nodeKind ?? 'user'); return; } // Multi-alt with at least one multi-segment alternative: emit a @@ -757,38 +1610,70 @@ function emitProduction(prod, literals, regexTokens, knownRules, tag, ruleSpec, emptyAltSeen = true; continue; } - emitChain(implName, alt, literals, regexTokens, tag, ruleSpec, refs); - // Compute FIRST(alt) to drive the dispatch lookahead. Any token - // in that set routes to this impl rule. The `b: 1` restores the - // peeked token so the impl can re-consume it. - const firstTokens = firstOfAlt(alt, literals, regexTokens, firstSets, nullable); - if (firstTokens === null) { - throw new Error(`bnf: rule '${prod.name}' alternative ${i} is nullable but ` + - `is not the only empty alt; FIRST set is ambiguous`); + emitChain(implName, alt, literals, regexTokens, tag, ruleSpec, refs, 'helper'); + // Fan out this alt into one dispatch entry per concrete token + // sequence it can start with. Up to LOOKAHEAD_K tokens per + // prefix is enough for the grammars this converter targets; a + // ref with multiple alts produces one prefix per sub-alt so + // overlapping FIRST sets between competing alts can still be + // separated by their second (or later) token. + // The dispatcher itself is a user (or helper) rule — it must + // allocate its own AST node on every dispatch alt, otherwise the + // node inherited from the parent via makeRule(ctx, rule.node) + // would be shared and the dispatcher's captureChildRef would + // mutate the parent's tree. + const dispatchKind = prod.nodeKind ?? 'user'; + const initDispatchNode = refs.register((r) => { + r.node = mkAstNode(prod.name, dispatchKind); + }); + const LOOKAHEAD_K = 4; + const prefixes = altPrefixes(alt, grammar, literals, regexTokens, LOOKAHEAD_K); + const usable = prefixes.filter((p) => p.length > 0); + if (usable.length > 0) { + for (const p of usable) { + dispatchOpen.push({ + s: p.join(' '), + b: p.length, + p: implName, + a: initDispatchNode, + g: tag, + }); + } } - for (const tok of firstTokens) { - dispatchOpen.push({ s: tok, b: 1, p: implName, g: tag }); + else { + const firstTokens = firstOfAlt(alt, literals, regexTokens, firstSets, nullable); + if (firstTokens === null) { + throw new Error(`bnf: rule '${prod.name}' alternative ${i} is nullable ` + + `but is not the only empty alt; FIRST set is ambiguous`); + } + for (const tok of firstTokens) { + dispatchOpen.push({ + s: tok, b: 1, p: implName, a: initDispatchNode, g: tag, + }); + } } } if (emptyAltSeen) { // Fallback: matches any token (or none), pops immediately with - // an empty tree. + // an empty tree. Tagged with the user rule name so a consumer + // walking the tree still gets a placeholder node for the empty + // alternative. + const fallbackKind = prod.nodeKind ?? 'user'; dispatchOpen.push({ - a: refs.register((r) => { r.node = []; }), + a: refs.register((r) => { + r.node = mkAstNode(prod.name, fallbackKind); + }), g: tag, }); } ruleSpec[prod.name] = { open: dispatchOpen, close: [{ - // Promote the chosen impl's result up to the dispatcher's node - // so the calling rule sees the impl's tree (not the - // dispatcher's empty placeholder). - a: refs.register((r) => { - if (r.child && r.child.node !== undefined) { - r.node = r.child.node; - } - }), + // Merge the chosen impl's result up into the dispatcher's node, + // tagged with the user rule name (so the enclosing rule sees a + // `{rule, src, kids}` child, not the impl chain's transparent + // `{src, kids}`). + a: captureChildRef(refs, prod.name, prod.nodeKind ?? 'user'), g: tag, }], }; @@ -796,15 +1681,22 @@ function emitProduction(prod, literals, regexTokens, knownRules, tag, ruleSpec, // Emit a (possibly single-step) chain of rules for one alt under the // given head rule name. Segment 0 goes into `headName`; later // segments get synthetic `$stepN` continuations. -function emitChain(headName, alt, literals, regexTokens, tag, ruleSpec, refs) { +// +// `headKind` controls the head rule's AST node shape: 'user' tags +// the head's node with the rule name; 'helper' leaves it untagged +// (transparent to the enclosing user rule). Step rules are always +// helpers — they inherit and accumulate into the head's node via +// `r:` replacement. +function emitChain(headName, alt, literals, regexTokens, tag, ruleSpec, refs, headKind = 'helper') { const segs = segmentize(alt, literals, regexTokens); const chainName = (i) => i === 0 ? headName : `${headName}$step${i}`; for (let i = 0; i < segs.length; i++) { const name = chainName(i); const seg = segs[i]; - // Only the head of the chain initialises the node array; later - // steps inherit and continue to accumulate into it. - const open = [segmentToAlt(seg, tag, refs, i === 0)]; + const kind = i === 0 ? headKind : 'helper'; + // Only the head of the chain initialises the node object; later + // steps inherit and continue to accumulate into it via `r:`. + const open = [segmentToAlt(seg, tag, refs, i === 0, name, kind)]; const rs = { open }; const isLast = i === segs.length - 1; if (!isLast) { @@ -812,14 +1704,14 @@ function emitChain(headName, alt, literals, regexTokens, tag, ruleSpec, refs) { // node and replace with the next step rule. rs.close = [{ r: chainName(i + 1), - a: captureChildRef(refs), + a: captureChildRef(refs, name, kind), g: tag, }]; } else if (seg.ref) { // Last step, but it had a push — we still need to capture the // final child before popping. - rs.close = [{ a: captureChildRef(refs), g: tag }]; + rs.close = [{ a: captureChildRef(refs, name, kind), g: tag }]; } ruleSpec[name] = rs; } @@ -845,7 +1737,7 @@ function computeFirstSets(grammar, literals, regexTokens) { for (const el of alt) { if (el.kind === 'term' || el.kind === 'regex') { const tok = el.kind === 'term' - ? literals.get(el.literal) + ? literals.get(termKey(el)) : regexTokens.get(regexKey(el)); if (!first.has(tok)) { first.add(tok); @@ -888,7 +1780,7 @@ function firstOfAlt(alt, literals, regexTokens, firstSets, nullable) { for (const el of alt) { if (el.kind === 'term' || el.kind === 'regex') { const tok = el.kind === 'term' - ? literals.get(el.literal) + ? literals.get(termKey(el)) : regexTokens.get(regexKey(el)); out.add(tok); return out; @@ -907,6 +1799,186 @@ function firstOfAlt(alt, literals, regexTokens, firstSets, nullable) { // Alt is nullable — no non-empty prefix. return null; } +// Longest deterministic terminal prefix of a rule — the longest +// sequence of tokens that every alternative of the rule starts +// with. Refs are followed into their target rule, with a `visited` +// set guarding cycles. An empty array means there's no confident +// prefix (the rule either has divergent alts, starts with a multi- +// alt ref, or hits a cycle), so the caller should fall back to a +// single-token FIRST-set lookahead instead. +function ruleLiteralPrefix(name, grammar, literals, regexTokens, visited) { + if (visited.has(name)) + return []; + const next = new Set(visited); + next.add(name); + const prod = grammar.productions.find((p) => p.name === name); + if (!prod || prod.alts.length === 0) + return []; + const prefixes = prod.alts.map((alt) => altLiteralPrefix(alt, grammar, literals, regexTokens, next)); + if (prefixes.some((p) => p.length === 0)) + return []; + const minLen = Math.min(...prefixes.map((p) => p.length)); + const common = []; + for (let i = 0; i < minLen; i++) { + const tok = prefixes[0][i]; + if (prefixes.every((p) => p[i] === tok)) + common.push(tok); + else + break; + } + return common; +} +function altLiteralPrefix(alt, grammar, literals, regexTokens, visited) { + const out = []; + for (const el of alt) { + if (el.kind === 'term') { + out.push(literals.get(termKey(el))); + } + else if (el.kind === 'regex') { + out.push(regexTokens.get(regexKey(el))); + } + else if (el.kind === 'ref') { + const sub = ruleLiteralPrefix(el.name, grammar, literals, regexTokens, visited); + // Take the ref's literal prefix and stop — we can't see past + // the ref without more expensive analysis. + out.push(...sub); + return out; + } + else { + return out; + } + } + return out; +} +// Enumerate concrete token-sequence prefixes an alternative can +// start with, each at most `maxK` tokens long. Refs with multiple +// alternatives fan out into one prefix per sub-alternative so the +// caller can emit a dedicated dispatch alt for each path. When a +// ref cycles back or exhausts depth, the path is *terminated* at +// the tokens accumulated so far — the `done` flag is propagated +// out of nested calls so a truncated sub-prefix is never extended +// with tokens from elements the outer alt happens to list after the +// cycled ref. +function altPrefixesRaw(alt, grammar, literals, regexTokens, maxK, visited = new Set()) { + let paths = [{ tokens: [], done: false }]; + for (const el of alt) { + const next = []; + for (const p of paths) { + if (p.done || p.tokens.length >= maxK) { + next.push(p); + continue; + } + if (el.kind === 'term') { + next.push({ + tokens: [...p.tokens, literals.get(termKey(el))], + done: false, + }); + } + else if (el.kind === 'regex') { + next.push({ + tokens: [...p.tokens, regexTokens.get(regexKey(el))], + done: false, + }); + } + else if (el.kind === 'ref') { + if (visited.has(el.name)) { + next.push({ tokens: p.tokens, done: true }); + continue; + } + const childVisited = new Set(visited); + childVisited.add(el.name); + const target = grammar.productions.find((pr) => pr.name === el.name); + if (!target || target.alts.length === 0) { + next.push({ tokens: p.tokens, done: true }); + continue; + } + for (const sub of target.alts) { + const subPaths = altPrefixesRaw(sub, grammar, literals, regexTokens, maxK - p.tokens.length, childVisited); + for (const sp of subPaths) { + next.push({ + tokens: [...p.tokens, ...sp.tokens], + // Propagate `done` so the outer loop won't extend a + // cycle-truncated sub-prefix. + done: sp.done, + }); + } + } + } + else { + // Desugar should have eliminated group/star/etc. at this point. + next.push({ tokens: p.tokens, done: true }); + } + } + paths = next; + if (paths.every((p) => p.done || p.tokens.length >= maxK)) + break; + } + return paths; +} +function altPrefixes(alt, grammar, literals, regexTokens, maxK) { + const raw = altPrefixesRaw(alt, grammar, literals, regexTokens, maxK); + const seen = new Set(); + const out = []; + for (const p of raw) { + const key = p.tokens.join(' '); + if (!seen.has(key)) { + seen.add(key); + out.push(p.tokens); + } + } + return out; +} +// A quoted-string literal is effectively case-sensitive either +// when the user explicitly wrote `%s"…"` or when it contains no +// ASCII letters (there's nothing to fold — `"+"` matches `+` in +// any "case"). +function isEffectivelyCaseSensitive(el) { + if (el.caseSensitive === true) + return true; + return !/[A-Za-z]/.test(el.literal); +} +// Map a term element to the key used to look up (or allocate) its +// emitted token. The key folds together the literal and its +// effective case-sensitivity so a sensitive and an insensitive +// occurrence of the same string are distinct tokens. +function termKey(el) { + return (isEffectivelyCaseSensitive(el) ? 'cs:' : 'ci:') + el.literal; +} +function escapeRegExp(s) { + return s.replace(/[\\^$.*+?()[\]{}|]/g, '\\$&'); +} +// Decode an ABNF numeric value (`%xNN`, `%dNN`, `%bNN`, or one of +// the range/concatenation forms) into a `BnfElement`. +// +// %x61 => single-char term "a" +// %x66.6f.6f => concatenated term "foo" +// %x30-39 => regex character class [\u0030-\u0039] +// +// Hex is case-insensitive; decimal and binary accept only digits +// in their respective ranges. Range endpoints must be the same +// base as the prefix (RFC 5234 doesn't allow mixing). +function parseNumericValue(src) { + const base = src[1].toLowerCase(); + const radix = base === 'x' ? 16 : base === 'd' ? 10 : 2; + const body = src.slice(2); + if (body.includes('-')) { + const [loStr, hiStr] = body.split('-'); + const lo = parseInt(loStr, radix); + const hi = parseInt(hiStr, radix); + if (lo === hi) { + return { kind: 'term', literal: String.fromCharCode(lo) }; + } + const toEsc = (n) => '\\u' + n.toString(16).padStart(4, '0'); + return { + kind: 'regex', + pattern: '[' + toEsc(lo) + '-' + toEsc(hi) + ']', + flags: '', + }; + } + const parts = body.split('.'); + const chars = parts.map((n) => String.fromCharCode(parseInt(n, radix))); + return { kind: 'term', literal: chars.join('') }; +} function allocTokenName(literal, used) { const base = literal .replace(/[^A-Za-z0-9]/g, '_') diff --git a/dist/bnf.js.map b/dist/bnf.js.map index aaac481..6825116 100644 --- a/dist/bnf.js.map +++ b/dist/bnf.js.map @@ -1 +1 @@ -{"version":3,"file":"bnf.js","sourceRoot":"","sources":["../src/bnf.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"bnf.js","sourceRoot":"","sources":["../src/bnf.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/defaults.js b/dist/defaults.js index beff220..a2a5817 100644 --- a/dist/defaults.js +++ b/dist/defaults.js @@ -293,6 +293,15 @@ Unexpected end of source.`, // Fail if result matches any of these. fail: [], }, + // Token-rewind options. `history` bounds how many consumed tokens + // are retained on ctx.v for ctx.rewind(). The default of 64 keeps + // parse-time memory bounded for large inputs; raise it if a + // grammar needs to rewind further, or set to Infinity to retain + // every consumed token. ctx.rewind(mark) throws if `mark` falls + // outside the retained window. + rewind: { + history: 64, + }, // Configuration options. config: { // Configuration modifiers. diff --git a/dist/defaults.js.map b/dist/defaults.js.map index 4b23c06..aa96b04 100644 --- a/dist/defaults.js.map +++ b/dist/defaults.js.map @@ -1 +1 @@ -{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/lexer.js b/dist/lexer.js index 889fd9e..e942bb4 100644 --- a/dist/lexer.js +++ b/dist/lexer.js @@ -179,7 +179,16 @@ let makeMatchMatcher = (cfg, _opts) => { } for (let tokenMatcher of tokenMatchers) { // Only match Token if present in Rule sequence. + // Exception: an `eager$` flag on the matcher opts out of + // tcol gating — the matcher fires whenever its regex matches + // and the downstream parser rejects tokens it doesn't expect + // at the current position. This is what ABNF's + // case-insensitive literals need: the lexer has to emit the + // literal's own tin even when the current rule's tcol is + // narrower, so the next rule up the stack can see the token + // as its proper type rather than falling through to #TX. if (tokenMatcher.tin$ && + !tokenMatcher.eager$ && !rule.spec.def.tcol[oc][tI].includes(tokenMatcher.tin$)) { continue; } diff --git a/dist/lexer.js.map b/dist/lexer.js.map index 4fe1d31..f4d6251 100644 --- a/dist/lexer.js.map +++ b/dist/lexer.js.map @@ -1 +1 @@ -{"version":3,"file":"lexer.js","sourceRoot":"","sources":["../src/lexer.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"lexer.js","sourceRoot":"","sources":["../src/lexer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/parser.js b/dist/parser.js index e4669ed..f8932a4 100644 --- a/dist/parser.js +++ b/dist/parser.js @@ -31,8 +31,100 @@ function defineLookaheadAliases(ctx, notoken) { get() { return this.t[1] ?? notoken; }, set(v) { this.t[1] = v; }, }, + // v1 / v2 used to be plain data slots; keep them as accessors on + // the growing `v` stack so existing grammar code reads the same + // "most-recently consumed" tokens. + v1: { + configurable: true, + enumerable: true, + get() { return this.v[this.v.length - 1] ?? notoken; }, + set(t) { + if (0 < this.v.length) + this.v[this.v.length - 1] = t; + else + this.v.push(t); + }, + }, + v2: { + configurable: true, + enumerable: true, + get() { return this.v[this.v.length - 2] ?? notoken; }, + set(t) { + const L = this.v.length; + if (1 < L) + this.v[L - 2] = t; + else if (1 === L) + this.v.unshift(t); + else + this.v.push(t); + }, + }, }); } +// Rewind primitives. Attached to `ctx` at parse start so rule +// actions can reach them via their `ctx` argument. `mark()` returns +// an opaque absolute counter (ctx.vAbs); `rewind(mark)` replays the +// tokens consumed since that mark by unshifting them back onto the +// active lexer's pending-token queue, so subsequent `lex.next()` +// calls re-serve them in forward order. +// +// Marks are absolute rather than array-relative so the ring-buffer +// cap (options.rewind.history) can evict old tokens from the front +// of ctx.v without invalidating mark values held by in-flight rule +// actions. A rewind whose target has been evicted throws — the +// caller's retained-history budget was too small for the grammar. +function attachRewind(ctx) { + ctx.mark = function () { + return this.vAbs; + }; + ctx.rewind = function (mark) { + const k = this.vAbs - mark; + if (k <= 0) + return; + if (k > this.v.length) { + throw new Error(`jsonic: ctx.rewind target ${mark} is outside the retained ` + + `history window (oldest mark available is ${this.vAbs - this.v.length}, ` + + `current is ${this.vAbs}); increase options.rewind.history.`); + } + const queue = this.lex.pnt.token; + const NOTOKEN = this.NOTOKEN; + // The lookahead buffer (ctx.t) holds tokens the lexer has already + // produced past the current consumed position but that haven't + // been committed to ctx.v yet. They advanced the lexer's sI — so + // if we just invalidated the buffer, those source chars would be + // lost. Preserve them by splicing into the front of the pending + // queue in the order the lexer produced them, BEHIND the rewound + // consumed tokens that come next. + const pendingLookahead = []; + for (let i = 0; i < this.t.length; i++) { + const tkn = this.t[i]; + if (tkn && tkn !== NOTOKEN) + pendingLookahead.push(tkn); + this.t[i] = NOTOKEN; + } + // Un-shift pre-lexed lookahead (oldest-first order at the queue + // head), so the next lex.next() serves them in the same order they + // were originally produced. + for (let i = pendingLookahead.length - 1; i >= 0; i--) { + queue.unshift(pendingLookahead[i]); + } + // Then unshift the rewound consumed tokens — they go in FRONT of + // the lookahead, so the next lex.next() serves the oldest rewound + // consumed token first, then the rest in order. + for (let i = 0; i < k; i++) { + // Pop newest-first, unshift in that order — the first unshift + // lands the newest at the queue's head; the next unshift slides + // older tokens in front of it, so the queue reads oldest-first. + queue.unshift(this.v.pop()); + } + this.vAbs -= k; + // Clear the lexer's cached end-of-source token so lex.next serves + // from the newly-replenished queue rather than short-circuiting + // to #ZZ. (Once the lexer has produced the end token it pins it + // to pnt.end; the rewound tokens would otherwise be unreachable.) + this.lex.pnt.end = undefined; + }; +} class ParserImpl { constructor(options, cfg, j) { this.rsm = {}; @@ -79,8 +171,13 @@ class ParserImpl { rule: {}, sub: jsonic.internal().sub, xs: -1, - v2: endtkn, - v1: endtkn, + // Consumed-token history. Legacy v1 / v2 accessors (installed by + // defineLookaheadAliases) read the top of this stack. ctx.vAbs + // is the absolute count of pushed-and-not-rewound tokens since + // parse start; ctx.mark() returns it so ring-buffer eviction of + // old entries doesn't invalidate outstanding marks. + v: [], + vAbs: 0, // Lookahead buffer. Seeded with two NOTOKEN slots; grows as alts // request deeper positions via ctx.t[i]. t: [notoken, notoken], @@ -119,6 +216,8 @@ class ParserImpl { } } let lex = (0, utility_1.badlex)((0, lexer_1.makeLex)(ctx), (0, utility_1.tokenize)('#BD', this.cfg), ctx); + ctx.lex = lex; + attachRewind(ctx); let startspec = this.rsm[this.cfg.rule.start]; if (null == startspec) { return undefined; diff --git a/dist/parser.js.map b/dist/parser.js.map index d4d1218..a1380c5 100644 --- a/dist/parser.js.map +++ b/dist/parser.js.map @@ -1 +1 @@ -{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/rules.js b/dist/rules.js index b7e8dde..f0ab66f 100644 --- a/dist/rules.js +++ b/dist/rules.js @@ -306,6 +306,39 @@ class RuleSpecImpl { if (alt.k) { rule.k = Object.assign(rule.k, alt.k); } + // Record consumed tokens (matched minus backtrack) on the v + // history BEFORE running alt actions, so an action that calls + // ctx.rewind sees the just-matched tokens on top of the stack. + // The lookahead-buffer shift itself still happens at the end of + // process() so non-action paths behave identically. + // + // ctx.vAbs is an absolute monotonic counter used as the mark + // value — it's decoupled from ctx.v.length so the ring-buffer + // cap can evict old tokens from the front without invalidating + // outstanding marks (marks older than the retained window will + // simply fail at rewind time with a clear error). + const _cons = rule[is_open ? 'oN' : 'cN'] - (alt.b || 0); + if (0 < _cons) { + // Move consumed tokens from ctx.t → ctx.v. Clear the tbuf slots + // so a ctx.rewind call inside the subsequent alt action can + // distinguish "token already in v" (NOTOKEN here; will be + // replayed from v) from "pre-lexed lookahead past consumed" + // (real token in tbuf; needs re-queuing to preserve state). + const NOTOKEN = ctx.NOTOKEN; + for (let i = 0; i < _cons; i++) { + ctx.v.push(ctx.t[i]); + ctx.t[i] = NOTOKEN; + } + ; + ctx.vAbs += _cons; + // Amortised-O(1) ring-buffer cap: let v grow to twice the + // capacity, then splice its front back down. Batch-eviction + // makes each push O(1) on average even at the cap. + const cap = ctx.cfg.rewind.history; + if (cap !== Infinity && ctx.v.length > 2 * cap) { + ctx.v.splice(0, ctx.v.length - cap); + } + } // TODO: move after rule.next resolution // (breaks Expr! - fix first) // Action call. @@ -344,6 +377,15 @@ class RuleSpecImpl { if (0 < Object.keys(rule.k).length) { next.k = { ...rule.k }; } + // Rewire the parent's `child` pointer so the parent's + // close-state actions (e.g. capture-child) see the NEW rule + // after it pops, not the stale replaced one. Without this, + // an action inspecting `r.child.node` gets whatever state + // the replaced rule left behind rather than the replacement's + // final result. + if (rule.parent && rule.parent.child === rule) { + rule.parent.child = next; + } why += 'R`' + alt.r + '`'; } else { @@ -379,19 +421,9 @@ class RuleSpecImpl { if (consumed < 0) consumed = 0; if (0 < consumed) { - // Maintain the 2-slot history (v1 = last consumed, v2 = prior). - // Semantics are preserved for consumed==1,2 and extend cleanly - // for larger N (history still holds the two most recent). - if (1 === consumed) { - ctx.v2 = ctx.v1; - ctx.v1 = ctx.t[0]; - } - else { - ctx.v2 = ctx.t[consumed - 2]; - ctx.v1 = ctx.t[consumed - 1]; - } // Shift the lookahead buffer left by `consumed` slots, filling // vacated tail positions with NOTOKEN so later alts re-fetch. + // (The corresponding v-history push ran before alt actions.) const L = ctx.t.length; for (let i = 0; i < L - consumed; i++) ctx.t[i] = ctx.t[i + consumed]; @@ -471,7 +503,14 @@ function parse_alts(is_open, alts, lex, rule, ctx) { const Si = S ? S[i] : null; if (null != Si) { const tin = tkn.tin; - if (!(Si[(tin / 31) | 0] & ((1 << ((tin % 31) - 1)) | bitAA))) { + const part = (tin / 31) | 0; + // bitAA lives in partition 0 (tin=AA=4). ORing it into the + // match mask for any partition other than 0 lets unrelated + // tokens in higher partitions collide with alts that merely + // set bit 3 of their own partition — a false positive. Apply + // bitAA only when testing a partition-0 token. + const aaBit = part === 0 ? bitAA : 0; + if (!(Si[part] & ((1 << ((tin % 31) - 1)) | aaBit))) { cond = false; break; } @@ -592,6 +631,18 @@ function normalt(a, rs, r) { for (let i = 0; i < sN; i++) { const tins = tinsify([a.s[i]]); t[i] = tins; + // `#AA` is the ANY wildcard — a position whose tin list + // includes it must match every lexed token regardless of + // partition. Represent that by dropping to the existing + // `S[i] = null` sentinel ("no constraint"), bypassing the + // per-partition bitset check in parse_alts. The t[i] entry + // keeps the raw tin list so tcol collation still reflects + // what the user wrote. + const aaTin = r.ji.token('#AA'); + if (aaTin != null && tins.includes(aaTin)) { + S[i] = null; + continue; + } S[i] = 0 < tins.length ? new Array(Math.max(...tins.map((tin) => (1 + tin / 31) | 0))) diff --git a/dist/rules.js.map b/dist/rules.js.map index db4b3f3..dad73bd 100644 --- a/dist/rules.js.map +++ b/dist/rules.js.map @@ -1 +1 @@ -{"version":3,"file":"rules.js","sourceRoot":"","sources":["../src/rules.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"rules.js","sourceRoot":"","sources":["../src/rules.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/types.d.ts b/dist/types.d.ts index 81391bc..fe4cf33 100644 --- a/dist/types.d.ts +++ b/dist/types.d.ts @@ -199,6 +199,9 @@ export type Options = { result?: { fail: any[]; }; + rewind?: { + history?: number; + }; config?: { modify?: { [plugin_name: string]: (config: Config, options: Options) => void; @@ -300,9 +303,13 @@ export type Context = { rule?: RuleSub[]; }; xs: Tin; + v: Token[]; + vAbs: number; v2: Token; v1: Token; t: Token[]; + mark: () => number; + rewind: (mark: number) => void; t0: Token; t1: Token; tC: number; @@ -472,6 +479,9 @@ export type Config = { result: { fail: any[]; }; + rewind: { + history: number; + }; error: { [code: string]: string; }; diff --git a/dist/utility.js b/dist/utility.js index 1c55415..e10b136 100644 --- a/dist/utility.js +++ b/dist/utility.js @@ -359,6 +359,10 @@ function configure(jsonic, incfg, opts) { if (opts.result) { cfg.result.fail = [...opts.result.fail]; } + // Parse-time consumed-token history cap (for ctx.rewind). + cfg.rewind = { + history: null == opts.rewind?.history ? Infinity : opts.rewind.history, + }; const optscolor = opts.color ?? {}; cfg.color = cfg.color ?? {}; cfg.color.active = optscolor.active ?? cfg.color.active ?? true; diff --git a/dist/utility.js.map b/dist/utility.js.map index 8be5c69..597adf5 100644 --- a/dist/utility.js.map +++ b/dist/utility.js.map @@ -1 +1 @@ -{"version":3,"file":"utility.js","sourceRoot":"","sources":["../src/utility.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"utility.js","sourceRoot":"","sources":["../src/utility.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/bnf.ts b/src/bnf.ts index 83fe551..7788f82 100644 --- a/src/bnf.ts +++ b/src/bnf.ts @@ -29,23 +29,89 @@ import type { BnfConvertOptions, GrammarSpec, Rule } from './types' type BnfElement = - | { kind: 'term'; literal: string } + | { + kind: 'term'; + literal: string; + // ABNF quoted strings are case-insensitive by default; `%s"…"` + // sets this flag to true. Omitting the flag preserves the + // RFC 5234 default so the emitter can lower to a case-fold + // match. (Has no effect when the literal contains no ASCII + // letters — those match exactly either way.) + caseSensitive?: boolean; + } | { kind: 'ref'; name: string } - | { kind: 'regex'; pattern: string; flags: string } // /…/flags - | { kind: 'opt'; inner: BnfElement } // X? - | { kind: 'star'; inner: BnfElement } // X* - | { kind: 'plus'; inner: BnfElement } // X+ - | { kind: 'group'; alts: BnfSequence[] } // ( A | B ) + | { kind: 'regex'; pattern: string; flags: string } // internal: for future %x + | { kind: 'opt'; inner: BnfElement } // [ A ] + | { kind: 'star'; inner: BnfElement } // *A + | { kind: 'plus'; inner: BnfElement } // 1*A + | { kind: 'rep'; min: number; max: number; inner: BnfElement } // m*nA + | { kind: 'group'; alts: BnfSequence[] } // ( A / B ) type BnfSequence = BnfElement[] type BnfProduction = { name: string alts: BnfSequence[] + // ABNF `name =/ alt` — flagged during parse; a post-parse merge + // step folds each incremental production's alts into the earlier + // production with the same name. The flag is gone by the time + // the AST reaches the emitter. + incremental?: boolean + // Set on synthetic productions introduced by the probe-dispatch + // rewriter. The emitter emits a phase-retry rule body instead of + // compiling `alts` through the normal path. + probeDispatch?: ProbeDispatchSpec + // Set on synthetic probe-helper productions (`*(vocab)` style, + // failure-proof). The emitter emits a one-rule loop over the vocab + // token set with an empty-alt fallback. Vocab is stored as a list + // of BnfElements (term / regex) — resolved to token names at emit + // time, after token allocation. + probeHelper?: { vocabElements: BnfElement[] } + // How this rule contributes to the output AST: + // - 'user': emit a tagged node `{ rule, src, kids }`. + // - 'core': the RFC 5234 Appendix B.1 rules — flatten into the + // enclosing rule's `src` (char-class terminals shouldn't clutter + // the tree with one node per matched character). + // - 'helper': synthetic sugar / dispatcher / chain rules — also + // flatten. Their `src` and `kids` roll up into the enclosing + // user rule transparently. + // Unset is treated as 'user' (default for freshly parsed productions). + nodeKind?: 'user' | 'core' | 'helper' +} + +// Configuration attached to a synthesised dispatcher production. The +// dispatcher is the replacement for an ambiguous `[X D] Y` subsequence +// in a user rule: on phase 0 it pushes `probeRule` (a failure-proof +// *vocab loop), peeks `ctx.t[0]` on return, rewinds to the mark, and +// sets `r.k.phase` to 1 (saw D → push `withBranch`) or 2 (didn't → +// push `noBranch`). `r:` retries the dispatcher so the committed +// branch is taken on the next pass. +// +// The disambiguator is stored as a BnfElement (term or regex) rather +// than a token name so the rewriter doesn't need token allocation to +// have happened. `emitProbeDispatch` resolves it to a name at emit +// time from the literals / regex maps. +type ProbeDispatchSpec = { + probeRule: string + disambiguator: BnfElement + withBranch: string + noBranch: string } type BnfGrammar = { productions: BnfProduction[] + // Diagnostics from the probe-dispatch analyser: one entry per + // ambiguous `[X D] Y` pattern detected, populated whether or not + // the rewrite was actually applied. + ambiguities?: AmbiguityReport[] +} + +type AmbiguityReport = { + rule: string + altIdx: number + optIdx: number + reason: string + resolved: boolean } @@ -53,29 +119,39 @@ type BnfGrammar = { // jsonic rules. Each rule names its `open`/`close` alt list and, where // necessary, a `bo`/`bc` state hook for AST assembly. // +// Stage 8: incremental alternatives via `name =/ alt` now fold +// into the earlier production with the same name. Quoted strings +// default to case-insensitive (ABNF semantics), `%s` / `%i` force +// sensitivity explicitly, numeric values and repetition prefixes +// work as in previous stages. +// // Token vocabulary: -// #LT `<` -// #GT `>` -// #DEF `::=` -// #PIPE `|` -// #QM `?` -// #STAR `*` -// #PLUS `+` +// #DEF `=` (rule-definition operator) +// #DEFA `=/` (incremental-alternatives operator) +// #ALT `/` (alternation) +// #STAR `*` (repetition separator) +// #NUM decimal repetition count (matched via match.token) +// #NV `%[xdb]NN[(-NN|(.NN)*)]` numeric value (match.token) +// #SS `%s` (case-sensitive string prefix) +// #SI `%i` (case-insensitive string prefix — same as default) // #LP `(` // #RP `)` -// #RX /pattern/flags (regex terminal, matched via match.token) +// #OB `[` (optional-group open) +// #CB `]` (optional-group close) // #TX bare identifier (jsonic default text token) // #ST quoted string literal (jsonic default string token) // #ZZ end-of-source // // Grammar: -// bnf ::= production* -// production ::= '<' IDENT '>' '::=' alts -// alts ::= seq ('|' seq)* -// seq ::= element* -// element ::= atom postfix? -// atom ::= '<' IDENT '>' | STRING | REGEX | IDENT | '(' alts ')' -// postfix ::= '?' | '*' | '+' +// bnf = production* +// production = IDENT ('=' / '=/') alts +// alts = seq ('/' seq)* +// seq = element* +// element = repetition? atom +// repetition = NUM '*' NUM / NUM '*' / '*' NUM / '*' / NUM +// atom = IDENT | STRING | ['%s' | '%i'] STRING | NUMVAL +// | '(' alts ')' | '[' alts ']' +// numval = '%' ('x' / 'd' / 'b') DIGITS [ '-' DIGITS | ('.' DIGITS)* ] const bnfRules: Record< string, { @@ -98,32 +174,54 @@ const bnfRules: Record< // One production per invocation; tail-recurses (r:'prod') for the // next. Inherits its parent's node (the productions array) and // appends to it in `bc` once its `alts` child has returned. + // Production header is `IDENT =` — a bareword rule name followed + // by the `=` definition operator. prod: { open: [ + // Standalone definition: name = alts + { + s: '#TX #DEF', + a: (r: Rule) => { + r.u.name = r.o[0].val + r.u.incremental = false + }, + p: 'alts', + }, + // Incremental alternatives: name =/ alts { - s: '#LT #TX #GT #DEF', - a: (r: Rule) => { r.u.name = r.o[1].val }, + s: '#TX #DEFA', + a: (r: Rule) => { + r.u.name = r.o[0].val + r.u.incremental = true + }, p: 'alts', }, ], close: [ - { s: '#LT', b: 1, r: 'prod' }, + // A TX followed by `=` or `=/` means the next production has + // begun — back up 2 tokens so a fresh `prod` invocation sees + // them. + { s: '#TX #DEF', b: 2, r: 'prod' }, + { s: '#TX #DEFA', b: 2, r: 'prod' }, { b: 1 }, ], bc: (r) => { if (r.child && r.child.node !== undefined) { - r.node.push({ name: r.u.name, alts: r.child.node }) + const prod: any = { name: r.u.name, alts: r.child.node } + if (r.u.incremental) prod.incremental = true + r.node.push(prod) } }, }, - // A list of alternative sequences separated by `|`. Owns its own - // array (`bo` resets it) and pushes each seq result in `bc`. + // A list of alternative sequences separated by `/` (ABNF + // alternation). Owns its own array (`bo` resets it) and pushes + // each seq result in `bc`. alts: { bo: (r) => { r.node = [] }, open: [{ p: 'seq' }], close: [ - { s: '#PIPE', p: 'seq' }, + { s: '#ALT', p: 'seq' }, { b: 1 }, ], bc: (r) => { @@ -133,179 +231,232 @@ const bnfRules: Record< }, }, - // A (possibly empty) sequence of elements. The 4-token lookahead - // `#LT #TX #GT #DEF` detects a following production boundary and - // bails out without consuming the tokens; a plain `#LT #TX #GT` - // match (tried second so it loses to the longer alt) is a + // A (possibly empty) sequence of elements. The 2-token lookahead + // `#TX #DEF` detects a following production boundary and bails + // out without consuming the tokens; a plain `#TX` at the leading + // position (tried later so the longer alt wins) is a rule // reference inside the current sequence. seq: { bo: (r) => { r.node = [] }, open: [ - { s: '#LT #TX #GT #DEF', b: 4, g: 'end' }, - { s: '#PIPE', b: 1, g: 'end' }, + { s: '#TX #DEF', b: 2, g: 'end' }, + { s: '#TX #DEFA', b: 2, g: 'end' }, + { s: '#ALT', b: 1, g: 'end' }, { s: '#ZZ', b: 1, g: 'end' }, { s: '#RP', b: 1, g: 'end' }, - // Listing element-starter tokens in `s:` here ensures each one - // appears in the rule's tcol so the match-matcher (for `#RX`) - // is allowed to fire when the source is lexed. - { s: '#LT', b: 1, p: 'elem' }, + { s: '#CB', b: 1, g: 'end' }, + // Listing element-starter tokens in `s:` here ensures the + // tcol-driven matcher considers each one when lexing. { s: '#ST', b: 1, p: 'elem' }, - { s: '#RX', b: 1, p: 'elem' }, + { s: '#NV', b: 1, p: 'elem' }, + { s: '#SS', b: 1, p: 'elem' }, + { s: '#SI', b: 1, p: 'elem' }, { s: '#TX', b: 1, p: 'elem' }, { s: '#LP', b: 1, p: 'elem' }, + { s: '#OB', b: 1, p: 'elem' }, + { s: '#STAR', b: 1, p: 'elem' }, + { s: '#NUM', b: 1, p: 'elem' }, { p: 'elem' }, ], close: [ - { s: '#LT #TX #GT #DEF', b: 4, g: 'end' }, - { s: '#PIPE', b: 1, g: 'end' }, + { s: '#TX #DEF', b: 2, g: 'end' }, + { s: '#TX #DEFA', b: 2, g: 'end' }, + { s: '#ALT', b: 1, g: 'end' }, { s: '#ZZ', b: 1, g: 'end' }, { s: '#RP', b: 1, g: 'end' }, - { s: '#LT', b: 1, p: 'elem' }, + { s: '#CB', b: 1, g: 'end' }, { s: '#ST', b: 1, p: 'elem' }, - { s: '#RX', b: 1, p: 'elem' }, + { s: '#NV', b: 1, p: 'elem' }, + { s: '#SS', b: 1, p: 'elem' }, + { s: '#SI', b: 1, p: 'elem' }, { s: '#TX', b: 1, p: 'elem' }, { s: '#LP', b: 1, p: 'elem' }, + { s: '#OB', b: 1, p: 'elem' }, + { s: '#STAR', b: 1, p: 'elem' }, + { s: '#NUM', b: 1, p: 'elem' }, { b: 1 }, ], }, - // One element: an atom (``, string, bare ident, or a - // parenthesised group of alternatives), optionally followed by a - // postfix operator (`?`, `*`, `+`). The atom is stashed on - // `r.u.atom` so the close state can wrap it before pushing onto the - // parent seq's node array. For groups, the atom is synthesised from - // the child `alts` rule's node in the close state. + // One element: an optional ABNF repetition prefix (`*A`, `1*A`, + // `m*nA`, `*nA`, `m*A`, `nA`) followed by an atom. The prefix is + // matched up front, stored on `r.u.min`/`r.u.max`; then `atom` is + // pushed to parse the actual element body, whose result is wrapped + // into an AST node and appended to the parent seq's array in close. elem: { + bo: (r) => { r.u.min = 1; r.u.max = 1 }, open: [ + // NUM '*' NUM — bounded repetition, followed by the atom + // itself (listed via the ATOM tokenset so every atom-starter + // tin — including `#NV` — is in tcol for this position). { - s: '#LT #TX #GT', - a: (r: Rule) => { - r.u.atom = { kind: 'ref', name: r.o[1].val } - }, - }, - { - s: '#ST', + s: '#NUM #STAR #NUM #ATOM', + b: 1, a: (r: Rule) => { - r.u.atom = { kind: 'term', literal: r.o[0].val } + r.u.min = parseInt(r.o[0].src, 10) + r.u.max = parseInt(r.o[2].src, 10) }, + p: 'atom', }, + // NUM '*' — at-least-NUM repetition followed by an atom. { - s: '#RX', + s: '#NUM #STAR #ATOM', + b: 1, a: (r: Rule) => { - // r.o[0].src is the raw text `/pattern/flags`. Split it. - const raw = r.o[0].src as string - const lastSlash = raw.lastIndexOf('/') - r.u.atom = { - kind: 'regex', - pattern: raw.slice(1, lastSlash), - flags: raw.slice(lastSlash + 1), - } + r.u.min = parseInt(r.o[0].src, 10) + r.u.max = Infinity }, + p: 'atom', }, + // '*' NUM — at-most-NUM repetition. { - s: '#TX', + s: '#STAR #NUM #ATOM', + b: 1, a: (r: Rule) => { - r.u.atom = { kind: 'ref', name: r.o[0].val } + r.u.min = 0 + r.u.max = parseInt(r.o[1].src, 10) }, + p: 'atom', }, + // '*' — zero-or-more. { - s: '#LP', - a: (r: Rule) => { r.u.group = true }, - p: 'alts', + s: '#STAR #ATOM', + b: 1, + a: (r: Rule) => { r.u.min = 0; r.u.max = Infinity }, + p: 'atom', }, - ], - close: [ - // Group followed by postfix — two-token combos, tried first so - // they beat the one-token RP / postfix alts below. Guarded with - // a condition to avoid matching a stray `)` in the simple-atom - // case. + // NUM — exact repetition count. { - s: '#RP #QM', - c: (r: Rule) => r.u.group === true, + s: '#NUM #ATOM', + b: 1, a: (r: Rule) => { - r.node.push({ - kind: 'opt', - inner: { kind: 'group', alts: r.child.node }, - }) + const n = parseInt(r.o[0].src, 10) + r.u.min = n + r.u.max = n }, + p: 'atom', }, - { - s: '#RP #STAR', - c: (r: Rule) => r.u.group === true, - a: (r: Rule) => { - r.node.push({ - kind: 'star', - inner: { kind: 'group', alts: r.child.node }, - }) - }, + // No prefix — push atom directly (min = max = 1). + { p: 'atom' }, + ], + close: [{ + // Wrap the returned atom (r.child.node) based on r.u.min/max + // and append to the parent seq's array. + a: (r: Rule) => { + const item = r.child.node + const { min, max } = r.u + if (min === 1 && max === 1) { + r.node.push(item) + } else if (min === 0 && max === Infinity) { + r.node.push({ kind: 'star', inner: item }) + } else if (min === 1 && max === Infinity) { + r.node.push({ kind: 'plus', inner: item }) + } else if (min === 0 && max === 1) { + r.node.push({ kind: 'opt', inner: item }) + } else { + r.node.push({ kind: 'rep', min, max, inner: item }) + } }, + }], + }, + + // The atom body — a bareword ref, quoted-string terminal, + // parenthesised group, or bracketed optional. Sets its OWN r.node + // to the AST element so the enclosing `elem` rule can read it + // from `r.child.node` in its close state. + atom: { + bo: (r) => { r.node = undefined }, + open: [ + // Case-sensitive string: %s"foo" { - s: '#RP #PLUS', - c: (r: Rule) => r.u.group === true, + s: '#SS #ST', a: (r: Rule) => { - r.node.push({ - kind: 'plus', - inner: { kind: 'group', alts: r.child.node }, - }) + r.node = { + kind: 'term', + literal: r.o[1].val, + caseSensitive: true, + } }, }, - // Plain group (no postfix). + // Case-insensitive string: %i"foo" (same as bare "foo" below, + // but spelled explicitly). { - s: '#RP', - c: (r: Rule) => r.u.group === true, + s: '#SI #ST', a: (r: Rule) => { - r.node.push({ kind: 'group', alts: r.child.node }) + r.node = { kind: 'term', literal: r.o[1].val } }, }, - // Simple atom + postfix. + // Bare quoted string — case-insensitive per ABNF default. { - s: '#QM', + s: '#ST', a: (r: Rule) => { - r.node.push({ kind: 'opt', inner: r.u.atom }) + r.node = { kind: 'term', literal: r.o[0].val } }, }, { - s: '#STAR', + s: '#NV', a: (r: Rule) => { - r.node.push({ kind: 'star', inner: r.u.atom }) + r.node = parseNumericValue(r.o[0].src as string) }, }, { - s: '#PLUS', + s: '#TX', a: (r: Rule) => { - r.node.push({ kind: 'plus', inner: r.u.atom }) + r.node = { kind: 'ref', name: r.o[0].val } }, }, - // Simple atom, no postfix. These alts declare the "next atom" - // tokens so the lexer — which consults tcol to decide which - // matchers to try — emits them as their proper types (in - // particular `#RX`) rather than as generic text. - { - s: '#LT', b: 1, - a: (r: Rule) => { r.node.push(r.u.atom) }, - }, { - s: '#ST', b: 1, - a: (r: Rule) => { r.node.push(r.u.atom) }, - }, - { - s: '#RX', b: 1, - a: (r: Rule) => { r.node.push(r.u.atom) }, + s: '#LP', + a: (r: Rule) => { r.u.groupKind = 'group' }, + p: 'alts', }, { - s: '#TX', b: 1, - a: (r: Rule) => { r.node.push(r.u.atom) }, + s: '#OB', + a: (r: Rule) => { r.u.groupKind = 'opt' }, + p: 'alts', }, + ], + close: [ { - s: '#LP', b: 1, - a: (r: Rule) => { r.node.push(r.u.atom) }, + s: '#RP', + c: (r: Rule) => r.u.groupKind === 'group', + a: (r: Rule) => { + r.node = { kind: 'group', alts: r.child.node } + }, }, - // Final fallback for end-of-sequence markers (`|`, `)`, `#ZZ`, - // or a production boundary). { - b: 1, - a: (r: Rule) => { r.node.push(r.u.atom) }, + s: '#CB', + c: (r: Rule) => r.u.groupKind === 'opt', + a: (r: Rule) => { + r.node = { + kind: 'opt', + inner: { kind: 'group', alts: r.child.node }, + } + }, }, + // For simple atoms (string/ref), r.node is already set by + // open; we want to pop without consuming the next token. + // List every token that can legitimately follow an atom so + // the lexer's tcol-driven match-matcher emits #NUM, #STAR, + // and friends as their proper types here — otherwise the + // default number-matcher would lex `1` as #NR and the + // enclosing seq.close wouldn't recognise the digit as the + // start of a repetition prefix. + { s: '#TX', b: 1 }, + { s: '#ST', b: 1 }, + { s: '#NV', b: 1 }, + { s: '#SS', b: 1 }, + { s: '#SI', b: 1 }, + { s: '#NUM', b: 1 }, + { s: '#STAR', b: 1 }, + { s: '#LP', b: 1 }, + { s: '#OB', b: 1 }, + { s: '#RP', b: 1 }, + { s: '#CB', b: 1 }, + { s: '#ALT', b: 1 }, + { s: '#DEF', b: 1 }, + { s: '#ZZ', b: 1 }, + { b: 1 }, ], }, } @@ -324,30 +475,64 @@ function getBnfParser(): (src: string) => BnfProduction[] { rule: { start: 'bnf' }, fixed: { token: { - // Clear JSON-oriented defaults — `[` and friends would - // otherwise pre-empt the `#RX` regex matcher for - // `/[class]/` terminals. - '#OB': null, - '#CB': null, + // Clear JSON-oriented defaults we're not using so `:`, `,` + // and `{` have no special meaning inside BNF source. '#OS': null, '#CS': null, '#CL': null, '#CA': null, - '#LT': '<', - '#GT': '>', - '#DEF': '::=', - '#PIPE': '|', - '#QM': '?', + // Re-map `#OB` / `#CB` from JSON's `{` / `}` to ABNF's + // `[` / `]` optional-group brackets. + '#OB': '[', + '#CB': ']', + '#DEF': '=', + // `=/` — ABNF's incremental-alternatives operator. Longer + // than `=`, so jsonic's longest-match-wins fixed matcher + // tries it first. + '#DEFA': '=/', + '#ALT': '/', '#STAR': '*', - '#PLUS': '+', '#LP': '(', '#RP': ')', }, }, match: { - // Regex terminals inside BNF source: /pattern/flags. token: { - '#RX': /^\/(?:[^\/\\]|\\.)*\/[a-z]*/, + // ABNF repetition counts: decimal integers. + '#NUM': /^[0-9]+/, + // ABNF numeric value notation: + // %xNN single hex code point + // %dNN single decimal code point + // %bNN single binary code point + // %xNN-NN hex range + // %xNN.NN.NN concatenated hex code points (= string) + // Digits are permissive (hex covers the decimal / binary + // subsets); `parseNumericValue` re-validates against the + // actual base. + '#NV': /^%[xdbXDB][0-9a-fA-F]+(?:[-.][0-9a-fA-F]+)*/, + // `%s` / `%i` prefixes on a quoted string. The lookahead + // requires `"` so they don't steal the `%` of `%xNN`. + '#SS': /^%[sS](?=")/, + '#SI': /^%[iI](?=")/, + }, + }, + tokenSet: { + // Tokens that can legitimately open an atom. Declaring this + // as a set lets elem.open use `#ATOM` inside its `s:` patterns + // — that way the tcol at the atom-starter position includes + // every matcher tin (notably #NV), so the lexer doesn't fall + // through to #TX when the actual atom is `%xNN`. + ATOM: ['#ST', '#NV', '#TX', '#LP', '#OB', '#SS', '#SI'], + }, + comment: { + // ABNF uses `;` to start a line comment. Override jsonic's + // default `hash` definition (which used `#`) and disable the + // other comment styles so `//` and `/* */` aren't confused + // with the alternation operator. + def: { + hash: { line: true, start: ';', lex: true, eatline: false }, + slash: null as any, + multi: null as any, }, }, }) @@ -378,72 +563,247 @@ function getBnfParser(): (src: string) => BnfProduction[] { // `term` and `ref`. Each `X?`, `X*`, `X+` occurrence is replaced by a // reference to a newly-generated helper production that expresses the // same language in plain BNF. -// Rewrite direct left recursion (P → P α₁ | … | P αₙ | β₁ | … | βₘ) -// into the equivalent right-recursive form -// P → (β₁ | … | βₘ) (α₁ | … | αₙ)* +// Eliminate left recursion — both direct (P → P α) and indirect +// (P → Q α, Q → P β) — via Paull's algorithm. +// +// Order the productions, and for each A_i walk back over A_1..A_{i-1} +// inlining any leading reference into A_i's alternatives. Once the +// only remaining leading self-reference on A_i is direct, rewrite to +// the iterative form +// P → (β_1 | … | β_m) (α_1 | … | α_n)* // which jsonic's push-down parser can execute without re-entering P -// at the same source position. Each non-recursive alternative -// becomes a "seed", and the body following the leading P-reference -// in each recursive alternative becomes a star-iterated tail. +// at the same source position. // -// Indirect cycles (P → Q α, Q → P β) are *not* rewritten — the doc's -// runtime guard via `r.k.seenPAt` would be needed for those, and is -// out of scope for this pass. If detected they're flagged so the -// emitter doesn't silently fall through. +// The substitution step can duplicate alternatives, so pathological +// grammars will enlarge — caller is expected to keep the grammar +// reasonably small (this is a first-step converter, not a full +// toolchain). function eliminateLeftRecursion(grammar: BnfGrammar): BnfGrammar { - const out: BnfProduction[] = [] - for (const prod of grammar.productions) { - const recursive: BnfSequence[] = [] - const seeds: BnfSequence[] = [] - for (const alt of prod.alts) { - if ( - alt.length > 0 && - alt[0].kind === 'ref' && - alt[0].name === prod.name - ) { - // Strip the leading self-reference; the rest is the - // operator/tail to iterate. - recursive.push(alt.slice(1)) - } else { - seeds.push(alt) + const originalOrder = grammar.productions.map((p) => p.name) + + // Order productions so that rules referenced at a leading position + // are processed before the rules that reference them. Paull's + // substitution inlines A_j's alts into A_i for j < i, so putting + // dependencies first is what makes nullable-prefixed hidden left + // recursion reachable by the substitution step. + // + // Note: substitution here always runs, even for cycle-free + // grammars. The reason is pragmatic rather than theoretical — + // populating tcol from multi-token altPrefixes (needed so the + // lexer's regex matchers fire with the right tin in nested + // contexts) requires the full inlined shape. A future refactor + // could compute tcol from the un-substituted grammar and only + // apply Paull's to the cyclic SCCs, which would preserve more + // named-rule structure in the emitted AST. + let prods = topoOrderForPaull( + grammar.productions.map((p) => ({ + name: p.name, + alts: p.alts.map((a) => a.slice()), + nodeKind: p.nodeKind, + })), + ) + + for (let i = 0; i < prods.length; i++) { + // For each earlier production A_j, inline any alternative of + // A_i whose leading element is a reference to A_j. + for (let j = 0; j < i; j++) { + prods[i] = substituteLeadingRef(prods[i], prods[j]) + } + prods[i] = eliminateDirectLeftRec(prods[i]) + } + + // Restore the caller's declared order, so the start rule still + // ends up first (and the user sees their rule names in a + // recognisable order when inspecting the spec). + const byName = new Map(prods.map((p) => [p.name, p])) + const ordered: BnfProduction[] = [] + for (const name of originalOrder) { + const p = byName.get(name) + if (p) { ordered.push(p); byName.delete(name) } + } + // Any generated productions created during substitution (none in + // the current implementation) would fall through here. + for (const p of byName.values()) ordered.push(p) + + return { productions: ordered } +} + + +// Tarjan-flavoured SCC scan over the leading-reference graph: +// returns the names of productions that participate in at least one +// cycle (self-loop or longer). Used to scope Paull's substitution to +// only the rules that actually need it. +function findLeadingRefCycleMembers(prods: BnfProduction[]): Set { + const byName = new Map(prods.map((p) => [p.name, p])) + const leadingRefs = (p: BnfProduction): string[] => { + const out: string[] = [] + for (const alt of p.alts) { + if (alt.length === 0) continue + const first = alt[0] + if (first.kind === 'ref' && byName.has(first.name)) out.push(first.name) + } + return out + } + + // Tarjan's SCC algorithm. + let index = 0 + const stack: string[] = [] + const onStack = new Set() + const indices = new Map() + const lowlinks = new Map() + const cyclic = new Set() + + function strongConnect(name: string) { + indices.set(name, index) + lowlinks.set(name, index) + index++ + stack.push(name) + onStack.add(name) + + const prod = byName.get(name) + if (prod) { + for (const target of leadingRefs(prod)) { + if (!indices.has(target)) { + strongConnect(target) + lowlinks.set(name, Math.min(lowlinks.get(name)!, lowlinks.get(target)!)) + } else if (onStack.has(target)) { + lowlinks.set(name, Math.min(lowlinks.get(name)!, indices.get(target)!)) + } } } - if (recursive.length === 0) { - out.push(prod) - continue + if (lowlinks.get(name) === indices.get(name)) { + // Pop the SCC. If it has more than one member, or it's a + // single member with a self-loop, mark as cyclic. + const scc: string[] = [] + let w: string + do { + w = stack.pop() as string + onStack.delete(w) + scc.push(w) + } while (w !== name) + const isCycle = + scc.length > 1 || + (scc.length === 1 && leadingRefs(byName.get(scc[0])!).includes(scc[0])) + if (isCycle) for (const n of scc) cyclic.add(n) } - if (seeds.length === 0) { - throw new Error( - `bnf: rule '${prod.name}' is purely left-recursive ` + - `(no seed alternative); cannot eliminate`) + } + + for (const p of prods) { + if (!indices.has(p.name)) strongConnect(p.name) + } + return cyclic +} + + +// Topological order over the "leading-position reference" graph: +// an edge A → B exists when A has at least one alternative whose +// first element is a reference to B. Cycles are preserved as-is +// (Paull's handles them via the substitution + direct-LR rewrite). +function topoOrderForPaull(prods: BnfProduction[]): BnfProduction[] { + const byName = new Map(prods.map((p) => [p.name, p])) + const colour = new Map() // 0 unseen, 1 in-progress, 2 done + const order: BnfProduction[] = [] + + function visit(name: string) { + const c = colour.get(name) ?? 0 + if (c !== 0) return // already seen or on the current path + colour.set(name, 1) + const p = byName.get(name) + if (p) { + for (const alt of p.alts) { + if (alt.length > 0 && alt[0].kind === 'ref' && byName.has(alt[0].name)) { + visit(alt[0].name) + } + } + colour.set(name, 2) + order.push(p) + } else { + colour.set(name, 2) } - for (const tail of recursive) { - if (tail.length === 0) { - // P → P with nothing else would loop forever even after - // rewriting (we'd get `P → seed ε*` which is just P → seed). - throw new Error( - `bnf: rule '${prod.name}' has a trivial left-recursive ` + - `alternative (P ::= P) which cannot be desugared`) + } + + for (const p of prods) visit(p.name) + return order +} + + +// For every alternative of `target` that begins with a ref to +// `source`, replace that alt with |source.alts| copies — each one +// with the leading source-ref expanded to one of source's alts. +function substituteLeadingRef( + target: BnfProduction, + source: BnfProduction, +): BnfProduction { + const newAlts: BnfSequence[] = [] + for (const alt of target.alts) { + if ( + alt.length > 0 && + alt[0].kind === 'ref' && + alt[0].name === source.name + ) { + const tail = alt.slice(1) + for (const srcAlt of source.alts) { + newAlts.push([...srcAlt, ...tail]) } + } else { + newAlts.push(alt) } + } + return { name: target.name, alts: newAlts, nodeKind: target.nodeKind } +} + + +// Rewrite a single production's direct left recursion to its +// iterative equivalent. Equivalent to the previous version of +// `eliminateLeftRecursion` but scoped to one production. +function eliminateDirectLeftRec(prod: BnfProduction): BnfProduction { + const recursive: BnfSequence[] = [] + const seeds: BnfSequence[] = [] + for (const alt of prod.alts) { + if ( + alt.length > 0 && + alt[0].kind === 'ref' && + alt[0].name === prod.name + ) { + recursive.push(alt.slice(1)) + } else { + seeds.push(alt) + } + } + + // A trivial recursive alt `[P]` (P ::= P, nothing else) would + // derive P from P with no progress — semantically a no-op. Drop + // them silently, since nullable-prefix expansion in Paull's can + // legitimately produce them and erroring would hide a legal + // grammar. + const nonTrivialRecursive = recursive.filter((t) => t.length > 0) + if (nonTrivialRecursive.length === 0) { + // Either no recursion at all, or only trivial self-refs — keep + // just the seeds. + return { name: prod.name, alts: seeds, nodeKind: prod.nodeKind } + } + if (seeds.length === 0) { + throw new Error( + `bnf: rule '${prod.name}' is purely left-recursive ` + + `(no seed alternative); cannot eliminate`) + } - const seedElement: BnfElement = - seeds.length === 1 && seeds[0].length === 1 - ? seeds[0][0] - : { kind: 'group', alts: seeds } + const seedElement: BnfElement = + seeds.length === 1 && seeds[0].length === 1 + ? seeds[0][0] + : { kind: 'group', alts: seeds } - const tailInner: BnfElement = - recursive.length === 1 && recursive[0].length === 1 - ? recursive[0][0] - : { kind: 'group', alts: recursive } + const tailInner: BnfElement = + nonTrivialRecursive.length === 1 && nonTrivialRecursive[0].length === 1 + ? nonTrivialRecursive[0][0] + : { kind: 'group', alts: nonTrivialRecursive } - out.push({ - name: prod.name, - alts: [[seedElement, { kind: 'star', inner: tailInner }]], - }) + return { + name: prod.name, + alts: [[seedElement, { kind: 'star', inner: tailInner }]], + nodeKind: prod.nodeKind, } - return { productions: out } } @@ -477,7 +837,7 @@ function desugar(grammar: BnfGrammar): BnfGrammar { // then emit a helper production whose body is those alts. const innerAlts = el.alts.map((a) => desugarAlt(a)) const name = freshName('group') - extra.push({ name, alts: innerAlts }) + extra.push({ name, alts: innerAlts, nodeKind: 'helper' }) return { kind: 'ref', name } } @@ -490,37 +850,93 @@ function desugar(grammar: BnfGrammar): BnfGrammar { if (el.kind === 'opt') { // H ::= inner | (empty) const name = freshName('opt_' + hint) - extra.push({ name, alts: [[inner], []] }) + extra.push({ name, alts: [[inner], []], nodeKind: 'helper' }) return { kind: 'ref', name } } if (el.kind === 'star') { - // H ::= inner H | (empty) + // H = inner H / (empty) const name = freshName('star_' + hint) const selfRef: BnfElement = { kind: 'ref', name } - extra.push({ name, alts: [[inner, selfRef], []] }) + extra.push({ name, alts: [[inner, selfRef], []], nodeKind: 'helper' }) return { kind: 'ref', name } } - // plus: H ::= inner Tail where Tail ::= inner Tail | (empty) - const tailName = freshName('star_' + hint) - const plusName = freshName('plus_' + hint) - const tailRef: BnfElement = { kind: 'ref', name: tailName } - extra.push({ - name: tailName, - alts: [[inner, tailRef], []], - }) - extra.push({ - name: plusName, - alts: [[inner, tailRef]], - }) - return { kind: 'ref', name: plusName } + if (el.kind === 'plus') { + // H = inner Tail where Tail = inner Tail / (empty) + const tailName = freshName('star_' + hint) + const plusName = freshName('plus_' + hint) + const tailRef: BnfElement = { kind: 'ref', name: tailName } + extra.push({ + name: tailName, + alts: [[inner, tailRef], []], + nodeKind: 'helper', + }) + extra.push({ + name: plusName, + alts: [[inner, tailRef]], + nodeKind: 'helper', + }) + return { kind: 'ref', name: plusName } + } + + // ABNF m*n bounded repetition. Desugars to a concatenation of + // `min` mandatory copies of the inner element followed by a + // tail that accepts up to `(max - min)` more. + // m*n A => A{m} [A[A[A...[A]]]] (nested optionals) + // m* A => A{m} *A (mandatory prefix + star) + // *n A => [A [A ... [A]]] (n nested optionals) + // The helper's single alt has `min` repetitions of inner, then + // either a star-helper for (min, ∞) or `max - min` nested + // optionals for a finite range. + const { min, max } = el + const repName = freshName('rep_' + hint) + const repAlt: BnfSequence = [] + for (let i = 0; i < min; i++) repAlt.push(inner) + + if (max === Infinity) { + // Tail: unbounded star of inner. + const tailStarName = freshName('star_' + hint) + const tailStarRef: BnfElement = { kind: 'ref', name: tailStarName } + extra.push({ + name: tailStarName, + alts: [[inner, tailStarRef], []], + nodeKind: 'helper', + }) + repAlt.push(tailStarRef) + } else { + // Nest (max - min) optionals: [A [A [A ...]]]. + let nested: BnfSequence = [] + for (let i = 0; i < max - min; i++) { + // Wrap current `nested` into an optional and prepend `inner`. + if (nested.length === 0) { + nested = [{ kind: 'opt', inner: { kind: 'group', alts: [[inner]] } }] + } else { + nested = [{ + kind: 'opt', + inner: { kind: 'group', alts: [[inner, ...nested]] }, + }] + } + } + repAlt.push(...nested) + } + + extra.push({ name: repName, alts: [desugarAlt(repAlt)], nodeKind: 'helper' }) + return { kind: 'ref', name: repName } } - const rewritten: BnfProduction[] = grammar.productions.map((p) => ({ - name: p.name, - alts: p.alts.map(desugarAlt), - })) + const rewritten: BnfProduction[] = grammar.productions.map((p) => { + const out: BnfProduction = { + name: p.name, + alts: p.alts.map(desugarAlt), + nodeKind: p.nodeKind, + } + // Probe-dispatch flags survive desugar unchanged — the emitter + // routes around the standard alt-compilation path for these. + if (p.probeDispatch) out.probeDispatch = p.probeDispatch + if (p.probeHelper) out.probeHelper = p.probeHelper + return out + }) return { productions: [...rewritten, ...extra] } } @@ -567,7 +983,474 @@ function parseBnf(src: string): BnfGrammar { if (!Array.isArray(productions) || productions.length === 0) { throw new BnfParseError('bnf: no productions found') } - return { productions } + const merged = mergeIncrementals(productions) + return { productions: withCoreRules(merged) } +} + + +// RFC 5234 Appendix B.1 core rules. Parsed lazily on first use +// and spliced into any user grammar that references them but +// doesn't define them locally. +const CORE_RULES_ABNF = ` +ALPHA = %x41-5A / %x61-7A +BIT = "0" / "1" +CHAR = %x01-7F +CR = %x0D +LF = %x0A +CRLF = CR LF +CTL = %x00-1F / %x7F +DIGIT = %x30-39 +DQUOTE = %x22 +HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F" +HTAB = %x09 +OCTET = %x00-FF +SP = %x20 +VCHAR = %x21-7E +WSP = SP / HTAB +` + +let _coreRules: Map | null = null + +function getCoreRules(): Map { + if (_coreRules) return _coreRules + const parser = getBnfParser() + const raw = parser(CORE_RULES_ABNF) as BnfProduction[] + // Core rules flatten to `src` in the output AST — they're + // character-class bricks, not structural nodes users want to see + // one-per-matched-character. + for (const p of raw) p.nodeKind = 'core' + _coreRules = new Map(raw.map((p) => [p.name, p])) + return _coreRules +} + + +function refsIn(alt: BnfSequence, out: Set): void { + for (const el of alt) { + if (el.kind === 'ref') out.add(el.name) + else if (el.kind === 'opt' || el.kind === 'star' || + el.kind === 'plus' || el.kind === 'rep') { + refsIn([el.inner], out) + } else if (el.kind === 'group') { + for (const a of el.alts) refsIn(a, out) + } + } +} + + +// Add each RFC 5234 core rule that the user's grammar references +// but doesn't define locally. Resolution is transitive: if the +// user mentions HEXDIG, DIGIT is pulled in too. User definitions +// always win — a local `DIGIT = …` is left untouched. +function withCoreRules(user: BnfProduction[]): BnfProduction[] { + const core = getCoreRules() + const defined = new Set(user.map((p) => p.name)) + const needed = new Set() + + const scan = (prods: BnfProduction[]) => { + for (const p of prods) { + for (const alt of p.alts) refsIn(alt, needed) + } + } + + scan(user) + const out: BnfProduction[] = [] + // Transitively add core rules, in declaration order. + let added = true + while (added) { + added = false + for (const [name, prod] of core) { + if (defined.has(name)) continue + if (!needed.has(name)) continue + defined.add(name) + out.push(prod) + scan([prod]) + added = true + } + } + return [...user, ...out] +} + + +// Fold every `name =/ alt` production into the earlier production +// with the same name by appending its alternatives. Throws if an +// incremental references a name that hasn't been defined yet — ABNF +// requires the base production to appear first. +function mergeIncrementals(prods: BnfProduction[]): BnfProduction[] { + const out: BnfProduction[] = [] + const byName = new Map() + for (const p of prods) { + if (p.incremental) { + const base = byName.get(p.name) + if (!base) { + throw new BnfParseError( + `bnf: '${p.name} =/ …' has no earlier '${p.name} = …' to extend`, + ) + } + base.alts.push(...p.alts) + continue + } + // Strip the (absent) flag on a cleanly-written production so + // downstream code never sees it. + const clean: BnfProduction = { name: p.name, alts: p.alts } + if (p.nodeKind) clean.nodeKind = p.nodeKind + out.push(clean) + byName.set(p.name, clean) + } + return out +} + + +// -- Probe-dispatch analyser + rewriter ----------------------------- +// +// ABNF has a large family of grammars that aren't LL(k) for any +// bounded k. The canonical example is RFC 3986's `authority`: +// +// authority = [ userinfo "@" ] host [ ":" port ] +// userinfo = *( unreserved / pct-encoded / sub-delims / ":" ) +// host = IP-literal / IPv4address / reg-name +// reg-name = *( unreserved / pct-encoded / sub-delims ) +// +// `userinfo` and `reg-name` share a character vocabulary, so a +// FIRST-set dispatcher can't decide which branch the optional +// `[ userinfo "@" ]` belongs to — the disambiguating `@` can be +// arbitrarily far from the start. +// +// For the common pattern `[X D] Y` — an optional group whose body +// ends with a terminal D, followed by a sequence Y whose leading +// terminals overlap with X's — we handle the ambiguity by rewriting +// the rule to a probe+phase-retry dispatcher: +// +// 1. On first entry (phase 0), mark the token position and push a +// failure-proof probe rule that greedily consumes every token +// in the joint vocabulary of X and Y. +// 2. When the probe returns, peek ctx.t[0]: +// D seen → phase = 1 (take the `X D Y` branch) +// D absent → phase = 2 (take the `Y` branch) +// Rewind to the mark and `r:` back into the dispatcher. +// 3. The dispatcher's open has a `c:`-guarded alt for each phase +// that pushes the corresponding committed branch. +// +// The primitives used (`r:`, `k:`, `c:`, `ctx.mark`, `ctx.rewind`, +// `ctx.t`) are the same building blocks rules/parser already exposes +// — no new jsonic machinery is needed. + + +// Predicate: element is `[ X D ]` where X is one or more elements +// and D is a terminal literal or a regex terminal. +function isProbeableOpt(el: BnfElement): null | { + xSeq: BnfSequence + disambiguator: BnfElement +} { + if (el.kind !== 'opt') return null + const inner = el.inner + if (inner.kind !== 'group') return null + if (inner.alts.length !== 1) return null + const seq = inner.alts[0] + if (seq.length < 2) return null + const last = seq[seq.length - 1] + if (last.kind !== 'term' && last.kind !== 'regex') return null + return { xSeq: seq.slice(0, -1), disambiguator: last } +} + + +// Union of every terminal reachable by walking an element's subtree, +// following refs transitively. Cycles are broken by the visited set. +// Returns terminals as BnfElements so the caller isn't tied to the +// emitter's token-allocation step. +function collectTerminalVocabElements( + el: BnfElement, + grammar: BnfGrammar, + out: Map, + visited: Set, +): void { + if (el.kind === 'term') { + const k = termKey(el) + if (!out.has(k)) out.set(k, el) + return + } + if (el.kind === 'regex') { + const k = regexKey(el) + if (!out.has(k)) out.set(k, el) + return + } + if (el.kind === 'ref') { + if (visited.has(el.name)) return + visited.add(el.name) + const prod = grammar.productions.find((p) => p.name === el.name) + if (!prod) return + for (const alt of prod.alts) + for (const sub of alt) + collectTerminalVocabElements(sub, grammar, out, visited) + return + } + if (el.kind === 'opt' || el.kind === 'star' || el.kind === 'plus' || + el.kind === 'rep') { + collectTerminalVocabElements(el.inner, grammar, out, visited) + return + } + if (el.kind === 'group') { + for (const alt of el.alts) + for (const sub of alt) + collectTerminalVocabElements(sub, grammar, out, visited) + return + } +} + + +function collectSeqVocabElements( + seq: BnfSequence, + grammar: BnfGrammar, +): Map { + const out = new Map() + const visited = new Set() + for (const el of seq) + collectTerminalVocabElements(el, grammar, out, visited) + return out +} + + +function mapsOverlap(a: Map, b: Map): boolean { + for (const x of a.keys()) if (b.has(x)) return true + return false +} + + +// Rewrite every ambiguous `[X D] Y` subsequence in `grammar` into a +// probe-dispatch pattern. The grammar at this point still has `opt`, +// `group`, `star`, `plus`, `rep` sugar — intentionally, since that's +// where the pattern is easy to recognise. Runs BEFORE token +// allocation; probe metadata stores BnfElements, and the emitter +// resolves them to token names at emit time. +function rewriteProbeDispatches(grammar: BnfGrammar): BnfGrammar { + const reports: AmbiguityReport[] = grammar.ambiguities ?? [] + const extra: BnfProduction[] = [] + const used = new Set(grammar.productions.map((p) => p.name)) + + function freshName(hint: string): string { + let name = hint + let i = 1 + while (used.has(name)) { name = hint + i; i++ } + used.add(name) + return name + } + + const rewritten: BnfProduction[] = [] + + for (const prod of grammar.productions) { + let newAlts: BnfSequence[] = [] + let touched = false + for (let altIdx = 0; altIdx < prod.alts.length; altIdx++) { + const alt = prod.alts[altIdx] + let resultAlt: BnfSequence = [] + for (let i = 0; i < alt.length; i++) { + const el = alt[i] + const info = isProbeableOpt(el) + if (!info) { resultAlt.push(el); continue } + const ySeq = alt.slice(i + 1) + if (ySeq.length === 0) { + // `[X D]` is the last thing in the alt — nothing follows, so + // there's nothing to disambiguate against. Standard emit. + resultAlt.push(el); continue + } + const xVocab = collectSeqVocabElements(info.xSeq, grammar) + const yVocab = collectSeqVocabElements(ySeq, grammar) + if (!mapsOverlap(xVocab, yVocab)) { + // The optional's leading tokens don't overlap with the tail's + // leading tokens, so the normal FIRST-based dispatcher can + // decide. No rewrite needed. + resultAlt.push(el); continue + } + + // Joint vocab: union of everything the probe might need to + // consume. Includes the disambiguator, which we then remove so + // the probe stops on it and the peek works. + const vocab = new Map([...xVocab, ...yVocab]) + const d = info.disambiguator + const dKey = d.kind === 'term' ? termKey(d) + : d.kind === 'regex' ? regexKey(d) + : null + if (dKey) vocab.delete(dKey) + + const dispatchName = freshName(`${prod.name}$pd${i}`) + const probeName = freshName(`${dispatchName}$probe`) + const withName = freshName(`${dispatchName}$with`) + const noName = freshName(`${dispatchName}$no`) + + // Synthesise the probe helper. + extra.push({ + name: probeName, + alts: [], + probeHelper: { vocabElements: [...vocab.values()] }, + nodeKind: 'helper', + }) + // Synthesise the committed branches. `with` = X D Y, `no` = Y. + extra.push({ + name: withName, + alts: [[...info.xSeq, info.disambiguator, ...ySeq]], + nodeKind: 'helper', + }) + extra.push({ + name: noName, + alts: [ySeq], + nodeKind: 'helper', + }) + // Synthesise the dispatcher. The `alts` list is a "virtual" + // spec — two ref-only alts — that exists solely to feed + // computeFirstSets the right FIRST/nullable answers (FIRST + // = FIRST(with) ∪ FIRST(no)). The emitter checks + // `probeDispatch` first and emits the phase-retry body + // instead of compiling `alts`. + extra.push({ + name: dispatchName, + alts: [ + [{ kind: 'ref', name: withName }], + [{ kind: 'ref', name: noName }], + ], + probeDispatch: { + probeRule: probeName, + disambiguator: info.disambiguator, + withBranch: withName, + noBranch: noName, + }, + nodeKind: 'helper', + }) + + reports.push({ + rule: prod.name, altIdx, optIdx: i, + reason: `optional prefix shares vocabulary with tail`, + resolved: true, + }) + + resultAlt.push({ kind: 'ref', name: dispatchName }) + // Everything that followed the opt is now inside the dispatcher + // (withBranch / noBranch), so skip the rest of the alt. + i = alt.length + touched = true + } + newAlts.push(resultAlt) + } + if (touched) { + rewritten.push({ + name: prod.name, + alts: newAlts, + nodeKind: prod.nodeKind, + }) + } else { + rewritten.push(prod) + } + } + + return { + productions: [...rewritten, ...extra], + ambiguities: reports, + } +} + + +// Emit a probe helper production. A self-looping rule that matches any +// one of the vocab tokens and restarts; a final empty-alt fallback +// ensures the rule NEVER fails — if the current lookahead isn't in the +// vocab (or we're at #ZZ), the rule pops cleanly. This is the +// failure-proof property the probe pattern relies on. +function emitProbeHelper( + prod: BnfProduction, + tag: string, + ruleSpec: NonNullable, + literals: Map, + regexTokens: Map, +): void { + const elems = prod.probeHelper!.vocabElements + const opens: any[] = [] + for (const el of elems) { + const tok = el.kind === 'term' + ? literals.get(termKey(el)) + : el.kind === 'regex' ? regexTokens.get(regexKey(el)) + : undefined + if (tok) opens.push({ s: tok, r: prod.name, g: tag }) + } + // Empty fallback — pops without consuming anything. Must be last. + opens.push({ g: tag }) + ruleSpec[prod.name] = { open: opens } +} + + +// Emit a probe-dispatch production. Encodes the three-phase retry +// pattern; uses only standard jsonic primitives (r:, p:, c:, k:, +// ctx.mark/rewind/t). +function emitProbeDispatch( + prod: BnfProduction, + tag: string, + ruleSpec: NonNullable, + refs: RefRegistry, + literals: Map, + regexTokens: Map, +): void { + const { probeRule, disambiguator, withBranch, noBranch } = + prod.probeDispatch! + const disambiguatorToken = + disambiguator.kind === 'term' + ? literals.get(termKey(disambiguator)) + : disambiguator.kind === 'regex' + ? regexTokens.get(regexKey(disambiguator)) + : undefined + if (!disambiguatorToken) { + throw new Error( + `bnf: probe-dispatch rule '${prod.name}' has unresolvable ` + + `disambiguator (kind=${disambiguator.kind})`) + } + + const initMark = refs.register((r: Rule, ctx: any) => { + r.k.pd_phase = 0 + r.k.pd_mark = ctx.mark() + }) + + const decide = refs.register((r: Rule, ctx: any) => { + // ctx.t[0] is the first token the probe didn't consume. The probe + // never fails, so this always reflects a real position. + const peek = ctx.t[0] + ctx.rewind(r.k.pd_mark) + const matched = peek && peek.name === disambiguatorToken + r.k.pd_phase = matched ? 1 : 2 + }) + + const bubble = refs.register((r: Rule) => { + if (r.child && r.child.node !== undefined) r.node = r.child.node + }) + + ruleSpec[prod.name] = { + open: [ + // Phase 0 — first pass: mark and probe. + { + c: refs.register((r: Rule) => !r.k.pd_phase), + a: initMark, + p: probeRule, + g: tag, + }, + // Phase 1 — disambiguator was seen: commit to X D Y. + { + c: refs.register((r: Rule) => r.k.pd_phase === 1), + p: withBranch, + g: tag, + }, + // Phase 2 — disambiguator was not seen: commit to Y alone. + { + c: refs.register((r: Rule) => r.k.pd_phase === 2), + p: noBranch, + g: tag, + }, + ], + close: [ + // Phase 0 close: decide phase based on peek, rewind, retry self. + { + c: refs.register((r: Rule) => r.k.pd_phase === 0), + a: decide, + r: prod.name, + g: tag, + }, + // Phase 1 / 2 close: lift the committed child's node up. + { a: bubble, g: tag }, + ], + } } @@ -580,14 +1463,19 @@ function emitGrammarSpec( const tag = opts?.tag ?? 'bnf' // Eliminate direct left recursion (P → P α | β) by rewriting to - // the equivalent right-recursive form P → β (α)*, then flatten any - // EBNF sugar (`?`, `*`, `+`, grouping) into plain BNF. + // the equivalent right-recursive form P → β (α)*, then detect + // ambiguous `[X D] Y` optional-prefix patterns and rewrite them + // into probe-dispatch helpers; finally flatten any EBNF sugar + // (`?`, `*`, `+`, grouping) into plain BNF. grammar = eliminateLeftRecursion(grammar) + grammar = rewriteProbeDispatches(grammar) grammar = desugar(grammar) // Allocate a fixed token for each unique literal, and a match - // token for each unique regex terminal. - const literals = new Map() // literal -> token name + // token for each unique regex terminal. Literals are keyed by + // (literal, effective-case-sensitivity) so a `%s"foo"` (sensitive) + // and a bare `"foo"` (insensitive) produce distinct tokens. + const literals = new Map() // literal-key -> token name const regexTokens = new Map() // regex key -> token name const usedNames = new Set() const fixedTokens: Record = {} @@ -595,22 +1483,62 @@ function emitGrammarSpec( for (const prod of grammar.productions) { for (const alt of prod.alts) { for (const el of alt) { - if (el.kind === 'term' && !literals.has(el.literal)) { - const name = allocTokenName(el.literal, usedNames) - literals.set(el.literal, name) - fixedTokens[name] = el.literal + if (el.kind === 'term') { + const key = termKey(el) + if (!literals.has(key)) { + const name = allocTokenName(el.literal, usedNames) + literals.set(key, name) + if (isEffectivelyCaseSensitive(el)) { + fixedTokens[name] = el.literal + } else { + // Insensitive literal with at least one letter — emit + // as an anchored regex with the `i` flag. Mark the + // matcher `eager$` so jsonic's lexer fires it even + // when the current rule's tcol doesn't list its tin. + const re = new RegExp( + '^' + escapeRegExp(el.literal), + 'i', + ) as RegExp & { eager$?: boolean } + re.eager$ = true + matchTokens[name] = re + } + } } else if (el.kind === 'regex') { const key = regexKey(el) if (!regexTokens.has(key)) { const name = allocTokenName('rx_' + el.pattern, usedNames) regexTokens.set(key, name) - // Anchor at the start of the forward-facing source — the - // lexer calls the matcher with `fwd`, so a leading `^` is - // required to avoid matching mid-stream. - matchTokens[name] = new RegExp( - '^' + el.pattern, - el.flags, - ) + matchTokens[name] = new RegExp('^' + el.pattern, el.flags) + } + } + } + } + // Probe-helper productions store their vocab as BnfElements — + // walk those too so the required tokens get allocated. + if (prod.probeHelper) { + for (const el of prod.probeHelper.vocabElements) { + if (el.kind === 'term') { + const key = termKey(el) + if (!literals.has(key)) { + const name = allocTokenName(el.literal, usedNames) + literals.set(key, name) + if (isEffectivelyCaseSensitive(el)) { + fixedTokens[name] = el.literal + } else { + const re = new RegExp( + '^' + escapeRegExp(el.literal), + 'i', + ) as RegExp & { eager$?: boolean } + re.eager$ = true + matchTokens[name] = re + } + } + } else if (el.kind === 'regex') { + const key = regexKey(el) + if (!regexTokens.has(key)) { + const name = allocTokenName('rx_' + el.pattern, usedNames) + regexTokens.set(key, name) + matchTokens[name] = new RegExp('^' + el.pattern, el.flags) } } } @@ -622,15 +1550,21 @@ function emitGrammarSpec( grammar, literals, regexTokens) const refs = new RefRegistry() - // Emit each production as one or more jsonic rules. Simple - // (single-segment) alternatives fit directly into `rule.open`; - // multi-segment alternatives need a chain of auxiliary rules, one - // per segment after the first; multi-alt productions that mix the - // two use a FIRST-set dispatcher. const ruleSpec: NonNullable = {} for (const prod of grammar.productions) { + if (prod.probeHelper) { + emitProbeHelper(prod, tag, ruleSpec, literals, regexTokens) + continue + } + if (prod.probeDispatch) { + emitProbeDispatch(prod, tag, ruleSpec, refs, literals, regexTokens) + continue + } + // Standard path: a (possibly single-segment) set of alternatives + // compiled to jsonic alts. Simple alts collapse into `open` alts + // directly; multi-segment alts emit a chain of aux rules. emitProduction( - prod, literals, regexTokens, knownRules, tag, ruleSpec, + prod, grammar, literals, regexTokens, knownRules, tag, ruleSpec, firstSets, nullable, refs, ) } @@ -644,15 +1578,14 @@ function emitGrammarSpec( ruleSpec[startWrapper] = { open: [{ p: start, - // Initialise the top-level node so descendants can accumulate. - a: refs.register((r: Rule) => { r.node = [] }), g: tag, }], close: [{ s: '#ZZ', - // Lift the child's result into this rule's node so the value - // returned to the caller of `jsonic(...)` is the tree, not the - // initial empty array. + // Return the start rule's AST node directly — the `__start__` + // wrapper exists only to ensure end-of-source gets consumed. + // The caller of `jsonic(src)` receives the tagged user-rule + // node (e.g. `{rule: 'URI', src, kids: [...]}`) unadorned. a: refs.register((r: Rule) => { if (r.child && r.child.node !== undefined) { r.node = r.child.node @@ -699,7 +1632,7 @@ function segmentize( let current: Segment = { terms: [], ref: null } for (const el of alt) { if (el.kind === 'term') { - current.terms.push(literals.get(el.literal) as string) + current.terms.push(literals.get(termKey(el)) as string) } else if (el.kind === 'regex') { const key = regexKey(el) current.terms.push(regexTokens.get(key) as string) @@ -775,47 +1708,87 @@ class RefRegistry { } +// Output AST node shape. Every rule produces a `{src, kids}` object. +// User-declared rules additionally carry a `rule` tag so callers can +// navigate the tree by grammar-rule name. Core rules (ALPHA, DIGIT +// …) and synthesised helpers (desugar / dispatcher / chain steps) +// leave `rule` unset — their contribution flattens into the +// enclosing user rule (src accumulates; kids extend). +type AstNode = { + rule?: string + src: string + kids: AstNode[] +} + +function mkAstNode(ruleName: string, nodeKind: BnfProduction['nodeKind']): AstNode { + return nodeKind === 'user' + ? { rule: ruleName, src: '', kids: [] } + : { src: '', kids: [] } +} + + function segmentToAlt( seg: Segment, tag: string, refs: RefRegistry, initNode: boolean, + ruleName: string, + nodeKind: BnfProduction['nodeKind'], ): any { const spec: any = { g: tag } if (seg.terms.length > 0) spec.s = seg.terms.join(' ') if (seg.ref) spec.p = seg.ref - // Default tree-building: push each matched terminal's source text - // into the rule's node. The first alt of a head rule also resets - // `r.node` to a fresh array — otherwise a child rule would inherit - // (and then mutate) its parent's node, giving a circular tree. + // Default tree-building: accumulate each matched terminal's source + // text into `r.node.src`. Head alts also allocate a fresh AST node + // so the child doesn't inherit (and then mutate) its parent's. const nterms = seg.terms.length if (nterms > 0 || initNode) { spec.a = refs.register((r: Rule) => { - if (initNode) r.node = [] - for (let i = 0; i < nterms; i++) { - r.node.push(r.o[i].src) - } + if (initNode) r.node = mkAstNode(ruleName, nodeKind) + const n = r.node as AstNode + for (let i = 0; i < nterms; i++) n.src += r.o[i].src }) } return spec } -// Close-state action: append the just-returned child rule's node -// (if any) to the current rule's node array. -function captureChildRef(refs: RefRegistry): `@${string}` { +// Close-state action: merge the just-returned child rule's AST node +// into the current rule's. Tagged children (user rules) get pushed +// verbatim into `kids`; untagged (helper / core) flatten — their +// `src` appends and their `kids` extend. Either way `src` +// concatenates so every ancestor's `.src` reflects everything it +// matched. +function captureChildRef( + refs: RefRegistry, + ruleName: string, + nodeKind: BnfProduction['nodeKind'], +): `@${string}` { return refs.register((r: Rule) => { - if (r.node == null) r.node = [] - if (r.child && r.child.node !== undefined) { - r.node.push(r.child.node) + if (r.node == null) r.node = mkAstNode(ruleName, nodeKind) + const n = r.node as AstNode + const c = r.child && r.child.node as AstNode | undefined + if (c == null) return + if (typeof c !== 'object' || !('src' in c)) { + // Legacy shape — wrap as a leaf kid. + n.kids.push(c as any) + return } + // Defensive: if the child somehow shares this rule's node + // object, skip the merge rather than push a self-reference. (A + // properly-emitted grammar always allocates fresh child nodes.) + if (c === n) return + n.src += c.src + if (c.rule) n.kids.push(c) + else if (Array.isArray(c.kids)) n.kids.push(...c.kids) }) } function emitProduction( prod: BnfProduction, + grammar: BnfGrammar, literals: Map, regexTokens: Map, knownRules: Set, @@ -856,6 +1829,7 @@ function emitProduction( seg.terms.length === 0 && seg.ref != null + const prodKind = prod.nodeKind ?? 'user' if (needsPeek && isRefOnly) { const firstTokens = firstOfAlt( alt, literals, regexTokens, firstSets, nullable) @@ -865,14 +1839,16 @@ function emitProduction( s: tok, b: 1, p: seg.ref, - a: refs.register((r: Rule) => { r.node = [] }), + a: refs.register((r: Rule) => { + r.node = mkAstNode(prod.name, prodKind) + }), g: tag, }) } continue } } - opens.push(segmentToAlt(seg, tag, refs, true)) + opens.push(segmentToAlt(seg, tag, refs, true, prod.name, prodKind)) } const rs: any = { open: opens } @@ -881,7 +1857,10 @@ function emitProduction( // returned child. Add a universal fallback close alt whose // action is a no-op when there was no push. if (prod.alts.some((alt) => alt.some((el) => el.kind === 'ref'))) { - rs.close = [{ a: captureChildRef(refs), g: tag }] + rs.close = [{ + a: captureChildRef(refs, prod.name, prod.nodeKind ?? 'user'), + g: tag, + }] } ruleSpec[prod.name] = rs return @@ -891,7 +1870,7 @@ function emitProduction( // Single-alt, multi-segment: chain rules directly on the // production. emitChain(prod.name, prod.alts[0], literals, regexTokens, tag, - ruleSpec, refs) + ruleSpec, refs, prod.nodeKind ?? 'user') return } @@ -914,28 +1893,65 @@ function emitProduction( continue } - emitChain(implName, alt, literals, regexTokens, tag, ruleSpec, refs) + emitChain(implName, alt, literals, regexTokens, tag, ruleSpec, refs, + 'helper') + + // Fan out this alt into one dispatch entry per concrete token + // sequence it can start with. Up to LOOKAHEAD_K tokens per + // prefix is enough for the grammars this converter targets; a + // ref with multiple alts produces one prefix per sub-alt so + // overlapping FIRST sets between competing alts can still be + // separated by their second (or later) token. + // The dispatcher itself is a user (or helper) rule — it must + // allocate its own AST node on every dispatch alt, otherwise the + // node inherited from the parent via makeRule(ctx, rule.node) + // would be shared and the dispatcher's captureChildRef would + // mutate the parent's tree. + const dispatchKind = prod.nodeKind ?? 'user' + const initDispatchNode = refs.register((r: Rule) => { + r.node = mkAstNode(prod.name, dispatchKind) + }) - // Compute FIRST(alt) to drive the dispatch lookahead. Any token - // in that set routes to this impl rule. The `b: 1` restores the - // peeked token so the impl can re-consume it. - const firstTokens = firstOfAlt(alt, literals, regexTokens, - firstSets, nullable) - if (firstTokens === null) { - throw new Error( - `bnf: rule '${prod.name}' alternative ${i} is nullable but ` + - `is not the only empty alt; FIRST set is ambiguous`) - } - for (const tok of firstTokens) { - dispatchOpen.push({ s: tok, b: 1, p: implName, g: tag }) + const LOOKAHEAD_K = 4 + const prefixes = altPrefixes( + alt, grammar, literals, regexTokens, LOOKAHEAD_K) + const usable = prefixes.filter((p) => p.length > 0) + if (usable.length > 0) { + for (const p of usable) { + dispatchOpen.push({ + s: p.join(' '), + b: p.length, + p: implName, + a: initDispatchNode, + g: tag, + }) + } + } else { + const firstTokens = firstOfAlt( + alt, literals, regexTokens, firstSets, nullable) + if (firstTokens === null) { + throw new Error( + `bnf: rule '${prod.name}' alternative ${i} is nullable ` + + `but is not the only empty alt; FIRST set is ambiguous`) + } + for (const tok of firstTokens) { + dispatchOpen.push({ + s: tok, b: 1, p: implName, a: initDispatchNode, g: tag, + }) + } } } if (emptyAltSeen) { // Fallback: matches any token (or none), pops immediately with - // an empty tree. + // an empty tree. Tagged with the user rule name so a consumer + // walking the tree still gets a placeholder node for the empty + // alternative. + const fallbackKind = prod.nodeKind ?? 'user' dispatchOpen.push({ - a: refs.register((r: Rule) => { r.node = [] }), + a: refs.register((r: Rule) => { + r.node = mkAstNode(prod.name, fallbackKind) + }), g: tag, }) } @@ -943,14 +1959,11 @@ function emitProduction( ruleSpec[prod.name] = { open: dispatchOpen, close: [{ - // Promote the chosen impl's result up to the dispatcher's node - // so the calling rule sees the impl's tree (not the - // dispatcher's empty placeholder). - a: refs.register((r: Rule) => { - if (r.child && r.child.node !== undefined) { - r.node = r.child.node - } - }), + // Merge the chosen impl's result up into the dispatcher's node, + // tagged with the user rule name (so the enclosing rule sees a + // `{rule, src, kids}` child, not the impl chain's transparent + // `{src, kids}`). + a: captureChildRef(refs, prod.name, prod.nodeKind ?? 'user'), g: tag, }], } @@ -960,6 +1973,12 @@ function emitProduction( // Emit a (possibly single-step) chain of rules for one alt under the // given head rule name. Segment 0 goes into `headName`; later // segments get synthetic `$stepN` continuations. +// +// `headKind` controls the head rule's AST node shape: 'user' tags +// the head's node with the rule name; 'helper' leaves it untagged +// (transparent to the enclosing user rule). Step rules are always +// helpers — they inherit and accumulate into the head's node via +// `r:` replacement. function emitChain( headName: string, alt: BnfSequence, @@ -968,6 +1987,7 @@ function emitChain( tag: string, ruleSpec: NonNullable, refs: RefRegistry, + headKind: BnfProduction['nodeKind'] = 'helper', ) { const segs = segmentize(alt, literals, regexTokens) const chainName = (i: number) => @@ -976,9 +1996,10 @@ function emitChain( for (let i = 0; i < segs.length; i++) { const name = chainName(i) const seg = segs[i] - // Only the head of the chain initialises the node array; later - // steps inherit and continue to accumulate into it. - const open = [segmentToAlt(seg, tag, refs, i === 0)] + const kind = i === 0 ? headKind : 'helper' + // Only the head of the chain initialises the node object; later + // steps inherit and continue to accumulate into it via `r:`. + const open = [segmentToAlt(seg, tag, refs, i === 0, name, kind)] const rs: any = { open } const isLast = i === segs.length - 1 @@ -987,13 +2008,13 @@ function emitChain( // node and replace with the next step rule. rs.close = [{ r: chainName(i + 1), - a: captureChildRef(refs), + a: captureChildRef(refs, name, kind), g: tag, }] } else if (seg.ref) { // Last step, but it had a push — we still need to capture the // final child before popping. - rs.close = [{ a: captureChildRef(refs), g: tag }] + rs.close = [{ a: captureChildRef(refs, name, kind), g: tag }] } ruleSpec[name] = rs } @@ -1025,7 +2046,7 @@ function computeFirstSets( for (const el of alt) { if (el.kind === 'term' || el.kind === 'regex') { const tok = el.kind === 'term' - ? literals.get(el.literal) as string + ? literals.get(termKey(el)) as string : regexTokens.get(regexKey(el)) as string if (!first.has(tok)) { first.add(tok); changed = true } altNullable = false @@ -1071,7 +2092,7 @@ function firstOfAlt( for (const el of alt) { if (el.kind === 'term' || el.kind === 'regex') { const tok = el.kind === 'term' - ? literals.get(el.literal) as string + ? literals.get(termKey(el)) as string : regexTokens.get(regexKey(el)) as string out.add(tok) return out @@ -1090,6 +2111,222 @@ function firstOfAlt( } +// Longest deterministic terminal prefix of a rule — the longest +// sequence of tokens that every alternative of the rule starts +// with. Refs are followed into their target rule, with a `visited` +// set guarding cycles. An empty array means there's no confident +// prefix (the rule either has divergent alts, starts with a multi- +// alt ref, or hits a cycle), so the caller should fall back to a +// single-token FIRST-set lookahead instead. +function ruleLiteralPrefix( + name: string, + grammar: BnfGrammar, + literals: Map, + regexTokens: Map, + visited: Set, +): string[] { + if (visited.has(name)) return [] + const next = new Set(visited); next.add(name) + const prod = grammar.productions.find((p) => p.name === name) + if (!prod || prod.alts.length === 0) return [] + + const prefixes = prod.alts.map((alt) => + altLiteralPrefix(alt, grammar, literals, regexTokens, next)) + if (prefixes.some((p) => p.length === 0)) return [] + const minLen = Math.min(...prefixes.map((p) => p.length)) + const common: string[] = [] + for (let i = 0; i < minLen; i++) { + const tok = prefixes[0][i] + if (prefixes.every((p) => p[i] === tok)) common.push(tok) + else break + } + return common +} + + +function altLiteralPrefix( + alt: BnfSequence, + grammar: BnfGrammar, + literals: Map, + regexTokens: Map, + visited: Set, +): string[] { + const out: string[] = [] + for (const el of alt) { + if (el.kind === 'term') { + out.push(literals.get(termKey(el)) as string) + } else if (el.kind === 'regex') { + out.push(regexTokens.get(regexKey(el)) as string) + } else if (el.kind === 'ref') { + const sub = ruleLiteralPrefix( + el.name, grammar, literals, regexTokens, visited) + // Take the ref's literal prefix and stop — we can't see past + // the ref without more expensive analysis. + out.push(...sub) + return out + } else { + return out + } + } + return out +} + + +type PrefixPath = { tokens: string[]; done: boolean } + + +// Enumerate concrete token-sequence prefixes an alternative can +// start with, each at most `maxK` tokens long. Refs with multiple +// alternatives fan out into one prefix per sub-alternative so the +// caller can emit a dedicated dispatch alt for each path. When a +// ref cycles back or exhausts depth, the path is *terminated* at +// the tokens accumulated so far — the `done` flag is propagated +// out of nested calls so a truncated sub-prefix is never extended +// with tokens from elements the outer alt happens to list after the +// cycled ref. +function altPrefixesRaw( + alt: BnfSequence, + grammar: BnfGrammar, + literals: Map, + regexTokens: Map, + maxK: number, + visited: Set = new Set(), +): PrefixPath[] { + let paths: PrefixPath[] = [{ tokens: [], done: false }] + + for (const el of alt) { + const next: PrefixPath[] = [] + for (const p of paths) { + if (p.done || p.tokens.length >= maxK) { next.push(p); continue } + if (el.kind === 'term') { + next.push({ + tokens: [...p.tokens, literals.get(termKey(el)) as string], + done: false, + }) + } else if (el.kind === 'regex') { + next.push({ + tokens: [...p.tokens, regexTokens.get(regexKey(el)) as string], + done: false, + }) + } else if (el.kind === 'ref') { + if (visited.has(el.name)) { + next.push({ tokens: p.tokens, done: true }) + continue + } + const childVisited = new Set(visited); childVisited.add(el.name) + const target = grammar.productions.find((pr) => pr.name === el.name) + if (!target || target.alts.length === 0) { + next.push({ tokens: p.tokens, done: true }) + continue + } + for (const sub of target.alts) { + const subPaths = altPrefixesRaw( + sub, grammar, literals, regexTokens, + maxK - p.tokens.length, childVisited) + for (const sp of subPaths) { + next.push({ + tokens: [...p.tokens, ...sp.tokens], + // Propagate `done` so the outer loop won't extend a + // cycle-truncated sub-prefix. + done: sp.done, + }) + } + } + } else { + // Desugar should have eliminated group/star/etc. at this point. + next.push({ tokens: p.tokens, done: true }) + } + } + paths = next + if (paths.every((p) => p.done || p.tokens.length >= maxK)) break + } + + return paths +} + + +function altPrefixes( + alt: BnfSequence, + grammar: BnfGrammar, + literals: Map, + regexTokens: Map, + maxK: number, +): string[][] { + const raw = altPrefixesRaw(alt, grammar, literals, regexTokens, maxK) + const seen = new Set() + const out: string[][] = [] + for (const p of raw) { + const key = p.tokens.join(' ') + if (!seen.has(key)) { seen.add(key); out.push(p.tokens) } + } + return out +} + + +// A quoted-string literal is effectively case-sensitive either +// when the user explicitly wrote `%s"…"` or when it contains no +// ASCII letters (there's nothing to fold — `"+"` matches `+` in +// any "case"). +function isEffectivelyCaseSensitive(el: { + literal: string + caseSensitive?: boolean +}): boolean { + if (el.caseSensitive === true) return true + return !/[A-Za-z]/.test(el.literal) +} + + +// Map a term element to the key used to look up (or allocate) its +// emitted token. The key folds together the literal and its +// effective case-sensitivity so a sensitive and an insensitive +// occurrence of the same string are distinct tokens. +function termKey(el: { literal: string; caseSensitive?: boolean }): string { + return (isEffectivelyCaseSensitive(el) ? 'cs:' : 'ci:') + el.literal +} + + +function escapeRegExp(s: string): string { + return s.replace(/[\\^$.*+?()[\]{}|]/g, '\\$&') +} + + +// Decode an ABNF numeric value (`%xNN`, `%dNN`, `%bNN`, or one of +// the range/concatenation forms) into a `BnfElement`. +// +// %x61 => single-char term "a" +// %x66.6f.6f => concatenated term "foo" +// %x30-39 => regex character class [\u0030-\u0039] +// +// Hex is case-insensitive; decimal and binary accept only digits +// in their respective ranges. Range endpoints must be the same +// base as the prefix (RFC 5234 doesn't allow mixing). +function parseNumericValue(src: string): BnfElement { + const base = src[1].toLowerCase() + const radix = base === 'x' ? 16 : base === 'd' ? 10 : 2 + const body = src.slice(2) + + if (body.includes('-')) { + const [loStr, hiStr] = body.split('-') + const lo = parseInt(loStr, radix) + const hi = parseInt(hiStr, radix) + if (lo === hi) { + return { kind: 'term', literal: String.fromCharCode(lo) } + } + const toEsc = (n: number) => + '\\u' + n.toString(16).padStart(4, '0') + return { + kind: 'regex', + pattern: '[' + toEsc(lo) + '-' + toEsc(hi) + ']', + flags: '', + } + } + + const parts = body.split('.') + const chars = parts.map((n) => String.fromCharCode(parseInt(n, radix))) + return { kind: 'term', literal: chars.join('') } +} + + function allocTokenName(literal: string, used: Set): string { const base = literal .replace(/[^A-Za-z0-9]/g, '_') diff --git a/src/defaults.ts b/src/defaults.ts index ca56b03..d716c0f 100644 --- a/src/defaults.ts +++ b/src/defaults.ts @@ -373,6 +373,16 @@ Unexpected end of source.`, fail: [], }, + // Token-rewind options. `history` bounds how many consumed tokens + // are retained on ctx.v for ctx.rewind(). The default of 64 keeps + // parse-time memory bounded for large inputs; raise it if a + // grammar needs to rewind further, or set to Infinity to retain + // every consumed token. ctx.rewind(mark) throws if `mark` falls + // outside the retained window. + rewind: { + history: 64, + }, + // Configuration options. config: { // Configuration modifiers. diff --git a/src/lexer.ts b/src/lexer.ts index 92b13e1..cc9fa5c 100644 --- a/src/lexer.ts +++ b/src/lexer.ts @@ -260,9 +260,18 @@ let makeMatchMatcher: MakeLexMatcher = (cfg: Config, _opts: Options) => { for (let tokenMatcher of tokenMatchers) { // Only match Token if present in Rule sequence. + // Exception: an `eager$` flag on the matcher opts out of + // tcol gating — the matcher fires whenever its regex matches + // and the downstream parser rejects tokens it doesn't expect + // at the current position. This is what ABNF's + // case-insensitive literals need: the lexer has to emit the + // literal's own tin even when the current rule's tcol is + // narrower, so the next rule up the stack can see the token + // as its proper type rather than falling through to #TX. if ( (tokenMatcher as any).tin$ && + !(tokenMatcher as any).eager$ && !rule.spec.def.tcol[oc][tI].includes((tokenMatcher as any).tin$) ) { continue diff --git a/src/parser.ts b/src/parser.ts index 0e806b0..00d21d2 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -60,10 +60,99 @@ function defineLookaheadAliases(ctx: any, notoken: any) { get() { return this.t[1] ?? notoken }, set(v: any) { this.t[1] = v }, }, + // v1 / v2 used to be plain data slots; keep them as accessors on + // the growing `v` stack so existing grammar code reads the same + // "most-recently consumed" tokens. + v1: { + configurable: true, + enumerable: true, + get() { return this.v[this.v.length - 1] ?? notoken }, + set(t: any) { + if (0 < this.v.length) this.v[this.v.length - 1] = t + else this.v.push(t) + }, + }, + v2: { + configurable: true, + enumerable: true, + get() { return this.v[this.v.length - 2] ?? notoken }, + set(t: any) { + const L = this.v.length + if (1 < L) this.v[L - 2] = t + else if (1 === L) this.v.unshift(t) + else this.v.push(t) + }, + }, }) } +// Rewind primitives. Attached to `ctx` at parse start so rule +// actions can reach them via their `ctx` argument. `mark()` returns +// an opaque absolute counter (ctx.vAbs); `rewind(mark)` replays the +// tokens consumed since that mark by unshifting them back onto the +// active lexer's pending-token queue, so subsequent `lex.next()` +// calls re-serve them in forward order. +// +// Marks are absolute rather than array-relative so the ring-buffer +// cap (options.rewind.history) can evict old tokens from the front +// of ctx.v without invalidating mark values held by in-flight rule +// actions. A rewind whose target has been evicted throws — the +// caller's retained-history budget was too small for the grammar. +function attachRewind(ctx: any): void { + ctx.mark = function (): number { + return this.vAbs + } + ctx.rewind = function (mark: number): void { + const k = this.vAbs - mark + if (k <= 0) return + if (k > this.v.length) { + throw new Error( + `jsonic: ctx.rewind target ${mark} is outside the retained ` + + `history window (oldest mark available is ${this.vAbs - this.v.length}, ` + + `current is ${this.vAbs}); increase options.rewind.history.`, + ) + } + const queue: any[] = this.lex.pnt.token + const NOTOKEN = this.NOTOKEN + // The lookahead buffer (ctx.t) holds tokens the lexer has already + // produced past the current consumed position but that haven't + // been committed to ctx.v yet. They advanced the lexer's sI — so + // if we just invalidated the buffer, those source chars would be + // lost. Preserve them by splicing into the front of the pending + // queue in the order the lexer produced them, BEHIND the rewound + // consumed tokens that come next. + const pendingLookahead: any[] = [] + for (let i = 0; i < this.t.length; i++) { + const tkn = this.t[i] + if (tkn && tkn !== NOTOKEN) pendingLookahead.push(tkn) + this.t[i] = NOTOKEN + } + // Un-shift pre-lexed lookahead (oldest-first order at the queue + // head), so the next lex.next() serves them in the same order they + // were originally produced. + for (let i = pendingLookahead.length - 1; i >= 0; i--) { + queue.unshift(pendingLookahead[i]) + } + // Then unshift the rewound consumed tokens — they go in FRONT of + // the lookahead, so the next lex.next() serves the oldest rewound + // consumed token first, then the rest in order. + for (let i = 0; i < k; i++) { + // Pop newest-first, unshift in that order — the first unshift + // lands the newest at the queue's head; the next unshift slides + // older tokens in front of it, so the queue reads oldest-first. + queue.unshift(this.v.pop()) + } + this.vAbs -= k + // Clear the lexer's cached end-of-source token so lex.next serves + // from the newly-replenished queue rather than short-circuiting + // to #ZZ. (Once the lexer has produced the end token it pins it + // to pnt.end; the rewound tokens would otherwise be unreachable.) + this.lex.pnt.end = undefined + } +} + + class ParserImpl implements Parser { options: Options cfg: Config @@ -133,8 +222,13 @@ class ParserImpl implements Parser { rule: {} as Rule, sub: jsonic.internal().sub, xs: -1, - v2: endtkn, - v1: endtkn, + // Consumed-token history. Legacy v1 / v2 accessors (installed by + // defineLookaheadAliases) read the top of this stack. ctx.vAbs + // is the absolute count of pushed-and-not-rewound tokens since + // parse start; ctx.mark() returns it so ring-buffer eviction of + // old entries doesn't invalidate outstanding marks. + v: [], + vAbs: 0, // Lookahead buffer. Seeded with two NOTOKEN slots; grows as alts // request deeper positions via ctx.t[i]. t: [notoken, notoken], @@ -182,6 +276,12 @@ class ParserImpl implements Parser { } let lex = badlex(makeLex(ctx), tokenize('#BD', this.cfg), ctx) + + // Stash lex on ctx so ctx.rewind can push tokens back onto the + // lexer's pending-token queue. Also attach the rewind primitives. + ;(ctx as any).lex = lex + attachRewind(ctx) + let startspec = this.rsm[this.cfg.rule.start] if (null == startspec) { diff --git a/src/rules.ts b/src/rules.ts index eb80ec7..7cb5b24 100644 --- a/src/rules.ts +++ b/src/rules.ts @@ -467,6 +467,39 @@ class RuleSpecImpl implements RuleSpec { rule.k = Object.assign(rule.k, alt.k) } + // Record consumed tokens (matched minus backtrack) on the v + // history BEFORE running alt actions, so an action that calls + // ctx.rewind sees the just-matched tokens on top of the stack. + // The lookahead-buffer shift itself still happens at the end of + // process() so non-action paths behave identically. + // + // ctx.vAbs is an absolute monotonic counter used as the mark + // value — it's decoupled from ctx.v.length so the ring-buffer + // cap can evict old tokens from the front without invalidating + // outstanding marks (marks older than the retained window will + // simply fail at rewind time with a clear error). + const _cons = rule[is_open ? 'oN' : 'cN'] - (alt.b || 0) + if (0 < _cons) { + // Move consumed tokens from ctx.t → ctx.v. Clear the tbuf slots + // so a ctx.rewind call inside the subsequent alt action can + // distinguish "token already in v" (NOTOKEN here; will be + // replayed from v) from "pre-lexed lookahead past consumed" + // (real token in tbuf; needs re-queuing to preserve state). + const NOTOKEN = ctx.NOTOKEN + for (let i = 0; i < _cons; i++) { + ctx.v.push(ctx.t[i]) + ctx.t[i] = NOTOKEN + } + ;(ctx as any).vAbs += _cons + // Amortised-O(1) ring-buffer cap: let v grow to twice the + // capacity, then splice its front back down. Batch-eviction + // makes each push O(1) on average even at the cap. + const cap = ctx.cfg.rewind.history + if (cap !== Infinity && ctx.v.length > 2 * cap) { + ctx.v.splice(0, ctx.v.length - cap) + } + } + // TODO: move after rule.next resolution // (breaks Expr! - fix first) // Action call. @@ -507,6 +540,15 @@ class RuleSpecImpl implements RuleSpec { if (0 < Object.keys(rule.k).length) { next.k = { ...rule.k } } + // Rewire the parent's `child` pointer so the parent's + // close-state actions (e.g. capture-child) see the NEW rule + // after it pops, not the stale replaced one. Without this, + // an action inspecting `r.child.node` gets whatever state + // the replaced rule left behind rather than the replacement's + // final result. + if (rule.parent && rule.parent.child === rule) { + rule.parent.child = next + } why += 'R`' + alt.r + '`' } else { @@ -552,19 +594,9 @@ class RuleSpecImpl implements RuleSpec { if (consumed < 0) consumed = 0 if (0 < consumed) { - // Maintain the 2-slot history (v1 = last consumed, v2 = prior). - // Semantics are preserved for consumed==1,2 and extend cleanly - // for larger N (history still holds the two most recent). - if (1 === consumed) { - ctx.v2 = ctx.v1 - ctx.v1 = ctx.t[0] - } else { - ctx.v2 = ctx.t[consumed - 2] - ctx.v1 = ctx.t[consumed - 1] - } - // Shift the lookahead buffer left by `consumed` slots, filling // vacated tail positions with NOTOKEN so later alts re-fetch. + // (The corresponding v-history push ran before alt actions.) const L = ctx.t.length for (let i = 0; i < L - consumed; i++) ctx.t[i] = ctx.t[i + consumed] for (let i = Math.max(0, L - consumed); i < L; i++) ctx.t[i] = ctx.NOTOKEN @@ -668,7 +700,14 @@ function parse_alts( const Si = S ? S[i] : null if (null != Si) { const tin = tkn.tin - if (!(Si[(tin / 31) | 0] & ((1 << ((tin % 31) - 1)) | bitAA))) { + const part = (tin / 31) | 0 + // bitAA lives in partition 0 (tin=AA=4). ORing it into the + // match mask for any partition other than 0 lets unrelated + // tokens in higher partitions collide with alts that merely + // set bit 3 of their own partition — a false positive. Apply + // bitAA only when testing a partition-0 token. + const aaBit = part === 0 ? bitAA : 0 + if (!(Si[part] & ((1 << ((tin % 31) - 1)) | aaBit))) { cond = false break } @@ -816,6 +855,18 @@ function normalt(a: AltSpec, rs: RuleState, r: RuleSpec): NormAltSpec { for (let i = 0; i < sN; i++) { const tins: Tin[] = tinsify([a.s[i]]) t[i] = tins + // `#AA` is the ANY wildcard — a position whose tin list + // includes it must match every lexed token regardless of + // partition. Represent that by dropping to the existing + // `S[i] = null` sentinel ("no constraint"), bypassing the + // per-partition bitset check in parse_alts. The t[i] entry + // keeps the raw tin list so tcol collation still reflects + // what the user wrote. + const aaTin = r.ji.token('#AA') + if (aaTin != null && tins.includes(aaTin)) { + S[i] = null + continue + } S[i] = 0 < tins.length ? new Array(Math.max(...tins.map((tin) => (1 + tin / 31) | 0))) diff --git a/src/types.ts b/src/types.ts index bc2e904..33d729b 100644 --- a/src/types.ts +++ b/src/types.ts @@ -280,6 +280,13 @@ export type Options = { result?: { fail: any[] } + rewind?: { + // Maximum number of consumed tokens retained in ctx.v for + // ctx.rewind(). Defaults to Infinity (unbounded). Set a finite + // value to cap parse-time memory; ctx.rewind(mark) will throw + // if the mark has been evicted from the retained window. + history?: number + } config?: { modify?: { [plugin_name: string]: (config: Config, options: Options) => void @@ -423,10 +430,19 @@ export type Context = { rule?: RuleSub[] } xs: Tin // Lex state tin. - v2: Token // Previous previous token. - v1: Token // Previous token. + v: Token[] // Stack of consumed tokens (newest at top), used for rewind. + vAbs: number // Absolute count of pushed-not-rewound tokens; mark/rewind key. + v2: Token // Previous previous token (alias of v[v.length - 2]). + v1: Token // Previous token (alias of v[v.length - 1]). t: Token[] // Lookahead buffer; t[i] is NOTOKEN if unfetched. + // Save a rewind mark at the current parse position. The returned + // value can be passed to `rewind` to replay the tokens consumed + // since the mark was taken, re-feeding them through the lexer's + // pending-token queue. + mark: () => number + rewind: (mark: number) => void + // Legacy aliases for the first two slots of the lookahead buffer. // @deprecated Use t[0] and t[1] instead. t0: Token // Alias of t[0] (current token). @@ -653,6 +669,10 @@ export type Config = { fail: any[] } + rewind: { + history: number + } + error: { [code: string]: string } errmsg: { name: string diff --git a/src/utility.ts b/src/utility.ts index b8f83df..54bf5e8 100644 --- a/src/utility.ts +++ b/src/utility.ts @@ -443,6 +443,12 @@ function configure( cfg.result.fail = [...opts.result.fail] } + // Parse-time consumed-token history cap (for ctx.rewind). + cfg.rewind = { + history: + null == opts.rewind?.history ? Infinity : opts.rewind.history, + } + const optscolor = opts.color ?? {} cfg.color = cfg.color ?? {} cfg.color.active = optscolor.active ?? cfg.color.active ?? true diff --git a/test/aa-wildcard.test.js b/test/aa-wildcard.test.js new file mode 100644 index 0000000..4b9f3bd --- /dev/null +++ b/test/aa-wildcard.test.js @@ -0,0 +1,104 @@ +/* Copyright (c) 2026 Richard Rodger and other contributors, MIT License */ +'use strict' + +// Coverage for `#AA` as a true ANY-token wildcard in alt `s:` lists. +// +// Before the fix, an alt with `s: ['#AA']` only matched tokens whose +// tin fit in partition 0 (tin < 31) because normalt sized the alt's +// per-partition bitset from AA's own tin (4), leaving S[i][1..] +// undefined. High-tin tokens silently failed the bitset AND. +// +// The fix: when `#AA` is in a position's tin list, normalt sets +// `S[i] = null` — the existing "no constraint" sentinel — so the +// matcher skips the bitset check entirely and any fetched token +// matches. `t[i]` still carries the raw tin list so tcol collation +// is unaffected. + +const { describe, it } = require('node:test') +const assert = require('node:assert') + +const { Jsonic } = require('..') + + +function make_norules(opts) { + let j = Jsonic.make(opts) + let rns = j.rule() + Object.keys(rns).map((rn) => j.rule(rn, null)) + return j +} + + +describe('aa-wildcard', () => { + + it('#AA matches a low-tin fixed token (partition 0)', () => { + const j = make_norules({ + rule: { start: 'top' }, + fixed: { token: { Ta: 'a' } }, + }) + + j.rule('top', (rs) => rs + .open([{ s: ['#AA'] }]) + .close([{ s: '#ZZ' }]) + ) + + assert.doesNotThrow(() => j('a')) + }) + + + it('#AA matches a high-tin fixed token (partition 1+)', () => { + // Push the test token's tin above 31 by registering enough + // filler literals first. Without the fix, the alt's S[i] would + // only cover partition 0, and the lookup for tin >= 31 would + // hit undefined and fall through as a non-match. + const fillers = {} + for (let n = 0; n < 40; n++) fillers['F' + n] = 'f' + n + fillers['Tx'] = 'x' + + const j = make_norules({ + rule: { start: 'top' }, + fixed: { token: fillers }, + }) + assert.ok(j.token('Tx') >= 31, + `test setup bug: Tx tin ${j.token('Tx')} expected >= 31`) + + j.rule('top', (rs) => rs + .open([{ s: ['#AA'] }]) + .close([{ s: '#ZZ' }]) + ) + + assert.doesNotThrow(() => j('x')) + }) + + + it('unrelated token bits no longer leak via bitAA', () => { + // Sibling regression: before the fix, bitAA was ORed into every + // partition's match mask, so any token whose tin sat at bit 3 of + // its partition (tin = 4 + 31·k for k >= 1, e.g. 35, 66, …) + // would falsely match alts that had some other token's bit 3 + // flipped in the same partition. Confirm we now reject a token + // that should NOT match the alt. + const fillers = {} + // Fill up partition 0 and push tokens into partition 1. + for (let n = 0; n < 34; n++) fillers['F' + n] = 'f' + n + // Pa35 lands at tin=35 (bit 3 of partition 1) — the old bug + // vehicle. Pa44 lands at tin ~44 (a different bit in the same + // partition); these tins must stay distinct. + fillers['Pa35'] = 'p' + fillers['Pa44'] = 'q' + + const j = make_norules({ + rule: { start: 'top' }, + fixed: { token: fillers }, + }) + + j.rule('top', (rs) => rs + .open([{ s: ['Pa35'] }]) // only accept the first one + .close([{ s: '#ZZ' }]) + ) + + assert.doesNotThrow(() => j('p')) + assert.throws(() => j('q'), /unexpected/, + 'partition-1 tin at a different bit must not match via bitAA') + }) + +}) diff --git a/test/bnf.test.js b/test/bnf.test.js index f288be4..ed559fd 100644 --- a/test/bnf.test.js +++ b/test/bnf.test.js @@ -54,10 +54,11 @@ describe('bnf', () => { assert.deepEqual(stripActions(spec.rule.__start__.close), [ { s: '#ZZ', g: 'bnf' }, ]) - assert.deepEqual(spec.options.fixed.token, { - '#HI': 'hi', - '#HELLO': 'hello', - }) + // Case-insensitive ABNF strings emit as match.token regexes + // (with the `i` flag), not fixed tokens. + assert.deepEqual(spec.options.fixed.token, {}) + assert.ok(spec.options.match.token['#HI'] instanceof RegExp) + assert.ok(spec.options.match.token['#HELLO'] instanceof RegExp) assert.deepEqual(stripActions(spec.rule.greet.open), [ { s: '#HI', g: 'bnf' }, { s: '#HELLO', g: 'bnf' }, @@ -78,7 +79,7 @@ describe('bnf', () => { it('honours override of start rule', () => { - const spec = bnf(' ::= "x"\n ::= "y"', { start: 'b' }) + const spec = bnf('a = "x"\nb = "y"', { start: 'b' }) assert.deepEqual(stripActions(spec.rule.__start__.open), [ { p: 'b', g: 'bnf' }, ]) @@ -86,7 +87,7 @@ describe('bnf', () => { it('emits a single N-token alt for long terminal sequences', () => { - const spec = bnf(' ::= "a" "b" "c" "d"') + const spec = bnf('long = "a" "b" "c" "d"') assert.deepEqual(stripActions(spec.rule.long.open), [ { s: '#A #B #C #D', g: 'bnf' }, ]) @@ -94,8 +95,8 @@ describe('bnf', () => { it('chains aux rules for multi-segment alternatives', () => { - const spec = bnf(' ::= "a" "b" "c"\n' + - ' ::= "x"') + const spec = bnf('chain = "a" inner "b" inner "c"\n' + + 'inner = "x"') // Root rule consumes 'a' then pushes inner; close replaces with // the first continuation rule. assert.deepEqual(stripActions(spec.rule.chain.open), [ @@ -118,20 +119,20 @@ describe('bnf', () => { it('rejects unknown rule reference', () => { assert.throws( - () => bnf(' ::= '), + () => bnf('x = missing'), /unknown rule 'missing'/, ) }) it('rejects source with no productions', () => { - assert.throws(() => bnf('# just a comment\n'), /no productions/) + assert.throws(() => bnf('; just a comment\n'), /no productions/) }) it('surfaces line/column on malformed BNF', () => { try { - parseBnf(' ::= "x" )') + parseBnf('a = "x" )') assert.fail('expected BnfParseError') } catch (e) { assert.ok(e instanceof BnfParseError, @@ -148,7 +149,7 @@ describe('bnf', () => { describe('parseBnf (jsonic-based)', () => { it('parses a single terminal', () => { - const g = parseBnf(' ::= "x"') + const g = parseBnf('g = "x"') assert.deepEqual(g, { productions: [ { name: 'g', alts: [[{ kind: 'term', literal: 'x' }]] }, @@ -158,7 +159,7 @@ describe('bnf', () => { it('parses alternation', () => { - const g = parseBnf(' ::= "a" | "b"') + const g = parseBnf('g = "a" / "b"') assert.deepEqual(g.productions[0].alts, [ [{ kind: 'term', literal: 'a' }], [{ kind: 'term', literal: 'b' }], @@ -167,7 +168,7 @@ describe('bnf', () => { it('parses sequences and references (angle and bare)', () => { - const g = parseBnf(' ::= bar\n ::= "x"\n ::= "y"') + const g = parseBnf('a = foo bar\nfoo = "x"\nbar = "y"') assert.deepEqual(g.productions[0].alts, [ [ { kind: 'ref', name: 'foo' }, @@ -179,7 +180,7 @@ describe('bnf', () => { it('preserves empty alternatives', () => { - const g = parseBnf(' ::= | "y"') + const g = parseBnf('x = / "y"') assert.deepEqual(g.productions[0].alts, [ [], [{ kind: 'term', literal: 'y' }], @@ -187,8 +188,8 @@ describe('bnf', () => { }) - it('ignores hash comments', () => { - const g = parseBnf('# top comment\n ::= "hi" # trailing\n') + it('ignores semicolon comments', () => { + const g = parseBnf('; top comment\ngreet = "hi" ; trailing\n') assert.deepEqual(g.productions[0].alts, [ [{ kind: 'term', literal: 'hi' }], ]) @@ -196,7 +197,7 @@ describe('bnf', () => { it('parses multiple productions on one line', () => { - const g = parseBnf(' ::= "x" ::= "y"') + const g = parseBnf('a = "x" b = "y"') assert.equal(g.productions.length, 2) assert.equal(g.productions[0].name, 'a') assert.equal(g.productions[1].name, 'b') @@ -204,9 +205,13 @@ describe('bnf', () => { it('parses EBNF postfix operators', () => { - const g = parseBnf(' ::= "a"? "b"* "c"+') + const g = parseBnf('g = [ "a" ] *"b" 1*"c"') assert.deepEqual(g.productions[0].alts[0], [ - { kind: 'opt', inner: { kind: 'term', literal: 'a' } }, + // Optional is desugared as opt(group([[term-a]])). + { + kind: 'opt', + inner: { kind: 'group', alts: [[{ kind: 'term', literal: 'a' }]] }, + }, { kind: 'star', inner: { kind: 'term', literal: 'b' } }, { kind: 'plus', inner: { kind: 'term', literal: 'c' } }, ]) @@ -219,7 +224,7 @@ describe('bnf', () => { it('optional: accepts presence or absence', () => { const j = Jsonic.make() - j.bnf(' ::= "hi" "there"?') + j.bnf('g = "hi" [ "there" ]') assert.doesNotThrow(() => j('hi')) assert.doesNotThrow(() => j('hi there')) assert.throws(() => j('hi nope'), /unexpected/) @@ -228,7 +233,7 @@ describe('bnf', () => { it('star: zero or more', () => { const j = Jsonic.make() - j.bnf(' ::= "x"* "end"') + j.bnf('g = *"x" "end"') assert.doesNotThrow(() => j('end')) assert.doesNotThrow(() => j('x end')) assert.doesNotThrow(() => j('x x x end')) @@ -238,80 +243,330 @@ describe('bnf', () => { it('plus: one or more', () => { const j = Jsonic.make() - j.bnf(' ::= "x"+ "end"') + j.bnf('g = 1*"x" "end"') assert.doesNotThrow(() => j('x end')) assert.doesNotThrow(() => j('x x x end')) assert.throws(() => j('end'), /unexpected/) }) - it('grouping selects among alternatives', () => { + it('bounded repetition m*n', () => { + // ABNF 2*4"x" matches 2, 3, or 4 occurrences. const j = Jsonic.make() - j.bnf(' ::= ("a" | "b") "c"') - assert.doesNotThrow(() => j('a c')) - assert.doesNotThrow(() => j('b c')) - assert.throws(() => j('c'), /unexpected/) - assert.throws(() => j('x c'), /unexpected/) + j.bnf('g = 2*4"x" "end"') + assert.throws(() => j('end'), /unexpected/) // 0 + assert.throws(() => j('x end'), /unexpected/) // 1 + assert.doesNotThrow(() => j('x x end')) // 2 + assert.doesNotThrow(() => j('x x x end')) // 3 + assert.doesNotThrow(() => j('x x x x end')) // 4 + assert.throws(() => j('x x x x x end'), /unexpected/) // 5 }) - it('group with plus: one or more sub-sequences', () => { + it('exact repetition n', () => { const j = Jsonic.make() - j.bnf(' ::= ("a" "b")+ "end"') - assert.doesNotThrow(() => j('a b end')) - assert.doesNotThrow(() => j('a b a b a b end')) - assert.throws(() => j('end'), /unexpected/) + j.bnf('g = 3"x" "end"') + assert.throws(() => j('x x end'), /unexpected/) + assert.doesNotThrow(() => j('x x x end')) + assert.throws(() => j('x x x x end'), /unexpected/) }) - it('group of alternatives with star', () => { + it('upper-bounded repetition *n', () => { const j = Jsonic.make() - j.bnf(' ::= ("a" | "b")* "end"') + j.bnf('g = *2"x" "end"') assert.doesNotThrow(() => j('end')) - assert.doesNotThrow(() => j('a end')) - assert.doesNotThrow(() => j('a b a end')) - assert.throws(() => j('c end'), /unexpected/) + assert.doesNotThrow(() => j('x end')) + assert.doesNotThrow(() => j('x x end')) + assert.throws(() => j('x x x end'), /unexpected/) }) }) - describe('regex terminals', () => { + describe('ABNF numeric values', () => { - it('matches a regex terminal as an atom', () => { + it('single hex value matches as the corresponding char', () => { + // %x61 = 'a' const j = Jsonic.make() - j.bnf(' ::= /[a-z]+/') - assert.doesNotThrow(() => j('hello')) - assert.throws(() => j('HELLO'), /unexpected/) + j.bnf('g = %x61') + assert.doesNotThrow(() => j('a')) + assert.throws(() => j('b'), /unexpected/) }) - it('mixes regex terminals with string terminals', () => { + it('decimal and binary bases match the same char', () => { + // %d97 = %x61 = %b1100001 = 'a' + const dec = Jsonic.make() + dec.bnf('g = %d97') + assert.doesNotThrow(() => dec('a')) + + const bin = Jsonic.make() + bin.bnf('g = %b1100001') + assert.doesNotThrow(() => bin('a')) + }) + + + it('concatenated code points build a multi-char literal', () => { + // %x66.6f.6f = 'foo' + const j = Jsonic.make() + j.bnf('g = %x66.6f.6f') + assert.doesNotThrow(() => j('foo')) + assert.throws(() => j('bar'), /unexpected/) + }) + + + it('ranges match any single char in the range', () => { const j = Jsonic.make() - j.bnf(' ::= "tag=" /[a-z]+/') - assert.doesNotThrow(() => j('tag=hello')) - assert.throws(() => j('tag=123'), /unexpected/) + j.bnf('g = %x30-39') + assert.doesNotThrow(() => j('0')) + assert.doesNotThrow(() => j('5')) + assert.doesNotThrow(() => j('9')) + assert.throws(() => j('a'), /unexpected/) }) - it('repeats a regex terminal', () => { + it('ranges compose with ABNF repetition', () => { + // 1*DIGIT where DIGIT = %x30-39. const j = Jsonic.make() - j.bnf(' ::= /[0-9]+/+') - assert.doesNotThrow(() => j('1 2 3')) + j.bnf('digits = 1*DIGIT\nDIGIT = %x30-39') + assert.doesNotThrow(() => j('1')) + assert.doesNotThrow(() => j('12345')) assert.throws(() => j('abc'), /unexpected/) }) + }) + + + describe('ABNF case-insensitive strings', () => { + + it('bare "foo" matches in any case (ABNF default)', () => { + const j = Jsonic.make() + j.bnf('g = "GET"') + assert.doesNotThrow(() => j('GET')) + assert.doesNotThrow(() => j('get')) + assert.doesNotThrow(() => j('Get')) + assert.doesNotThrow(() => j('gEt')) + }) + + + it('%s"foo" forces a case-sensitive match', () => { + const j = Jsonic.make() + j.bnf('g = %s"GET"') + assert.doesNotThrow(() => j('GET')) + assert.throws(() => j('get'), /unexpected/) + assert.throws(() => j('Get'), /unexpected/) + }) + + + it('%i"foo" is the explicit form of the default', () => { + const j = Jsonic.make() + j.bnf('g = %i"GET"') + assert.doesNotThrow(() => j('GET')) + assert.doesNotThrow(() => j('get')) + }) + - it('regex flags are honoured (case-insensitive)', () => { + it('literal with no letters is case-independent regardless', () => { const j = Jsonic.make() - j.bnf(' ::= /[a-z]+/i') - assert.doesNotThrow(() => j('Hello')) - assert.doesNotThrow(() => j('HELLO')) + j.bnf('g = "+"') + assert.doesNotThrow(() => j('+')) + }) + + + it('sensitive and insensitive variants of the same literal are distinct', () => { + // %s"foo" (sensitive) only matches "foo" exactly; "foo" + // (insensitive) accepts any case. Both should coexist. + const j = Jsonic.make() + j.bnf('g = %s"foo" / "BAR"') + assert.doesNotThrow(() => j('foo')) + assert.throws(() => j('FOO'), /unexpected/) // sensitive + assert.doesNotThrow(() => j('bar')) // insensitive + assert.doesNotThrow(() => j('BAR')) }) }) + describe('ABNF incremental alternatives', () => { + + it('name =/ alt folds into the earlier production', () => { + const j = Jsonic.make() + j.bnf('command = "get"\ncommand =/ "post"\ncommand =/ "delete"') + assert.doesNotThrow(() => j('get')) + assert.doesNotThrow(() => j('post')) + assert.doesNotThrow(() => j('delete')) + assert.throws(() => j('put'), /unexpected/) + }) + + + it('a single =/ appends one alternative', () => { + const j = Jsonic.make() + j.bnf('g = "a"\ng =/ "b"') + assert.doesNotThrow(() => j('a')) + assert.doesNotThrow(() => j('b')) + }) + + + it('multi-alt increments merge cleanly', () => { + // An increment can itself introduce several alternatives. + const j = Jsonic.make() + j.bnf('g = "a"\ng =/ "b" / "c"') + assert.doesNotThrow(() => j('a')) + assert.doesNotThrow(() => j('b')) + assert.doesNotThrow(() => j('c')) + }) + + + it('=/ without an earlier base rule is rejected', () => { + assert.throws( + () => bnf('g =/ "a"'), + /has no earlier .* to extend/, + ) + }) + + }) + + + describe('ABNF line continuation', () => { + + it('an alternation can wrap across multiple lines', () => { + // RFC 5234 lets a rule span several lines as long as each + // continuation line is indented. The parser achieves this + // implicitly: newlines are whitespace, production boundaries + // are detected by the `name =` pattern rather than by end of + // line, so a wrapped rule parses as one production. + const g = parseBnf([ + 'command = "get"', + ' / "post"', + ' / "delete"', + ].join('\n')) + assert.equal(g.productions.length, 1) + assert.equal(g.productions[0].name, 'command') + assert.equal(g.productions[0].alts.length, 3) + }) + + + it('a sequence can wrap across multiple lines', () => { + const j = Jsonic.make() + j.bnf([ + 'req = "GET"', + ' "path"', + ' "end"', + ].join('\n')) + assert.doesNotThrow(() => j('GET path end')) + }) + + + it('wrapped rules sit alongside normal rules without interaction', () => { + const j = Jsonic.make() + j.bnf([ + 'verb = "GET"', + ' / "POST"', + 'path = "/"', + ' / "/api"', + ].join('\n')) + // verb rule accepts both methods + const jverb = Jsonic.make() + jverb.bnf('verb = "GET" / "POST"') + assert.doesNotThrow(() => jverb('GET')) + assert.doesNotThrow(() => jverb('POST')) + }) + + }) + + + describe('ABNF core rules (RFC 5234 Appendix B.1)', () => { + + it('DIGIT is auto-included when referenced', () => { + const j = Jsonic.make() + j.bnf('number = 1*DIGIT') + assert.doesNotThrow(() => j('12345')) + assert.throws(() => j('abc'), /unexpected/) + }) + + + it('ALPHA matches upper and lower letters', () => { + const j = Jsonic.make() + j.bnf('word = 1*ALPHA') + assert.doesNotThrow(() => j('hello')) + assert.doesNotThrow(() => j('WORLD')) + assert.doesNotThrow(() => j('MixedCase')) + assert.throws(() => j('123'), /unexpected/) + }) + + + it('HEXDIG transitively pulls in DIGIT', () => { + const j = Jsonic.make() + j.bnf('hex = 1*HEXDIG') + assert.doesNotThrow(() => j('DEADBEEF')) + assert.doesNotThrow(() => j('12AB')) + assert.throws(() => j('xyz'), /unexpected/) + }) + + + it('BIT matches 0 or 1', () => { + const j = Jsonic.make() + j.bnf('bits = 1*BIT') + assert.doesNotThrow(() => j('0101')) + assert.throws(() => j('012'), /unexpected/) + }) + + + it('user can override a core rule', () => { + // Locally redefining DIGIT as "only odd digits" wins over + // the core definition. + const j = Jsonic.make() + j.bnf('number = 1*DIGIT\nDIGIT = "1" / "3" / "5" / "7" / "9"') + assert.doesNotThrow(() => j('135')) + assert.throws(() => j('246'), /unexpected/) + }) + + + it('a grammar that references nothing from the core library has no core rules added', () => { + const { parseBnf } = require('../dist/bnf') + const g = parseBnf('g = "a" / "b"') + assert.deepEqual(g.productions.map((p) => p.name), ['g']) + }) + + + it('grouping selects among alternatives', () => { + const j = Jsonic.make() + j.bnf('g = ("a" / "b") "c"') + assert.doesNotThrow(() => j('a c')) + assert.doesNotThrow(() => j('b c')) + assert.throws(() => j('c'), /unexpected/) + assert.throws(() => j('x c'), /unexpected/) + }) + + + it('group with plus: one or more sub-sequences', () => { + const j = Jsonic.make() + j.bnf('g = 1*("a" "b") "end"') + assert.doesNotThrow(() => j('a b end')) + assert.doesNotThrow(() => j('a b a b a b end')) + assert.throws(() => j('end'), /unexpected/) + }) + + + it('group of alternatives with star', () => { + const j = Jsonic.make() + j.bnf('g = *("a" / "b") "end"') + assert.doesNotThrow(() => j('end')) + assert.doesNotThrow(() => j('a end')) + assert.doesNotThrow(() => j('a b a end')) + assert.throws(() => j('c end'), /unexpected/) + }) + + }) + + + // `regex terminals` describe block was dropped when ABNF stage 2 + // replaced alternation `|` with `/`, which conflicts with the + // regex delimiter. Equivalent tests based on ABNF %x numeric + // ranges will reappear once that syntax lands. + + describe('fixture round-trips', () => { it('arith.bnf accepts precedence-free arithmetic', () => { @@ -328,14 +583,17 @@ describe('bnf', () => { it('json-subset.bnf accepts nested structures', () => { + // The fixture uses simple single-letter terminals in place of + // quoted strings until ABNF %x ranges arrive — exercise it + // with matching inputs. const j = Jsonic.make() j.bnf(loadFixture('json-subset.bnf')) assert.doesNotThrow(() => j('1')) - assert.doesNotThrow(() => j('"hi"')) - assert.doesNotThrow(() => j('{ "a" : 1 }')) + assert.doesNotThrow(() => j('a')) + assert.doesNotThrow(() => j('{ a : 1 }')) assert.doesNotThrow(() => j('[ 1 , 2 , 3 ]')) - assert.doesNotThrow(() => j('{ "a" : [ 1 , 2 ] , "b" : "hi" }')) - assert.throws(() => j('{ "a" 1 }'), /unexpected/) // missing colon + assert.doesNotThrow(() => j('{ a : [ 1 , 2 ] , b : c }')) + assert.throws(() => j('{ a 1 }'), /unexpected/) // missing colon }) @@ -356,14 +614,15 @@ describe('bnf', () => { describe('left-recursion elimination', () => { it('rewrites P -> P alpha | beta into P -> beta (alpha)*', () => { - const g = parseBnf(' ::= "+" | \n ::= /[0-9]+/') + const g = parseBnf('e = e "+" t / t\nt = "1"') const r = eliminateLeftRecursion(g) const expr = r.productions.find((p) => p.name === 'e') assert.equal(expr.alts.length, 1) const alt = expr.alts[0] assert.equal(alt.length, 2) - // Seed (collapsed to a bare element since there's only one). - assert.deepEqual(alt[0], { kind: 'ref', name: 't' }) + // Seed is t's body inlined (Paull's topo-orders t before e + // since e leads with t, so t's alts are substituted in). + assert.equal(alt[0].kind, 'term') // Tail wrapped in a star. assert.equal(alt[1].kind, 'star') }) @@ -371,8 +630,8 @@ describe('bnf', () => { it('handles multiple recursive and seed alternatives', () => { const g = parseBnf( - ' ::= "+" | "-" | | "(" ")"\n' + - ' ::= /[0-9]+/') + 'e = e "+" t / e "-" t / t / "(" e ")"\n' + + 't = "1"') const r = eliminateLeftRecursion(g) const e = r.productions.find((p) => p.name === 'e') assert.equal(e.alts.length, 1) @@ -389,17 +648,20 @@ describe('bnf', () => { it('rejects purely left-recursive productions (no seed)', () => { assert.throws( - () => bnf(' ::= "x"'), + () => bnf('a = a "x"'), /purely left-recursive/, ) }) - it('rejects trivial P ::= P', () => { - assert.throws( - () => bnf(' ::= | "x"'), - /trivial left-recursive/, - ) + it('silently drops trivial P = P alternatives', () => { + // `a = a` adds nothing to the language (it just re-derives + // P with no progress), so the pass drops it. The remaining alt + // defines a's actual language. + const j = Jsonic.make() + j.bnf('a = a / "x"') + assert.doesNotThrow(() => j('x')) + assert.throws(() => j('y'), /unexpected/) }) @@ -422,6 +684,143 @@ describe('bnf', () => { }) + // Indirect left recursion (cycles through at least one intermediate + // rule) is not handled by the static rewrite in + // `eliminateLeftRecursion`. The tests below pin the desired + // behaviour once the k+sI runtime guard from the feasibility doc + // is wired in: legal inputs parse, illegal ones reject, and the + // parser never loops. Each test has an explicit timeout so a + // runaway parse is reported as a failure rather than hanging CI. + // + // Until the guard is implemented, these tests are expected to + // fail (they fall through the current emitter and either throw + // on convert, throw "unexpected" on parse, or — without the + // timeout — spin forever). + describe('indirect left recursion (runtime guard)', () => { + + const INDIRECT_2 = 'p = q "x"\nq = p "y" / "z"' + const INDIRECT_3 = + 'a = b "1"\nb = c "2"\nc = a "3" / "x"' + + + it('two-rule cycle: accepts shortest seed derivation', { timeout: 2000 }, () => { + const j = Jsonic.make() + j.bnf(INDIRECT_2) + // p = q x ; q = z → "z x" + assert.doesNotThrow(() => j('z x')) + }) + + + it('two-rule cycle: accepts one-step unfold', { timeout: 2000 }, () => { + const j = Jsonic.make() + j.bnf(INDIRECT_2) + // q = p y = (z x) y ⇒ p = q x = z x y x + assert.doesNotThrow(() => j('z x y x')) + }) + + + it('two-rule cycle: accepts two-step unfold', { timeout: 2000 }, () => { + const j = Jsonic.make() + j.bnf(INDIRECT_2) + // p = z x y x y x (iterate once more) + assert.doesNotThrow(() => j('z x y x y x')) + }) + + + it('two-rule cycle: rejects input missing required trailing x', { timeout: 2000 }, () => { + const j = Jsonic.make() + j.bnf(INDIRECT_2) + assert.throws(() => j('z'), /unexpected/) + }) + + + it('two-rule cycle: rejects input starting on the wrong seed', { timeout: 2000 }, () => { + const j = Jsonic.make() + j.bnf(INDIRECT_2) + // "y x" has no legal derivation — must be preceded by q's seed. + assert.throws(() => j('y x'), /unexpected/) + }) + + + it('two-rule cycle: does not infinite-loop on a malformed prefix', { timeout: 2000 }, () => { + // The test's own timeout is the safety net: the guard must + // terminate the parse attempt even when no legal derivation + // exists for the input. + const j = Jsonic.make() + j.bnf(INDIRECT_2) + assert.throws(() => j('w'), /unexpected/) + }) + + + it('three-rule cycle: accepts shortest seed derivation', { timeout: 2000 }, () => { + const j = Jsonic.make() + j.bnf(INDIRECT_3) + // c = x ; b = x 2 ; a = x 2 1 + assert.doesNotThrow(() => j('x 2 1')) + }) + + + it('three-rule cycle: accepts one-step unfold', { timeout: 2000 }, () => { + const j = Jsonic.make() + j.bnf(INDIRECT_3) + // c = a 3 = (x 2 1) 3 ; b = x 2 1 3 2 ; a = x 2 1 3 2 1 + assert.doesNotThrow(() => j('x 2 1 3 2 1')) + }) + + + it('three-rule cycle: rejects premature stop', { timeout: 2000 }, () => { + const j = Jsonic.make() + j.bnf(INDIRECT_3) + assert.throws(() => j('x 2'), /unexpected/) + }) + + + it('hidden left recursion through a nullable ref (a → b a, b → y|ε)', { timeout: 2000 }, () => { + // The leading ref is `b`, not `a`, but `b` is nullable so + // `a` is reachable from itself through b's ε-alt. Paull's + // topo-orders b before a, inlines b's alts (including ε) + // into a, then drops the resulting `[a]` trivial alt. + const src = 'a = b a / "x"\nb = "y" /' + const j = Jsonic.make() + j.bnf(src) + assert.doesNotThrow(() => j('x')) + assert.doesNotThrow(() => j('y x')) + assert.doesNotThrow(() => j('y y y x')) + assert.throws(() => j('y'), /unexpected/) + assert.throws(() => j('z'), /unexpected/) + }) + + + it('hidden LR with three-rule nullable chain', { timeout: 2000 }, () => { + // a → b a | "x" ; b → c ; c → "y" | ε + // A longer chain of nullable leading refs that Paull's has + // to collapse in a single topo pass. + const src = 'a = b a / "x"\nb = c\nc = "y" /' + const j = Jsonic.make() + j.bnf(src) + assert.doesNotThrow(() => j('x')) + assert.doesNotThrow(() => j('y x')) + assert.doesNotThrow(() => j('y y x')) + }) + + + it('indirect cycle alongside a direct seed still parses correctly', { timeout: 2000 }, () => { + // `a` has its own seed `"init"`, so the indirect cycle + // (a → b → a) is only exercised for `b`-starting inputs. + const src = + 'a = b "x" / "init"\n' + + 'b = a "y" / "z"' + const j = Jsonic.make() + j.bnf(src) + assert.doesNotThrow(() => j('init')) // a's direct seed + assert.doesNotThrow(() => j('z x')) // through b's seed + assert.doesNotThrow(() => j('init y x')) // a-seed, then b-y, then a-x + assert.throws(() => j('z'), /unexpected/) + }) + + }) + + describe('jsonic.bnf()', () => { it('installs grammar and parses matching input', () => { @@ -449,38 +848,89 @@ describe('bnf', () => { it('returns the emitted spec', () => { const j = Jsonic.make() - const spec = j.bnf(' ::= "x"') + const spec = j.bnf('g = "x"') assert.equal(spec.options.rule.start, '__start__') - assert.equal(spec.options.fixed.token['#X'], 'x') + // Case-insensitive literal emits as a match.token regex. + assert.ok(spec.options.match.token['#X'] instanceof RegExp) }) it('bnf.toSpec builds the spec without installing', () => { const j = Jsonic.make() - const spec = j.bnf.toSpec(' ::= "x"') + const spec = j.bnf.toSpec('g = "x"') // Spec is returned; the default JSON grammar is still active // since toSpec does not install the BNF grammar. assert.equal(spec.options.rule.start, '__start__') assert.deepEqual(j('a:1'), { a: 1 }) // A second call to install still works afterwards. - j.bnf(' ::= "x"') - assert.deepEqual(j('x'), ['x']) + j.bnf('g = "x"') + assert.deepEqual(j('x'), { rule: 'g', src: 'x', kids: [] }) }) - it('produces a parse tree of matched terminals', () => { - // Terminals are pushed as their source text; nested rules - // appear as nested arrays. + it('produces an AST tagged by rule name', () => { + // Every user-declared rule becomes a `{rule, src, kids}` + // node. Leaf rules (only terminals / char classes) have empty + // kids and carry the matched text as `src`. const j = Jsonic.make() - j.bnf(' ::= "hi" | "hello"') - assert.deepEqual(j('hi'), ['hi']) - assert.deepEqual(j('hello'), ['hello']) - + j.bnf('g = "hi" / "hello"') + assert.deepEqual(j('hi'), { rule: 'g', src: 'hi', kids: [] }) + assert.deepEqual(j('hello'), { rule: 'g', src: 'hello', kids: [] }) + + // Note: under current Paull-style LR elimination, a leading + // ref to another user rule gets inlined, so that rule does + // NOT appear as a child node. `p = "a" q, q = "b"` works + // because `q` is NOT at the leading position of p's alt — + // it's preceded by the `"a"` terminal. const j2 = Jsonic.make() - j2.bnf('

::= "a" \n ::= "b"') - // 'a' is a terminal of p; q's result [b] is appended as a - // nested array. - assert.deepEqual(j2('a b'), ['a', ['b']]) + j2.bnf('p = "a" q\nq = "b"') + assert.deepEqual(j2('a b'), { + rule: 'p', + src: 'ab', + kids: [{ rule: 'q', src: 'b', kids: [] }], + }) + }) + + + it('ergonomic AST for composite rules (pair = name "=" value)', () => { + const j = Jsonic.make() + j.bnf(` +x = "x" name "=" value +name = 1*ALPHA +value = 1*DIGIT +`) + // "x" at the leading position keeps name/value as kids; both + // leaf rules return as `{rule, src, kids: []}`. + assert.deepEqual(j('xfoo=42'), { + rule: 'x', + src: 'xfoo=42', + kids: [ + { rule: 'name', src: 'foo', kids: [] }, + { rule: 'value', src: '42', kids: [] }, + ], + }) + }) + + + it('ergonomic AST for star-with-leading-terminal', () => { + // Star repetition with a leading terminal `[` keeps inner + // named rules visible in the AST (Paull's substitution only + // inlines LEADING refs; a `[` term at the alt's head blocks + // the inlining). + const j = Jsonic.make() + j.bnf(` +list = "[" item *("," item) "]" +item = 1*ALPHA +`) + assert.deepEqual(j('[a,b,c]'), { + rule: 'list', + src: '[a,b,c]', + kids: [ + { rule: 'item', src: 'a', kids: [] }, + { rule: 'item', src: 'b', kids: [] }, + { rule: 'item', src: 'c', kids: [] }, + ], + }) }) }) @@ -498,16 +948,16 @@ describe('bnf', () => { // CLI output serialises actions as FuncRef strings; only assert // that the dispatch to the user's start rule is in place. assert.equal(out.rule.__start__.open[0].p, 'greet') - assert.deepEqual(out.options.fixed.token, { - '#HI': 'hi', - '#HELLO': 'hello', - }) + // Case-insensitive literals appear in match.token after + // JSON serialisation as the RegExp's stringified form. + assert.deepEqual(Object.keys(out.options.match.token).sort(), + ['#HELLO', '#HI']) }) it('accepts inline bnf source', async () => { const cn = makeConsole() - await BnfCli.run([0, 0, ' ::= "x"'], cn) + await BnfCli.run([0, 0, 'g = "x"'], cn) const out = JSON.parse(cn.d.log[0][0]) assert.equal(out.rule.__start__.open[0].p, 'g') }) @@ -516,7 +966,7 @@ describe('bnf', () => { it('honours --start', async () => { const cn = makeConsole() await BnfCli.run( - [0, 0, '--start', 'b', ' ::= "x" ::= "y"'], + [0, 0, '--start', 'b', 'a = "x" b = "y"'], cn, ) const out = JSON.parse(cn.d.log[0][0]) @@ -526,7 +976,7 @@ describe('bnf', () => { it('reads from stdin when invoked with -', async () => { const cn = makeConsole() - cn.test$ = ' ::= "x"' + cn.test$ = 'g = "x"' await BnfCli.run([0, 0, '-'], cn) const out = JSON.parse(cn.d.log[0][0]) assert.equal(out.rule.__start__.open[0].p, 'g') @@ -544,7 +994,7 @@ describe('bnf', () => { const cn = makeConsole() const prevExitCode = process.exitCode await BnfCli.run( - [0, 0, ' ::= "hi" | "hello"', '--parse', 'hi'], + [0, 0, 'g = "hi" / "hello"', '--parse', 'hi'], cn, ) // Validation prints an `ok:` line to stdout; no spec dump. @@ -559,7 +1009,7 @@ describe('bnf', () => { const cn = makeConsole() const prevExitCode = process.exitCode await BnfCli.run( - [0, 0, ' ::= "hi"', '--parse', 'bye'], + [0, 0, 'g = "hi"', '--parse', 'bye'], cn, ) assert.equal(cn.d.log.length, 0) diff --git a/test/grammar/arith-leftrec.bnf b/test/grammar/arith-leftrec.bnf index b32c737..1f2864b 100644 --- a/test/grammar/arith-leftrec.bnf +++ b/test/grammar/arith-leftrec.bnf @@ -1,6 +1,7 @@ -# Same arithmetic language as arith.bnf, but written in the natural -# left-recursive form. The converter rewrites direct left recursion -# automatically (P → P α | β ⟹ P → β (α)*). - ::= "+" | "-" | - ::= "*" | "/" | - ::= "(" ")" | /[0-9]+/ +; Same arithmetic language as arith.bnf, in the natural +; left-recursive form. The converter rewrites direct left recursion +; automatically (P = P a / b => P = b *(a)). +expr = expr "+" term / expr "-" term / term +term = term "*" factor / term "/" factor / factor +factor = "(" expr ")" / number +number = 1*DIGIT diff --git a/test/grammar/arith.bnf b/test/grammar/arith.bnf index b616f80..0ecab80 100644 --- a/test/grammar/arith.bnf +++ b/test/grammar/arith.bnf @@ -1,5 +1,7 @@ -# Arithmetic grammar, stratified to avoid left recursion. -# Supports + - * / and parenthesised sub-expressions. - ::= ( "+" | "-" )* - ::= ( "*" | "/" )* - ::= "(" ")" | /[0-9]+/ +; Arithmetic grammar, stratified to avoid left recursion. +; Uses the RFC 5234 core rule DIGIT — auto-included by the +; converter when referenced but not locally defined. +expr = term *("+" term / "-" term) +term = factor *("*" factor / "/" factor) +factor = "(" expr ")" / number +number = 1*DIGIT diff --git a/test/grammar/greet.bnf b/test/grammar/greet.bnf index cbf77b9..d4b544e 100644 --- a/test/grammar/greet.bnf +++ b/test/grammar/greet.bnf @@ -1,2 +1,2 @@ -# Simple BNF fixture: alternation of terminal strings. - ::= "hi" | "hello" +; Simple BNF fixture: alternation of terminal strings. +greet = "hi" / "hello" diff --git a/test/grammar/json-subset.bnf b/test/grammar/json-subset.bnf index 49cc3ca..6258118 100644 --- a/test/grammar/json-subset.bnf +++ b/test/grammar/json-subset.bnf @@ -1,7 +1,9 @@ -# Minimal JSON-like subset: numbers, lowercase-letter string tokens, -# nested objects and arrays. The string regex is intentionally narrow -# so the grammar stays easy to exercise. - ::= /[0-9]+/ | /"[a-z]+"/ | | - ::= "{" ( ( "," )* )? "}" - ::= /"[a-z]+"/ ":" - ::= "[" ( ( "," )* )? "]" +; Minimal JSON-like subset: digits, nested objects, arrays. +; Names / strings are simplified to single-letter terminals until +; ABNF %x ranges arrive. +value = digit / letter / object / array +object = "{" [ member *("," member) ] "}" +member = letter ":" value +array = "[" [ value *("," value) ] "]" +digit = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" +letter = "a" / "b" / "c" diff --git a/test/grammar/pair.bnf b/test/grammar/pair.bnf index d621173..98727a2 100644 --- a/test/grammar/pair.bnf +++ b/test/grammar/pair.bnf @@ -1,2 +1,2 @@ -# Simple BNF fixture: two-terminal sequence. - ::= "a" "b" +; Simple BNF fixture: two-terminal sequence. +pair = "a" "b" diff --git a/test/grammar/rfc3986-uri.abnf b/test/grammar/rfc3986-uri.abnf new file mode 100644 index 0000000..159b034 --- /dev/null +++ b/test/grammar/rfc3986-uri.abnf @@ -0,0 +1,72 @@ +; RFC 3986 Appendix A — Collected ABNF for URI +; https://www.rfc-editor.org/rfc/rfc3986.txt +; +; Notes on differences from the RFC text: +; - `path-empty = 0` in the RFC is replaced by the +; equivalent empty sequence (0*pchar), since is RFC 5234 +; prose-val notation that has no direct equivalent here. +; - `path = path-abempty / path-absolute / …` moved to not be +; re-declared as an intermediate rule — URI itself picks one of +; the hier-part / relative-part alternatives already. +; - `absolute-URI`, `URI-reference`, `relative-ref`, +; `relative-part` omitted; we only exercise `URI`. + +URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] + +hier-part = "//" authority path-abempty + / path-absolute + / path-rootless + / path-empty + +scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) + +authority = [ userinfo "@" ] host [ ":" port ] +userinfo = *( unreserved / pct-encoded / sub-delims / ":" ) +host = IP-literal / IPv4address / reg-name +port = *DIGIT + +IP-literal = "[" ( IPv6address / IPvFuture ) "]" + +IPvFuture = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" ) + +IPv6address = 6( h16 ":" ) ls32 + / "::" 5( h16 ":" ) ls32 + / [ h16 ] "::" 4( h16 ":" ) ls32 + / [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 + / [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 + / [ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 + / [ *4( h16 ":" ) h16 ] "::" ls32 + / [ *5( h16 ":" ) h16 ] "::" h16 + / [ *6( h16 ":" ) h16 ] "::" + +h16 = 1*4HEXDIG +ls32 = ( h16 ":" h16 ) / IPv4address +IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet + +dec-octet = DIGIT ; 0-9 + / %x31-39 DIGIT ; 10-99 + / "1" 2DIGIT ; 100-199 + / "2" %x30-34 DIGIT ; 200-249 + / "25" %x30-35 ; 250-255 + +reg-name = *( unreserved / pct-encoded / sub-delims ) + +path-abempty = *( "/" segment ) +path-absolute = "/" [ segment-nz *( "/" segment ) ] +path-rootless = segment-nz *( "/" segment ) +path-empty = "" + +segment = *pchar +segment-nz = 1*pchar + +pchar = unreserved / pct-encoded / sub-delims / ":" / "@" + +query = *( pchar / "/" / "?" ) + +fragment = *( pchar / "/" / "?" ) + +pct-encoded = "%" HEXDIG HEXDIG + +unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" +sub-delims = "!" / "$" / "&" / "'" / "(" / ")" + / "*" / "+" / "," / ";" / "=" diff --git a/test/probe.test.js b/test/probe.test.js new file mode 100644 index 0000000..3fa4556 --- /dev/null +++ b/test/probe.test.js @@ -0,0 +1,236 @@ +/* Copyright (c) 2026 Richard Rodger and other contributors, MIT License */ +'use strict' + +// Tests for the probe + phase-retry pattern the BNF converter uses to +// resolve `[X D] Y` optional-prefix ambiguities — the canonical shape +// where X and Y share a character vocabulary and D is a terminal +// disambiguator. The rewriter emits a dispatcher that: +// 1. marks the token position and runs a failure-proof probe rule +// that greedily consumes the joint X ∪ Y vocab; +// 2. peeks ctx.t[0] on probe return; +// 3. rewinds to the mark and retries into either the `X D Y` branch +// (if D was seen) or the `Y` branch (if not). +// +// The pattern uses only standard jsonic primitives: r:/p:/c:/k: and +// ctx.mark/rewind/t — no new parser machinery is needed. + +const { describe, it } = require('node:test') +const assert = require('node:assert') + +const { Jsonic } = require('..') + + +describe('probe-dispatch', () => { + + describe('synthetic [X D] Y pattern', () => { + + // Canonical ambiguous grammar: + // top = [ X "@" ] Y + // X = *( LETTER ) (same vocab as Y) + // Y = *( LETTER ) + // After probe+phase-retry, inputs like "abc" (no @) take the Y + // branch and inputs like "ab@cd" take the X "@" Y branch. + const GRAMMAR = ` +top = [ X "@" ] Y +X = *( ALPHA ) +Y = *( ALPHA ) +` + + const makeParser = () => { + const j = Jsonic.make({ rewind: { history: 4096 } }) + j.bnf(GRAMMAR) + return j + } + + it('accepts the X-absent (Y-only) shape', () => { + const j = makeParser() + assert.doesNotThrow(() => j('abc')) + }) + + + it('accepts the X-present (X @ Y) shape', () => { + const j = makeParser() + assert.doesNotThrow(() => j('ab@cd')) + }) + + + it('accepts the empty X-present edge case', () => { + // X is nullable (zero letters), so "@cd" is still a valid + // X "@" Y parse — the probe consumes zero tokens before seeing + // @, peeks @, commits to the "with" branch. + const j = makeParser() + assert.doesNotThrow(() => j('@cd')) + }) + + + it('accepts empty input (both X and Y nullable)', () => { + const j = makeParser() + assert.doesNotThrow(() => j(' ')) + }) + + }) + + + describe('emitter shape', () => { + + it('synthesises probe/with/no/dispatch helper rules', () => { + const j = Jsonic.make({ rewind: { history: 4096 } }) + const spec = j.bnf(` +top = [ X "@" ] Y +X = *( ALPHA ) +Y = *( ALPHA ) +`) + // One probe-dispatch group per detected ambiguity, named after + // the enclosing rule + alt-offset. The `$with` / `$no` / + // `$probe` siblings are the committed branches plus the + // failure-proof probe helper. + const names = Object.keys(spec.rule) + assert.ok(names.some((n) => /top\$pd\d+$/.test(n)), + 'expected a dispatcher rule named like top$pdN') + assert.ok(names.some((n) => /top\$pd\d+\$probe$/.test(n)), + 'expected a probe helper rule') + assert.ok(names.some((n) => /top\$pd\d+\$with$/.test(n)), + 'expected a with-branch rule') + assert.ok(names.some((n) => /top\$pd\d+\$no$/.test(n)), + 'expected a no-branch rule') + }) + + + it('no-ambiguity grammars are left alone (no probe rules)', () => { + // The optional's body ends with a terminal that can't be in + // the tail's vocabulary, so FIRST-set dispatch suffices. + const j = Jsonic.make() + const spec = j.bnf(` +top = [ X "!" ] Y +X = *( ALPHA ) +Y = *DIGIT +`) + const names = Object.keys(spec.rule) + assert.equal(names.filter((n) => /\$pd\d+/.test(n)).length, 0, + 'expected no probe helpers — FIRST(X) ∩ FIRST(Y) is empty') + }) + + }) + + + describe('disambiguator semantics', () => { + + it('probe vocabulary excludes the disambiguator', () => { + // The `@` in [ X "@" ] is the disambiguator. If the probe + // helper included @ in its vocab, it would eat the @ and the + // peek would never see it — breaking the with-branch path. + const j = Jsonic.make({ rewind: { history: 4096 } }) + const spec = j.bnf(` +top = [ X "@" ] Y +X = *( ALPHA / "@" ) +Y = *( ALPHA ) +`) + const probeName = Object.keys(spec.rule).find((n) => /\$probe$/.test(n)) + assert.ok(probeName, 'expected a probe helper rule') + const tokMap = Object.fromEntries( + Object.entries(spec.options.fixed.token || {})) + const probeSrcs = spec.rule[probeName].open + .filter((a) => a.s) + .map((a) => tokMap[a.s[0]]) + assert.ok(!probeSrcs.includes('@'), + `probe vocab must not contain the disambiguator '@', got: ` + + JSON.stringify(probeSrcs)) + }) + + }) + + + describe('unhandled LL(k) ambiguities (documented limits)', () => { + + // The probe + phase-retry pattern covers `[X D] Y` shapes where + // D is a terminal and FIRST(X) ∩ FIRST(Y) ≠ ∅. It does NOT + // cover every LL(k) ambiguity: + // + // 1. Non-terminal disambiguators — `[ X B ] Y` where B itself + // derives multiple tokens. The current rewriter only peeks + // a single token for the disambiguator; there's no probe + // shape that decides from a multi-token witness. + // 2. Two top-level alts that share an arbitrarily-deep prefix + // with no local tie-breaker — e.g., `S = A Z / A Y` where + // A is nullable-or-long. Needs catch-and-rewind at the + // alt-dispatch level (true backtracking), which the + // current emitter doesn't provide. + // + // These tests are marked `.skip` — they document the capability + // boundary rather than assert specific failure modes. If/when + // the emitter gains generalised alt-level backtracking they can + // be promoted to passing tests. + + it.skip('rule = [ X B ] C, disambiguator is a nonterminal', () => { + // Would require a probe shape that peeks a bounded window of + // tokens matching B's FIRST (and possibly further) — beyond + // the single-token peek the current decide-action uses. + const GRAMMAR = ` +rule = [ X B ] C +X = *( ALPHA ) +B = "-" "-" +C = *( ALPHA ) +` + const j = Jsonic.make({ rewind: { history: 4096 } }) + j.bnf(GRAMMAR) + assert.doesNotThrow(() => j('abc--def')) + }) + + + it.skip('shared deep prefix with no terminal disambiguator', () => { + // `S = A Z / A Y` — without a disambiguating terminal between + // A and the tail, the probe pattern has nothing to peek for. + const GRAMMAR = ` +S = A Z / A Y +A = *( ALPHA ) +Z = "1" +Y = "2" +` + const j = Jsonic.make({ rewind: { history: 4096 } }) + j.bnf(GRAMMAR) + assert.doesNotThrow(() => j('abc2')) + }) + + }) + + + describe('RFC 3986 authority-style ambiguity', () => { + + // The archetypal real-world case: RFC 3986's authority rule, + // where `userinfo` and `reg-name` share a vocabulary and the `@` + // separator is the disambiguator. + const AUTHORITY = ` +authority = [ userinfo "@" ] host [ ":" port ] +userinfo = *( unreserved / ":" ) +host = reg-name +port = *DIGIT +reg-name = *( unreserved ) +unreserved = ALPHA / "-" / "." +` + + const makeParser = () => { + const j = Jsonic.make({ rewind: { history: 4096 } }) + j.bnf(AUTHORITY) + return j + } + + const ACCEPT = [ + 'example.com', + 'example.com:8080', + 'user@example.com', + 'user:pass@example.com', + 'user:pass@example.com:8080', + // Empty userinfo edge case. + '@example.com', + ] + + for (const input of ACCEPT) { + it(`accepts ${JSON.stringify(input)}`, () => { + const j = makeParser() + assert.doesNotThrow(() => j(input)) + }) + } + + }) + +}) diff --git a/test/rewind.test.js b/test/rewind.test.js new file mode 100644 index 0000000..fbc642f --- /dev/null +++ b/test/rewind.test.js @@ -0,0 +1,426 @@ +/* Copyright (c) 2026 Richard Rodger and other contributors, MIT License */ +'use strict' + +// Tests for the token rewind primitives exposed on ctx. +// `ctx.mark()` captures the current parse position; `ctx.rewind(m)` +// replays every token consumed since that mark by pushing them back +// onto the active lexer's pending-token queue. This is the +// foundation for seed-and-grow left recursion and other backtracking +// patterns. + +const { describe, it } = require('node:test') +const assert = require('node:assert') + +const { Jsonic } = require('..') + + +function make_norules(opts) { + let j = Jsonic.make(opts) + let rns = j.rule() + Object.keys(rns).map((rn) => j.rule(rn, null)) + return j +} + + +describe('rewind', () => { + + it('ctx.v records each consumed token in order', () => { + let j = make_norules({ + rule: { start: 'top' }, + fixed: { token: { Ta: 'a', Tb: 'b', Tc: 'c' } }, + }) + let { Ta, Tb, Tc } = j.token + + let recorded = null + + j.rule('top', (rs) => + rs + .open([{ s: [Ta, Tb, Tc] }]) + .close([{ + s: '#ZZ', + // Alt actions fire after the v-history push for this alt, + // so by the time this runs all four tokens — a, b, c, and + // the end sentinel — are on the stack. + a: (r, ctx) => { recorded = ctx.v.map((t) => t.src) }, + }]), + ) + + j('abc') + assert.deepEqual(recorded, ['a', 'b', 'c', '']) + }) + + + it('v1 and v2 still read the top of the history stack', () => { + let j = make_norules({ + rule: { start: 'top' }, + fixed: { token: { Ta: 'a', Tb: 'b', Tc: 'c' } }, + }) + let { Ta, Tb, Tc } = j.token + + let seen = null + + j.rule('top', (rs) => + rs + .open([{ + s: [Ta, Tb, Tc], + // Alt actions run after the v-history push, so v1 is the + // most-recently consumed token of this match (c) and v2 is + // the one before it (b). + a: (r, ctx) => { + seen = { v1: ctx.v1.src, v2: ctx.v2.src } + }, + }]) + .close([{ s: '#ZZ' }]), + ) + + j('abc') + assert.deepEqual(seen, { v1: 'c', v2: 'b' }) + }) + + + it('rewind replays consumed tokens so they re-lex forward', () => { + // A rule that consumes three fixed tokens, rewinds to the start, + // then consumes them again. Without rewind, the second consume + // attempt would hit end-of-source and fail. + let j = make_norules({ + rule: { start: 'top' }, + fixed: { token: { Ta: 'a', Tb: 'b', Tc: 'c' } }, + }) + let { Ta, Tb, Tc } = j.token + + let trace = [] + + j.rule('top', (rs) => + rs + .open([{ + s: [Ta, Tb, Tc], + a: (r, ctx) => { + trace.push('first:' + ctx.v.slice(-3).map((t) => t.src).join('')) + const mark = 0 // start of the parse history + ctx.rewind(mark) + trace.push('after-rewind-v-len:' + ctx.v.length) + }, + p: 'again', + }]) + .close([{ s: '#ZZ' }]), + ) + + j.rule('again', (rs) => + rs + .open([{ + s: [Ta, Tb, Tc], + a: (r, ctx) => { + trace.push('second:' + ctx.v.slice(-3).map((t) => t.src).join('')) + }, + }]), + ) + + j('abc') + assert.deepEqual(trace, [ + 'first:abc', + 'after-rewind-v-len:0', + 'second:abc', + ]) + }) + + + it('partial rewind replays only the tokens after the mark', () => { + let j = make_norules({ + rule: { start: 'top' }, + fixed: { token: { Ta: 'a', Tb: 'b', Tc: 'c', Td: 'd' } }, + }) + let { Ta, Tb, Tc, Td } = j.token + + let second = null + + j.rule('top', (rs) => + rs + .open([{ + s: [Ta, Tb, Tc, Td], + a: (r, ctx) => { + // Mark right after a, then rewind to undo bcd. + const markAfterA = 1 + ctx.rewind(markAfterA) + }, + p: 'tail', + }]) + .close([{ s: '#ZZ' }]), + ) + + j.rule('tail', (rs) => + rs + .open([{ + s: [Tb, Tc, Td], + a: (r, ctx) => { + second = ctx.v.map((t) => t.src).join('') + }, + }]), + ) + + j('abcd') + // Full history at the end of tail's open: all four tokens again + // (a was not rewound; bcd were rewound and re-consumed). + assert.equal(second, 'abcd') + }) + + + it('rewind with no tokens consumed since the mark is a no-op', () => { + let j = make_norules({ + rule: { start: 'top' }, + fixed: { token: { Ta: 'a' } }, + }) + let { Ta } = j.token + + let ok = false + + j.rule('top', (rs) => + rs + .open([{ + s: [Ta], + a: (r, ctx) => { + const mark = ctx.mark() + // Same mark, no consumption → rewind is a no-op. + ctx.rewind(mark) + ok = ctx.v.length === mark + }, + }]) + .close([{ s: '#ZZ' }]), + ) + + j('a') + assert.equal(ok, true) + }) + + + it('rewind enables speculative lookahead', () => { + // Use rewind to implement a peek-and-commit pattern: the rule + // consumes a token to inspect its value, then rewinds and + // dispatches to one of two continuations based on what it saw. + // Without rewind this would need either an N-token `s:` pattern + // or custom `c:` predicates reading `ctx.t[i]`; rewind gives us + // an imperative alternative that's the backbone of any + // backtracking or seed-and-grow scheme. + let j = make_norules({ + rule: { start: 'top' }, + fixed: { token: { Ta: 'a', Tb: 'b', Tc: 'c' } }, + }) + const Ta = j.token('Ta') + const Tb = j.token('Tb') + const Tc = j.token('Tc') + + let branch = null + + j.rule('top', (rs) => + rs + .open([{ + // Peek one token, rewind, then dispatch based on what we saw. + s: [Ta], + a: (r, ctx) => { + const saw = r.o[0].src + ctx.rewind(0) // replay the a we just consumed + r.u.branch = saw === 'a' ? 'A' : 'Z' + }, + }]) + .close([{ + c: (r) => r.u.branch === 'A', + s: [Ta, Tb, Tc], + a: () => { branch = 'A' }, + }, { + s: '#ZZ', + }]), + ) + + j('a b c') + assert.equal(branch, 'A') + }) + + + it('rewind from inside a close-state action also replays', () => { + // Exercise the path where the rewind happens from close-state + // alt logic. `rule.k` survives an `r:` replacement (`u` does + // not), so we store the "already rewound once" flag on `k` to + // guarantee termination. + let j = make_norules({ + rule: { start: 'top' }, + fixed: { token: { Ta: 'a', Tb: 'b' } }, + }) + let { Ta, Tb } = j.token + + let attempts = 0 + + j.rule('top', (rs) => + rs + .open([{ s: [Ta, Tb], a: () => { attempts++ } }]) + .close([{ + c: (r) => !r.k.rewound, + a: (r, ctx) => { + r.k.rewound = true + ctx.rewind(0) // replay both tokens so open can re-match + }, + r: 'top', + }, { + s: '#ZZ', + }]), + ) + + j('ab') + // Open fired once on the initial pass and once again after rewind. + assert.equal(attempts, 2) + }) + + + it('options.rewind.history caps ctx.v size via batch eviction', () => { + // With a capacity of 4, ctx.v never exceeds 2*cap = 8 entries + // (eviction happens once the array crosses 2*cap; amortised + // O(1) per push). + let j = make_norules({ + rule: { start: 'top' }, + fixed: { token: { Ta: 'a' } }, + rewind: { history: 4 }, + }) + let { Ta } = j.token + + let maxSeen = 0 + j.rule('top', (rs) => + rs + .open([{ + // Consume a's one at a time via r:self, tracking the peak + // size of ctx.v. + s: [Ta], + a: (r, ctx) => { if (ctx.v.length > maxSeen) maxSeen = ctx.v.length }, + }]) + .close([ + { s: [Ta], b: 1, r: 'top' }, + { s: '#ZZ' }, + ]), + ) + + // 20 a's — well above 2*cap. + j('a a a a a a a a a a a a a a a a a a a a') + assert.ok(maxSeen <= 2 * 4, + `ctx.v grew to ${maxSeen}, expected <= ${2 * 4}`) + // The cap never shrinks below `history` itself, so the parser + // can still see recent tokens. + assert.ok(maxSeen >= 4, + `ctx.v only reached ${maxSeen}, expected >= 4`) + }) + + + it('marks stay valid across ring-buffer eviction', () => { + // Even after the ring evicts older tokens, a mark captured + // *within* the retained window rewinds correctly. vAbs is + // absolute so the mark's meaning doesn't depend on ctx.v's + // current indexing. + let j = make_norules({ + rule: { start: 'top' }, + fixed: { token: { Ta: 'a' } }, + rewind: { history: 4 }, + }) + let { Ta } = j.token + + let rewound = null + + j.rule('top', (rs) => + rs + .open([{ + // Consume five a's, then rewind to right after the third. + s: [Ta, Ta, Ta, Ta, Ta], + a: (r, ctx) => { + const after3 = ctx.vAbs - 2 // absolute mark after the 3rd a + ctx.rewind(after3) + rewound = ctx.vAbs + }, + }]) + .close([ + { s: [Ta, Ta], a: () => {} }, // re-consume the replayed 4th and 5th + { s: '#ZZ' }, + ]), + ) + + j('a a a a a') + assert.equal(rewound, 3) + }) + + + it('rewinding past the retained window throws', () => { + let j = make_norules({ + rule: { start: 'top' }, + fixed: { token: { Ta: 'a' } }, + rewind: { history: 2 }, + }) + let { Ta } = j.token + + j.rule('top', (rs) => + rs + .open([{ + // Try to rewind to absolute index 0 after consuming six a's; + // with history=2 and batch eviction at 2*cap=4, the oldest + // mark still in reach is 4, so target=0 is out of range. + s: [Ta, Ta, Ta, Ta, Ta, Ta], + a: (r, ctx) => { ctx.rewind(0) }, + }]) + .close([{ s: '#ZZ' }]), + ) + + assert.throws( + () => j('a a a a a a'), + /ctx\.rewind target 0 is outside the retained history/, + ) + }) + + + it('default history is 64 (retains every token for small parses)', () => { + // The default cap is 64, which means parses shorter than the cap + // retain every consumed token — identical to an unbounded + // history for small/medium inputs. Batch eviction only kicks + // in once ctx.v crosses 2 * 64 = 128 entries. + let j = make_norules({ + rule: { start: 'top' }, + fixed: { token: { Ta: 'a' } }, + }) + let { Ta } = j.token + + let finalV = 0 + j.rule('top', (rs) => + rs + .open([{ + s: [Ta, Ta, Ta, Ta, Ta, Ta, Ta, Ta, Ta, Ta], + a: (r, ctx) => { finalV = ctx.v.length }, + }]) + .close([{ s: '#ZZ' }]), + ) + + j('a a a a a a a a a a') + assert.equal(finalV, 10) + }) + + + it('Infinity history retains every token regardless of input size', () => { + // Opt in to unbounded retention by passing Infinity. + let j = make_norules({ + rule: { start: 'top' }, + fixed: { token: { Ta: 'a' } }, + rewind: { history: Infinity }, + }) + let { Ta } = j.token + + let maxV = 0 + j.rule('top', (rs) => + rs + .open([{ + s: [Ta], + a: (r, ctx) => { if (ctx.v.length > maxV) maxV = ctx.v.length }, + }]) + .close([ + { s: [Ta], b: 1, r: 'top' }, + { s: '#ZZ' }, + ]), + ) + + // 200 a's — would be batch-evicted under the default cap of 64 + // (max 128), but Infinity keeps every one. + j(Array(200).fill('a').join(' ')) + assert.ok(maxV >= 200, `expected >= 200 retained, got ${maxV}`) + }) + +}) diff --git a/test/rfc3986.test.js b/test/rfc3986.test.js new file mode 100644 index 0000000..417ce67 --- /dev/null +++ b/test/rfc3986.test.js @@ -0,0 +1,179 @@ +/* Copyright (c) 2026 Richard Rodger and other contributors, MIT License */ +'use strict' + +// End-to-end test for RFC 3986 Appendix A — the collected ABNF +// grammar for URI. https://www.rfc-editor.org/rfc/rfc3986.txt +// +// The fixture `test/grammar/rfc3986-uri.abnf` contains the full +// grammar, one rule per RFC 3986 name, using the same syntax the +// RFC prints. This exercises every ABNF feature the converter +// implements: +// - bare-identifier rule names with hyphens (path-abempty …) +// - `=`, `=/`, `/`, `[ … ]`, `( … )` +// - prefix repetition *A, 1*A, m*nA, *nA, m*A, nA +// - numeric values %x41-5A, %x30-39, … +// - case-insensitive quoted literals (default) +// - automatic inclusion of the core rules (ALPHA / DIGIT / HEXDIG) +// - `;` comments +// +// The RFC 3986 grammar is not LL(k) — the `authority` production +// is ambiguous on its `[ userinfo "@" ]` prefix, because `userinfo` +// can match the same character set as `reg-name`. The converter +// handles this via the probe + phase-retry dispatcher it emits for +// every detected `[X D] Y` pattern (see src/bnf.ts and the +// dedicated coverage in test/probe.test.js). Both authority shapes +// — with and without userinfo — now parse cleanly; this test drives +// the end-to-end integration. + +const { describe, it } = require('node:test') +const assert = require('node:assert') +const Fs = require('node:fs') +const Path = require('node:path') + +const { Jsonic } = require('..') + +const GRAMMAR = Fs.readFileSync( + Path.join(__dirname, 'grammar', 'rfc3986-uri.abnf'), +).toString() + + +describe('rfc3986', () => { + + describe('grammar compilation', () => { + + it('compiles the full RFC 3986 grammar without error', () => { + // Just building the jsonic rule set is already a non-trivial + // test — 30 productions, bounded repetition, numeric ranges, + // nullable alternatives, transitive core-rule inclusion, and + // the ABNF-wide case-insensitive string default all have to + // co-exist cleanly. + const j = Jsonic.make({ rewind: { history: 4096 } }) + assert.doesNotThrow(() => j.bnf(GRAMMAR)) + }) + + + it('every RFC 3986 production survives into the emitted spec', () => { + const j = Jsonic.make({ rewind: { history: 4096 } }) + const spec = j.bnf(GRAMMAR) + // Every name from the .abnf file should appear as a rule in + // the spec (plus `__start__` and the generated helpers). + const ruleNames = Object.keys(spec.rule) + const expected = [ + 'URI', 'hier-part', 'scheme', 'authority', 'userinfo', + 'host', 'port', 'IP-literal', 'IPvFuture', 'IPv6address', + 'h16', 'ls32', 'IPv4address', 'dec-octet', 'reg-name', + 'path-abempty', 'path-absolute', 'path-rootless', + 'path-empty', 'segment', 'segment-nz', 'pchar', 'query', + 'fragment', 'pct-encoded', 'unreserved', 'sub-delims', + // Core rules the grammar uses implicitly: + 'ALPHA', 'DIGIT', 'HEXDIG', + ] + for (const name of expected) { + assert.ok( + ruleNames.includes(name), + `missing rule '${name}' in spec (only saw ${ruleNames.length} rules)`, + ) + } + }) + + + it('detects and rewrites the authority ambiguity', () => { + // The `[ userinfo "@" ] host [ ":" port ]` shape in `authority` + // is ambiguous under FIRST-set dispatch. The rewriter + // synthesises a probe + phase-retry dispatcher for it; the + // presence of `authority$pdN$probe` / `$with` / `$no` rules in + // the spec confirms the rewrite fired. + const j = Jsonic.make({ rewind: { history: 4096 } }) + const spec = j.bnf(GRAMMAR) + const names = Object.keys(spec.rule) + assert.ok(names.some((n) => /^authority\$pd\d+\$probe$/.test(n)), + 'expected a probe helper for authority') + assert.ok(names.some((n) => /^authority\$pd\d+\$with$/.test(n)), + 'expected a with-branch rule for authority') + assert.ok(names.some((n) => /^authority\$pd\d+\$no$/.test(n)), + 'expected a no-branch rule for authority') + }) + + }) + + + describe('URI acceptance', () => { + + const parser = (() => { + const j = Jsonic.make({ rewind: { history: 4096 } }) + j.bnf(GRAMMAR) + return j + })() + + const ACCEPT = [ + // path-rootless: scheme ':' segment … + 'urn:isbn:0451450523', + 'mailto:alice@example.com', + 'tag:yaml.org,2002:int', + // IP-literal authority (the leading '[' disambiguates) + 'http://[::1]/', + // Authority without userinfo (the canonical LL(k)-ambiguous + // case the probe dispatcher now resolves): + 'http://example.com', + 'http://example.com:8080', + // Authority with userinfo (same probe path, different phase): + 'ftp://user@host', + 'http://user@example.com:8080', + 'http://user:pass@example.com:8080/some/path', + // Full URI exercising every optional tail: + 'https://www.example.org/path/to/resource?name=value&other=thing#section', + ] + + for (const uri of ACCEPT) { + it(`accepts ${JSON.stringify(uri)}`, { timeout: 5000 }, () => { + assert.doesNotThrow(() => parser(uri)) + }) + } + + // Obviously invalid — must reject. + const REJECT = [ + 'not a uri', // space disallowed at this position + ':foo', // scheme can't start with ':' + ] + + for (const uri of REJECT) { + it(`rejects ${JSON.stringify(uri)}`, { timeout: 5000 }, () => { + assert.throws(() => parser(uri), /unexpected/) + }) + } + + }) + + + describe('remaining LL(k) limitations', () => { + + // The probe + phase-retry pattern resolves the specific + // `[X D] Y` shape where X and Y share a character vocabulary + // and D is a terminal disambiguator. It does NOT handle every + // imaginable LL(k) ambiguity — in particular, ambiguities where + // the disambiguator is itself a nonterminal, or where two + // alternatives share an arbitrarily-deep prefix with no local + // tie-breaker, still require true backtracking at the + // alt-dispatch level (a catch-and-rewind mechanism the emitter + // doesn't provide). + // + // No such unhandled shape appears in RFC 3986 as written; the + // remaining edge cases are documented here rather than asserted + // so the converter's capability boundary stays visible. If a + // future grammar exposes a genuinely un-probeable ambiguity, + // add the concrete failing input as a `.skip` or `.todo` test + // with a one-line explanation. + + it.skip('placeholder for grammars with non-terminal disambiguators', () => { + // Example shape: + // rule = [ A B ] C where A, B, C are all nonterminals, + // FIRST(A) ∩ FIRST(C) ≠ ∅, and B is + // not a terminal (so there's no single + // token to peek for). + // The current rewriter requires `D` to be a term / regex + // element; detection skips this shape with no rewrite. + }) + + }) + +})