class RbScheme::Executer

Public Class Methods

new(source) click to toggle source
# File lib/rb-scheme/executer.rb, line 14
def initialize(source)
  set_source!(source)
  @evaluator = Evaluator.new
  @printer = Printer.new
end
run(source) click to toggle source
# File lib/rb-scheme/executer.rb, line 10
def self.run(source)
  new(source).exec
end

Public Instance Methods

exec() click to toggle source
# File lib/rb-scheme/executer.rb, line 29
def exec
  if File.file?(@source)
    exec_file
  else
    exec_repl
  end
end
exec_file() click to toggle source
# File lib/rb-scheme/executer.rb, line 37
def exec_file
  loop do
    expr = read_expr
    break if expr.nil?
    vm_eval(expr)
  end
end
exec_repl() click to toggle source
# File lib/rb-scheme/executer.rb, line 45
def exec_repl
  loop do
    print "> "
    expr = read_expr
    return if expr.nil?
    return if exit?(expr)
    puts_lisp_object(vm_eval(expr))
  end
end
exit?(expr) click to toggle source
# File lib/rb-scheme/executer.rb, line 25
def exit?(expr)
  expr.is_a?(LSymbol) && expr.name == "exit"
end
set_source!(source) click to toggle source
# File lib/rb-scheme/executer.rb, line 20
def set_source!(source)
  @source = source
  @parser = Parser.new(source)
end