class Expression { constructor(op, left, right) { this.op = op this.left = left this.right = right } eval() { return evalExpression(this) } } function evalExpression(expr) { let tempLeft let tempRight if (typeof(expr.left) === "object") { // Check if left type is another expression tempLeft = evalExpression(expr.left) } else { tempLeft = expr.left } if (typeof(expr.right) === "object") { // Check if right type is another expression tempRight = evalExpression(expr.right) } else { tempRight = expr.right } if (typeof(tempLeft) === "number" & typeof(tempRight) === "number") { // Make sure both inputs are number if (expr.op === "+") { return tempLeft + tempRight } else if(expr.op === "-") { return tempLeft - tempRight } else if(expr.op === "*") { return tempLeft * tempRight } else if(expr.op === "/") { return tempLeft / tempRight } else { // Case for when there is no valid provided operator return "Invalid operator syntax" } } else { //Case for when the left or right are not numbers return "Invalid number syntax" } } exports.Expression = Expression;