UNPKG

@thi.ng/parse

Version:

Purely functional parser combinators & AST generation for generic inputs

33 lines (32 loc) 643 B
class StringReader { constructor(_src) { this._src = _src; } read(state) { return this._src[state.p]; } prev(state) { return this._src[state.p - 1]; } next(state) { if (state.done) return; if (this._src[state.p] === "\n") { state.l++; state.c = 1; } else { state.c++; } state.done = ++state.p >= this._src.length; } isDone(state) { return state.done = state.p >= this._src.length; } format(state) { return `offset ${state.p} (${state.l}:${state.c})`; } } const defStringReader = (input) => new StringReader(input); export { StringReader, defStringReader };