class Dentaku::BinaryOperation

def add; [:numeric, left + right]; end

def add;      [:numeric, left + right];  end

def and; [:logical, left && right]; end

def and;      [:logical, left && right]; end

def divide

def divide
  quotient, remainder = left.divmod(right)
  return [:numeric, quotient] if remainder == 0
  [:numeric, BigDecimal.new(left.to_s) / BigDecimal.new(right.to_s)]
end

def eq; [:logical, left == right]; end

def eq;       [:logical, left == right]; end

def ge; [:logical, left >= right]; end

def ge;       [:logical, left >= right]; end

def gt; [:logical, left > right]; end

def gt;       [:logical, left >  right]; end

def initialize(left, right)

def initialize(left, right)
  @left = left
  @right = right
end

def le; [:logical, left <= right]; end

def le;       [:logical, left <= right]; end

def lt; [:logical, left < right]; end

def lt;       [:logical, left <  right]; end

def mod; [:numeric, left % right]; end

def mod;      [:numeric, left % right]; end

def multiply; [:numeric, left * right]; end

def multiply; [:numeric, left * right];  end

def ne; [:logical, left != right]; end

def ne;       [:logical, left != right]; end

def or; [:logical, left || right]; end

def or;       [:logical, left || right]; end

def pow; [:numeric, left ** right]; end

def pow;      [:numeric, left ** right]; end

def subtract; [:numeric, left - right]; end

def subtract; [:numeric, left - right];  end