class_docstr: Uses the same visitor pattern as c_ast.NodeVisitor, but modified to
  return a value from each visit method, using string accumulation in
  generic_visit.
class_docstr_tok: ["Uses","the","same","visitor","pattern","as","c_ast.NodeVisitor",",","but","modified","to","return","a","value","from","each","visit","method",",","using","string","accumulation","in","generic_visit","."]
code: def visit_BinaryOp(self, n):
      # Note: all binary operators are left-to-right associative
      #
      # If `n.left.op` has a stronger or equally binding precedence in
      # comparison to `n.op`, no parenthesis are needed for the left:
      # e.g., `(a*b) + c` is equivalent to `a*b + c`, as well as
      #       `(a+b) - c` is equivalent to `a+b - c` (same precedence).
      # If the left operator is weaker binding than the current, then
      # parentheses are necessary:
      # e.g., `(a+b) * c` is NOT equivalent to `a+b * c`.
      lval_str = self._parenthesize_if(
          n.left,
          lambda d: not (
              self._is_simple_node(d)
              or self.reduce_parentheses
              and isinstance(d, c_ast.BinaryOp)
              and self.precedence_map[d.op] >= self.precedence_map[n.op]
          ),
      )
      # If `n.right.op` has a stronger -but not equal- binding precedence,
      # parenthesis can be omitted on the right:
      # e.g., `a + (b*c)` is equivalent to `a + b*c`.
      # If the right operator is weaker or equally binding, then parentheses
      # are necessary:
      # e.g., `a * (b+c)` is NOT equivalent to `a * b+c` and
      #       `a - (b+c)` is NOT equivalent to `a - b+c` (same precedence).
      rval_str = self._parenthesize_if(
          n.right,
          lambda d: not (
              self._is_simple_node(d)
              or self.reduce_parentheses
              and isinstance(d, c_ast.BinaryOp)
              and self.precedence_map[d.op] > self.precedence_map[n.op]
          ),
      )
      return "%s %s %s" % (lval_str, n.op, rval_str)
  
imports: from .None import c_ast
label_desc: Use image node_id 12 for calling the CGenerator obj's underlying member method code with example usage: obj.visit_BinaryOp(n) and returns: unknown