class Lisp::REPL
Attributes
input[R]
io[R]
Public Class Methods
new()
click to toggle source
# File lib/lisp/repl.rb, line 8 def initialize @io = Coolline.new do |config| config.transform_proc = proc do CodeRay.scan(config.line, :clojure).term end end reset_input! end
Public Instance Methods
run()
click to toggle source
# File lib/lisp/repl.rb, line 18 def run trap("SIGINT") { throw :exit } puts "ctrl-c to exit" catch(:exit) do loop do begin @input += io.readline prompt if open_count == close_count puts Lisp.eval input reset_input! end rescue Exception => e puts e.message reset_input! end end end end
Private Instance Methods
close_count()
click to toggle source
# File lib/lisp/repl.rb, line 58 def close_count tokens.count(?)) end
open_count()
click to toggle source
# File lib/lisp/repl.rb, line 54 def open_count tokens.count(?() end
prompt()
click to toggle source
# File lib/lisp/repl.rb, line 44 def prompt count = open_count - close_count char = count > 0 ? ?( : ?) "#{char * count}> " end
reset_input!()
click to toggle source
# File lib/lisp/repl.rb, line 50 def reset_input! @input = String.new end
tokens()
click to toggle source
# File lib/lisp/repl.rb, line 62 def tokens Lisp.tokenize input end