A toy dynamic programming language written in Ruby
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

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