class_docstr: Methods in this class recursively traverse an AST and
  output source code for the abstract syntax; original formatting
  is disregarged.
class_docstr_tok: ["Methods","in","this","class","recursively","traverse","an","AST","and","output","source","code","for","the","abstract","syntax",";","original","formatting","is","disregarged","."]
code: def __binary_op(self, t, symbol):
      # Check if parenthesis are needed on left side and then dispatch
      has_paren = False
      left_class = str(t.left.__class__)
      if (
          left_class in op_precedence.keys()
          and op_precedence[left_class]
          < op_precedence[str(t.__class__)]
      ):
          has_paren = True
      if has_paren:
          self._write("(")
      self._dispatch(t.left)
      if has_paren:
          self._write(")")
      # Write the appropriate symbol for operator
      self._write(symbol)
      # Check if parenthesis are needed on the right side and then dispatch
      has_paren = False
      right_class = str(t.right.__class__)
      if (
          right_class in op_precedence.keys()
          and op_precedence[right_class]
          < op_precedence[str(t.__class__)]
      ):
          has_paren = True
      if has_paren:
          self._write("(")
      self._dispatch(t.right)
      if has_paren:
          self._write(")")
  
imports: from __future__ import division, absolute_import, print_function
  import sys
  from compiler.ast import Const, Name, Tuple, Div, Mul, Sub, Add
label_desc: Use image node_id 53 for calling the UnparseCompilerAst obj's underlying member method code with example usage: obj.__binary_op(t, symbol) without return types