code: def visit_BinaryOperation(self, 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)
docs: Visitor for `BinaryOperation` AST node.