code: def create_binary_node(self, operator, left, right, param=None):
          
  
          # Join operators
          if operator == self.grammar.syntax.join_op:
              node = CrossJoinNode(left, right)
  
          elif operator == self.grammar.syntax.natural_join_op:
              node = NaturalJoinNode(left, right)
  
          elif operator == self.grammar.syntax.theta_join_op:
              conditions = ' '.join(flatten(param))
              node = ThetaJoinNode(left, right, conditions)
  
          # Set operators
          elif operator == self.grammar.syntax.union_op:
              node = UnionNode(left, right)
  
          elif operator == self.grammar.syntax.difference_op:
              node = DifferenceNode(left, right)
  
          elif operator == self.grammar.syntax.intersect_op:
              node = IntersectNode(left, right)
  
          else:
              raise ValueError
  
          return node
docs: Return a Node whose type depends on the specified operator.
  
          :param operator: A relational algebra operator (see constants.py)
          :return: A Node.