class Rus3::Evaluator::SchemeEvaluator

Constants

ARITHMETIC_OPS_MAP
COMPARISON_OPS_MAP
EVALUATOR_VERSION

Public Class Methods

new() click to toggle source
Calls superclass method Rus3::Evaluator::Evaluator::new
# 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

Public Instance Methods

binding() click to toggle source
# File lib/rus3/evaluator/scheme_evaluator.rb, line 46
def binding
  @env.binding
end
eval(ast) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
Calls superclass method Rus3::Evaluator::Evaluator#verbose=
# File lib/rus3/evaluator/scheme_evaluator.rb, line 27
def verbose=(verbose)
  super
  @translator and @translator.verbose = verbose
end
version() click to toggle source
Calls superclass method Rus3::Evaluator::Evaluator#version
# 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

Private Instance Methods

translate_ast(ast) click to toggle source
# File lib/rus3/evaluator/scheme_evaluator.rb, line 68
def translate_ast(ast)
  ast.map{|node| @translator.translate(node)}.join("\n")
end