lexer = (text, line) => {
const open = "({<[";
const close = ")}>]";
const expectations = [];
let corrupted = null;
[...text].forEach(
(actual, column) => {
if (open.includes(actual))
expectations.push(expected(actual));
if (close.includes(actual)) {
const expected = expectations.pop();
if (expected !== actual) {
corrupted = ({line, column, expected, actual, status: "corrupt"});
}
}
}
)
return corrupted || ({expectations, status: "incomplete"});
}