class Unparser::Writer::Binary

def dispatch

def dispatch
  if node.type.eql?(:and) && left.type.equal?(:or)
    emit_with(KEYWORD_TOKENS)
  else
    left_emitter.write_to_buffer
    write(' ', MAP.fetch(effective_symbol), ' ')
    visit(right)
  end
end

def effective_symbol

def effective_symbol
  if NEED_KEYWORD.include?(right.type) || NEED_KEYWORD.include?(left.type)
    return keyword_symbol
  end
  unless left_emitter.symbol_name
    return operator_symbol
  end
  keyword_symbol
end

def emit_operator

def emit_operator
  emit_with(OPERATOR_TOKENS)
end

def emit_with(map)

def emit_with(map)
  visit(left)
  write(' ', map.fetch(node.type), ' ')
  visit(right)
end

def keyword_symbol

def keyword_symbol
  KEYWORD_SYMBOLS.fetch(node.type)
end

def left_emitter

def left_emitter
  emitter(left)
end

def operator_symbol

def operator_symbol
  OPERATOR_SYMBOLS.fetch(node.type)
end

def right_emitter

def right_emitter
  emitter(right)
end

def symbol_name

def symbol_name
  true
end