1234567891011121314151617181920212223242526272829303132333435363738394041 |
- class AST::Binary
- attr_reader :operation, :left, :right
-
- def initialize(operation, left, right)
- @operation = operation
- @left = left
- @right = right
- end
-
- def ==(other)
- other.operation == @operation && other.left == @left &&
- other.right == @right
- end
-
- def execute(env)
- case @operation
- when AST::Operators::ADD
- @left.execute(env) + @right.execute(env)
- when AST::Operators::SUBTRACT
- @left.execute(env) - @right.execute(env)
- when AST::Operators::MULTIPLY
- @left.execute(env) * @right.execute(env)
- when AST::Operators::DIVIDE
- @left.execute(env) / @right.execute(env)
- when AST::Operators::LESS_THAN
- @left.execute(env) < @right.execute(env)
- when AST::Operators::LESS_THAN_OR_EQUAL
- @left.execute(env) <= @right.execute(env)
- when AST::Operators::GREATER_THAN
- @left.execute(env) > @right.execute(env)
- when AST::Operators::GREATER_THAN_OR_EQUAL
- @left.execute(env) >= @right.execute(env)
- when AST::Operators::DOUBLE_EQUALS
- @left.execute(env) == @right.execute(env)
- when AST::Operators::OR
- @left.execute(env) || @right.execute(env)
- when AST::Operators::AND
- @left.execute(env) && @right.execute(env)
- end
- end
- end
|