def visit_power_node(self, node): if type(self.visit(node.node_a).value) == str or type( self.visit(node.node_b).value) == str: return Letter( f"({self.visit(node.node_a).value}) ^ ({self.visit(node.node_b).value})" ) return Number( self.visit(node.node_a).value**self.visit(node.node_b).value)
def visit_multiply_node(self, node): if type(self.visit(node.node_a).value) == str or type( self.visit(node.node_b).value) == str: return Letter( f"{self.visit(node.node_a).value} * {self.visit(node.node_b).value}" ) return Number( self.visit(node.node_a).value * self.visit(node.node_b).value)
def visit_subtract_node(self, node): if type(self.visit(node.node_a).value) == str or type( self.visit(node.node_b).value) == str: return Letter( f"{self.visit(node.node_a).value} - {self.visit(node.node_b).value}" ) return Number( self.visit(node.node_a).value - self.visit(node.node_b).value)
def visit_add_node(self, node): if type(self.visit(node.node_a).value) == str or type( self.visit(node.node_b).value) == str: return Letter( f"{self.visit(node.node_a).value} + {self.visit(node.node_b).value}" ) return Number( self.visit(node.node_a).value + self.visit(node.node_b).value)
def visit_divide_node(self, node): if self.visit(node.node_b).value == 0.0: print(node) elif type(self.visit(node.node_a).value) == str or type( self.visit(node.node_b).value) == str: return Letter( f"{self.visit(node.node_a).value} / {self.visit(node.node_b).value}" ) try: return Number( self.visit(node.node_a).value / self.visit(node.node_b).value) except Exception: raise Exception("Runtime math error")
def visit_square_node(self, node): if type(self.visit(node.node).value) == str: return Letter(f"sqrt({self.visit(node.node)})") return Number(sqrt(self.visit(node.node).value))
def visit_exponent_node(self, node): if type(self.visit(node.node).value) == str: return Letter(f"exp({self.visit(node.node)})") return Number(exp(self.visit(node.node).value))
def visit_cosinus_node(self, node): if type(self.visit(node.node).value) == str: return Letter(f"cos({self.visit(node.node)})") return Number(cos(self.visit(node.node).value))
def visit_minus_node(self, node): if type(self.visit(node.node).value) == str: return Letter(f"-{self.visit(node.node)}") return Number(-self.visit(node.node).value)
def visit_number_node(node): return Number(node.value)