Class: MathEngine::Evaluators::Calculate

Inherits:
Object
  • Object
show all
Defined in:
lib/evaluators/calculate.rb

Instance Method Summary collapse

Constructor Details

#initialize(context) ⇒ Calculate

Returns a new instance of Calculate.



4
5
6
# File 'lib/evaluators/calculate.rb', line 4

def initialize(context)
  @context = context
end

Instance Method Details

#addition(node) ⇒ Object



30
31
32
# File 'lib/evaluators/calculate.rb', line 30

def addition(node)
  node.left.evaluate(self) + node.right.evaluate(self)
end

#assignment(node) ⇒ Object



24
25
26
27
28
# File 'lib/evaluators/calculate.rb', line 24

def assignment(node)
  result = node.right.evaluate(self)
  @context.set(node.left.value, result)
  result
end

#division(node) ⇒ Object



42
43
44
# File 'lib/evaluators/calculate.rb', line 42

def division(node)
  node.left.evaluate(self) / node.right.evaluate(self)
end

#exponent(node) ⇒ Object



46
47
48
# File 'lib/evaluators/calculate.rb', line 46

def exponent(node)
  node.left.evaluate(self) ** node.right.evaluate(self)
end

#expression(node) ⇒ Object



12
13
14
# File 'lib/evaluators/calculate.rb', line 12

def expression(node)
  node.left.evaluate(self)
end

#function_call(node) ⇒ Object



54
55
56
57
# File 'lib/evaluators/calculate.rb', line 54

def function_call(node)
  parameters = node.right ? node.right.to_a.collect { |p| p.evaluate(self) } : []
  @context.call(node.left, *parameters)
end

#identifier(node) ⇒ Object



20
21
22
# File 'lib/evaluators/calculate.rb', line 20

def identifier(node)
  @context.get node.value
end

#literal_number(node) ⇒ Object



8
9
10
# File 'lib/evaluators/calculate.rb', line 8

def literal_number(node)
  node.value
end

#modulus(node) ⇒ Object



50
51
52
# File 'lib/evaluators/calculate.rb', line 50

def modulus(node)
  node.left.evaluate(self) % node.right.evaluate(self)
end

#multiplication(node) ⇒ Object



38
39
40
# File 'lib/evaluators/calculate.rb', line 38

def multiplication(node)
  node.left.evaluate(self) * node.right.evaluate(self)
end

#parameters(node) ⇒ Object



59
60
61
# File 'lib/evaluators/calculate.rb', line 59

def parameters(node)
  node.left.evaluate(self)
end

#parenthesised_expression(node) ⇒ Object



16
17
18
# File 'lib/evaluators/calculate.rb', line 16

def parenthesised_expression(node)
  expression(node)
end

#subtraction(node) ⇒ Object



34
35
36
# File 'lib/evaluators/calculate.rb', line 34

def subtraction(node)
  node.left.evaluate(self) - node.right.evaluate(self)
end