@thi.ng/parse
Version:
Purely functional parser combinators & AST generation for generic inputs
33 lines (32 loc) • 643 B
JavaScript
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
};