def visit_BinaryOperation(self, node):
        """Visitor for `BinaryOperation` AST node."""
        if node.op.nature == Nature.PLUS:
            return self.visit(node.left) + self.visit(node.right)
        elif node.op.nature == Nature.MINUS:
            return self.visit(node.left) - self.visit(node.right)
        elif node.op.nature == Nature.MUL:
            return self.visit(node.left) * self.visit(node.right)
        elif node.op.nature == Nature.DIV:
            return self.visit(node.left) / self.visit(node.right)
        elif node.op.nature == Nature.INT_DIV:
            return self.visit(node.left) // self.visit(node.right)
        elif node.op.nature == Nature.EQ:
            return self.visit(node.left) == self.visit(node.right)
        elif node.op.nature == Nature.NE:
            return self.visit(node.left) != self.visit(node.right)
        elif node.op.nature == Nature.LE:
            return self.visit(node.left) <= self.visit(node.right)
        elif node.op.nature == Nature.GE:
            return self.visit(node.left) >= self.visit(node.right)
        elif node.op.nature == Nature.LT:
            return self.visit(node.left) < self.visit(node.right)
        elif node.op.nature == Nature.GT:
            return self.visit(node.left) > self.visit(node.right)
        elif node.op.nature == Nature.OR:
            return self.visit(node.left) or self.visit(node.right)
        elif node.op.nature == Nature.AND:
            return self.visit(node.left) and self.visit(node.right)
Visitor for `BinaryOperation` AST node.