Module: Optimus::ParsedCalculator::Evaluators::Binary
- Included in:
- BinaryExpr
- Defined in:
- lib/expression_parser/evaluators.rb
Overview
Actual functions to evaluate binary expressions such as 1+1 and 5%3. Here is where we get to say what our operators actually do!
Constant Summary collapse
- Plus =
lambda {|lval, rval| args = ArgList.new(lval, rval) return lval+rval if args.all_num? return NaN }
- Minus =
lambda {|lval, rval| args = ArgList.new(lval, rval) return lval-rval if args.all_num? return NaN }
- Times =
lambda {|lval, rval| args = ArgList.new(lval, rval) return lval*rval if args.all_num? return NaN }
- Div =
lambda {|lval, rval| args = ArgList.new(lval, rval) return NaN if rval.to_f == 0.0 return lval.to_f/rval.to_f }
- Mod =
lambda {|lval, rval| args = ArgList.new(lval, rval) return lval%rval if args.all_num? return NaN }
- Concat =
lambda {|lval, rval| return lval.to_s+rval.to_s }
- And =
lambda {|lval, rval| args = ArgList.new(lval, rval) cl, cr = args.bool_cast return (cl and cr) }
- Or =
lambda {|lval, rval| args = ArgList.new(lval, rval) cl, cr = args.bool_cast return (cl or cr) }
- Equals =
lambda {|lval, rval| args = ArgList.new(lval, rval) cl, cr = args.cast_for_comparison return cl == cr }
- NotEquals =
lambda {|lval, rval| args = ArgList.new(lval, rval) cl, cr = args.cast_for_comparison return cl != cr }
- GreaterThan =
lambda {|lval, rval| args = ArgList.new(lval, rval) cl, cr = args.cast_for_comparison begin return cl > cr rescue ArgumentError => e return false end }
- LessThan =
lambda {|lval, rval| args = ArgList.new(lval, rval) cl, cr = args.cast_for_comparison begin return cl < cr rescue ArgumentError => e return false end }
- GreaterThanEquals =
lambda {|lval, rval| args = ArgList.new(lval, rval) cl, cr = args.cast_for_comparison begin return cl >= cr rescue ArgumentError => e return false end }
- LessThanEquals =
lambda {|lval, rval| args = ArgList.new(lval, rval) cl, cr = args.cast_for_comparison begin return cl <= cr rescue ArgumentError => e return false end }
- OpTable =
{ :+ => Plus, :- => Minus, :* => Times, :/ => Div, :% => Mod, :& => Concat, :and => And, :or => Or, '='.to_sym => Equals, '!='.to_sym => NotEquals, :> => GreaterThan, :< => LessThan, :>= => GreaterThanEquals, :<= => LessThanEquals }