Sha256: 22a10b9a9712907ff652c91f78890a0221d43071bf1df880ab0f070733f6b299
Contents?: true
Size: 1.29 KB
Versions: 2
Compression:
Stored size: 1.29 KB
Contents
require_relative './operation' module Dentaku module AST class Arithmetic < Operation def initialize(*) super fail "#{ self.class } requires numeric operands" unless valid_node?(left) && valid_node?(right) end def type :numeric end private def valid_node?(node) node.is_a?(Identifier) || node.type == :numeric end end class Addition < Arithmetic def value(context={}) left.value(context) + right.value(context) end def self.precedence 10 end end class Subtraction < Arithmetic def value(context={}) left.value(context) - right.value(context) end def self.precedence 10 end end class Multiplication < Arithmetic def value(context={}) left.value(context) * right.value(context) end def self.precedence 20 end end class Division < Arithmetic def value(context={}) left.value(context) / right.value(context) end def self.precedence 20 end end class Exponentiation < Arithmetic def value(context={}) left.value(context) ** right.value(context) end def self.precedence 30 end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
dentaku-2.0.2 | lib/dentaku/ast/arithmetic.rb |
dentaku-2.0.1 | lib/dentaku/ast/arithmetic.rb |