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