Class: Keisan::Evaluator

Inherits:
Object
  • Object
show all
Defined in:
lib/keisan/evaluator.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(calculator) ⇒ Evaluator

Returns a new instance of Evaluator.



5
6
7
# File 'lib/keisan/evaluator.rb', line 5

def initialize(calculator)
  @calculator = calculator
end

Instance Attribute Details

#calculatorObject (readonly)

Returns the value of attribute calculator.



3
4
5
# File 'lib/keisan/evaluator.rb', line 3

def calculator
  @calculator
end

Instance Method Details

#ast(expression) ⇒ Object



31
32
33
# File 'lib/keisan/evaluator.rb', line 31

def ast(expression)
  AST.parse(expression)
end

#evaluate(expression, definitions = {}) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/keisan/evaluator.rb', line 9

def evaluate(expression, definitions = {})
  context = calculator.context.spawn_child(definitions: definitions, transient: true)
  ast = ast(expression)
  last_line = last_line(ast)

  evaluation = ast.evaluated(context)

  if last_line.is_a?(AST::Assignment)
    if last_line.children.first.is_a?(AST::Variable)
      context.variable(last_line.children.first.name).value(context)
    end
  else
    evaluation.value(context)
  end
end

#simplify(expression, definitions = {}) ⇒ Object



25
26
27
28
29
# File 'lib/keisan/evaluator.rb', line 25

def simplify(expression, definitions = {})
  context = calculator.context.spawn_child(definitions: definitions, transient: true)
  ast = AST.parse(expression)
  ast.simplify(context)
end