A toy dynamic programming language written in Ruby
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

binary.rb 1.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. class AST::Binary
  2. attr_reader :operation, :left, :right
  3. def initialize(operation, left, right)
  4. @operation = operation
  5. @left = left
  6. @right = right
  7. end
  8. def ==(other)
  9. other.operation == @operation && other.left == @left &&
  10. other.right == @right
  11. end
  12. def execute(env)
  13. case @operation
  14. when AST::Operators::ADD
  15. @left.execute(env) + @right.execute(env)
  16. when AST::Operators::SUBTRACT
  17. @left.execute(env) - @right.execute(env)
  18. when AST::Operators::MULTIPLY
  19. @left.execute(env) * @right.execute(env)
  20. when AST::Operators::DIVIDE
  21. @left.execute(env) / @right.execute(env)
  22. when AST::Operators::LESS_THAN
  23. @left.execute(env) < @right.execute(env)
  24. when AST::Operators::LESS_THAN_OR_EQUAL
  25. @left.execute(env) <= @right.execute(env)
  26. when AST::Operators::GREATER_THAN
  27. @left.execute(env) > @right.execute(env)
  28. when AST::Operators::GREATER_THAN_OR_EQUAL
  29. @left.execute(env) >= @right.execute(env)
  30. when AST::Operators::DOUBLE_EQUALS
  31. @left.execute(env) == @right.execute(env)
  32. when AST::Operators::OR
  33. @left.execute(env) || @right.execute(env)
  34. when AST::Operators::AND
  35. @left.execute(env) && @right.execute(env)
  36. end
  37. end
  38. end