const m = new Matcher({
start: new RuleApplication("exp"),
exp: new Sequence([
new RuleApplication("var"),
new Repetition(
new Sequence([new RuleApplication("op"), new RuleApplication("var")]),
),
]),
op: new Choice([new Terminal("+"), new Terminal("-")]),
var: new Choice([new Terminal("x"), new Terminal("y"), new Terminal("z")]),
});
function assertOk(val) {
if (val == null) {
throw new Error("Assertion failed");
}
}
assertOk(m.match("x"));
assertOk(m.match("x-z"));
assertOk(m.match("x+y-z"));
assertOk(!m.match("x+y-"));