simc-ast-builder
Version:
Parser and AST generator for SimulationCraft files
76 lines • 2.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.handleMultiplicativeExpr = exports.handleMulExpr = exports.handleModExpr = exports.handleDivExpr = void 0;
/**
* Handler for multiplication expressions
*/
const handleMulExpr = (ctx, visitor) => {
// Only handle if this is a multiplication
if (!ctx.OP_MUL()) {
throw new Error("Not a multiplication expression");
}
return {
expressionType: "numeric",
kind: "expression",
left: visitor.visit(ctx.expression(0)),
nodeType: "multiplicative",
operator: "mul",
right: visitor.visit(ctx.expression(1)),
};
};
exports.handleMulExpr = handleMulExpr;
/**
* Handler for division expressions
*/
const handleDivExpr = (ctx, visitor) => {
// Only handle if this is a division
if (!ctx.OP_DIV()) {
throw new Error("Not a division expression");
}
return {
expressionType: "numeric",
kind: "expression",
left: visitor.visit(ctx.expression(0)),
nodeType: "multiplicative",
operator: "div",
right: visitor.visit(ctx.expression(1)),
};
};
exports.handleDivExpr = handleDivExpr;
/**
* Handler for modulus expressions
*/
const handleModExpr = (ctx, visitor) => {
// Only handle if this is a modulus
if (!ctx.OP_MOD()) {
throw new Error("Not a modulus expression");
}
return {
expressionType: "numeric",
kind: "expression",
left: visitor.visit(ctx.expression(0)),
nodeType: "multiplicative",
operator: "mod",
right: visitor.visit(ctx.expression(1)),
};
};
exports.handleModExpr = handleModExpr;
/**
* Generic handler for all multiplicative expressions (* % %%)
*/
const handleMultiplicativeExpr = (ctx, visitor) => {
if (ctx.OP_MUL()) {
return handleMulExpr(ctx, visitor);
}
else if (ctx.OP_DIV()) {
return handleDivExpr(ctx, visitor);
}
else if (ctx.OP_MOD()) {
return handleModExpr(ctx, visitor);
}
else {
throw new Error("Unknown multiplicative operator");
}
};
exports.handleMultiplicativeExpr = handleMultiplicativeExpr;
//# sourceMappingURL=MultiplicativeExprHandler.js.map