Class: Keisan::Evaluator
- Inherits:
-
Object
- Object
- Keisan::Evaluator
- Defined in:
- lib/keisan/evaluator.rb
Instance Attribute Summary collapse
-
#calculator ⇒ Object
readonly
Returns the value of attribute calculator.
Instance Method Summary collapse
- #ast(expression) ⇒ Object
- #evaluate(expression, definitions = {}) ⇒ Object
-
#initialize(calculator) ⇒ Evaluator
constructor
A new instance of Evaluator.
- #simplify(expression, definitions = {}) ⇒ Object
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
#calculator ⇒ Object (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 |