Class: Rus3::Evaluator::SchemeEvaluator
- Defined in:
- lib/rus3/evaluator/scheme_evaluator.rb
Constant Summary collapse
- EVALUATOR_VERSION =
"0.2.0"- ARITHMETIC_OPS_MAP =
{ "+" => "add", "-" => "subtract", "*" => "mul", "/" => "div", "%" => "mod", }
- COMPARISON_OPS_MAP =
{ "<" => "lt?", "<=" => "le?", ">" => "gt?", ">=" => "ge?", "=" => "same_value?", }
Instance Attribute Summary
Attributes inherited from Evaluator
Instance Method Summary collapse
- #binding ⇒ Object
- #eval(ast) ⇒ Object
-
#initialize ⇒ SchemeEvaluator
constructor
A new instance of SchemeEvaluator.
- #instance_eval(&proc) ⇒ Object
- #instance_variable_set(var, value) ⇒ Object
- #verbose=(verbose) ⇒ Object
- #version ⇒ Object
Constructor Details
#initialize ⇒ SchemeEvaluator
Returns a new instance of SchemeEvaluator.
18 19 20 21 22 23 24 25 |
# File 'lib/rus3/evaluator/scheme_evaluator.rb', line 18 def initialize super @env = Environment.new @translator = Translator.new @translator.add_procedure_map(ARITHMETIC_OPS_MAP) @translator.add_procedure_map(COMPARISON_OPS_MAP) end |
Instance Method Details
#binding ⇒ Object
46 47 48 |
# File 'lib/rus3/evaluator/scheme_evaluator.rb', line 46 def binding @env.binding end |
#eval(ast) ⇒ Object
40 41 42 43 44 |
# File 'lib/rus3/evaluator/scheme_evaluator.rb', line 40 def eval(ast) ruby_source = translate_ast(ast) pp ruby_source if @verbose @env.binding.eval(ruby_source) end |
#instance_eval(&proc) ⇒ Object
36 37 38 |
# File 'lib/rus3/evaluator/scheme_evaluator.rb', line 36 def instance_eval(&proc) @env.binding.receiver.instance_eval(&proc) end |
#instance_variable_set(var, value) ⇒ Object
32 33 34 |
# File 'lib/rus3/evaluator/scheme_evaluator.rb', line 32 def instance_variable_set(var, value) @env.binding.receiver.instance_variable_set(var, value) end |
#verbose=(verbose) ⇒ Object
27 28 29 30 |
# File 'lib/rus3/evaluator/scheme_evaluator.rb', line 27 def verbose=(verbose) super @translator and @translator.verbose = verbose end |
#version ⇒ Object
10 11 12 13 14 15 16 |
# File 'lib/rus3/evaluator/scheme_evaluator.rb', line 10 def version vmsg = "(scheme-evaluator :version #{EVALUATOR_VERSION})" if @translator vmsg += " #{@translator.version}" end super + " (#{vmsg})" end |