crazy-parser
Version:
A light-weight parser combinator
23 lines (22 loc) • 751 B
JavaScript
import { Parser } from "./index";
export function char(c) {
return new Parser((input, state) => {
if (state.index >= input.length)
return new Error();
const char = String.fromCodePoint(input[state.index]);
if (char != c)
return new Error();
state.index += 1;
});
}
export function str(s) {
const buffer = Uint32Array.from(Array.from(s).map(c => c.codePointAt(0)));
return new Parser((input, state) => {
if (state.index + buffer.length > input.length)
return new Error();
for (let i = 0; i < buffer.length; i += 1)
if (input[state.index + i] != buffer[i])
return new Error();
state.index += buffer.length;
});
}