Browse Source

Handle ctrl+c in repl, add exit function

master
Dylan Baker 5 years ago
parent
commit
cc51634636
1 changed files with 15 additions and 6 deletions
  1. 15
    6
      bin/chervil

+ 15
- 6
bin/chervil View File

@@ -3,11 +3,20 @@
3 3
 require "chervil"
4 4
 require "readline"
5 5
 
6
+def repl(env)
7
+  begin
8
+    while line = Readline.readline("> ", true)
9
+      break if line == "(exit)"
10
+      lexer = Chervil::Lexer.new(line)
11
+      tree = Chervil::Parser.new(lexer).parse
12
+      results = Chervil::Interpreter.new(tree, env).interpret
13
+      results.each { |result| puts result unless result.nil? }
14
+    end
15
+  rescue Interrupt
16
+    puts
17
+    repl(env)
18
+  end
19
+end
6 20
 
7 21
 env = Chervil::Env.new
8
-while line = Readline.readline("> ", true)
9
-  lexer = Chervil::Lexer.new(line)
10
-  tree = Chervil::Parser.new(lexer).parse
11
-  results = Chervil::Interpreter.new(tree, env).interpret
12
-  results.each { |result| puts result unless result.nil? }
13
-end
22
+repl(env)

Loading…
Cancel
Save