parsergen-starter
Version:
A complete parser generator starter with PEG.js, optional Moo lexer, and VS Code integration
37 lines (32 loc) • 862 B
text/typescript
type ASTNode =
| { type: "NumberLiteral"; value: number }
| {
type: "BinaryExpression";
operator: string;
left: ASTNode;
right: ASTNode;
};
export function evaluate(node: ASTNode): number {
switch (node.type) {
case "NumberLiteral":
return node.value;
case "BinaryExpression": {
const left = evaluate(node.left);
const right = evaluate(node.right);
switch (node.operator) {
case "+":
return left + right;
case "-":
return left - right;
case "*":
return left * right;
case "/":
return left / right;
default:
throw new Error(`Unknown operator: ${node.operator}`);
}
}
default:
throw new Error(`Unknown node type: ${(node as ASTNode).type}`);
}
}