@thi.ng/parse
Version:
Purely functional parser combinators & AST generation for generic inputs
25 lines (24 loc) • 629 B
JavaScript
import { xform } from "../combinators/xform.js";
import { defContext } from "../context.js";
import { xfJoin } from "./join.js";
const xfNest = (parser) => (scope, ctx) => {
if (!scope) return;
const src = scope.result || xfJoin(scope.copy()).result;
const inner = defContext(src, ctx.opts);
const state = scope.state;
if (state) {
const istate = inner.scope.state;
istate.l = state.l;
istate.c = state.c;
}
if (parser(inner)) {
scope.result = null;
scope.children = inner.children;
}
return scope;
};
const nest = (outer, inner) => xform(outer, xfNest(inner));
export {
nest,
xfNest
};