Browse Source

Move the REPL into its own class

master
Dylan Baker 5 years ago
parent
commit
83ed61e4d5
3 changed files with 31 additions and 23 deletions
  1. 2
    23
      bin/chervil
  2. 1
    0
      lib/chervil.rb
  3. 28
    0
      lib/chervil/repl.rb

+ 2
- 23
bin/chervil View File

@@ -3,26 +3,5 @@
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
-
13
-      if tree.is_a? Chervil::Error
14
-        puts tree
15
-        next
16
-      end
17
-
18
-      results = Chervil::Interpreter.new(tree, env).interpret
19
-      results.each { |result| puts result unless result.nil? }
20
-    end
21
-  rescue Interrupt
22
-    puts
23
-    repl(env)
24
-  end
25
-end
26
-
27
-env = Chervil::Env.new
28
-repl(env)
6
+repl = Chervil::Repl.new
7
+repl.run

+ 1
- 0
lib/chervil.rb View File

@@ -5,6 +5,7 @@ require 'chervil/error'
5 5
 require 'chervil/interpreter'
6 6
 require 'chervil/lexer'
7 7
 require 'chervil/parser'
8
+require 'chervil/repl'
8 9
 require 'chervil/token'
9 10
 require 'chervil/version'
10 11
 

+ 28
- 0
lib/chervil/repl.rb View File

@@ -0,0 +1,28 @@
1
+module Chervil
2
+  class Repl
3
+    def initialize
4
+      @env = Env.new
5
+    end
6
+
7
+    def run
8
+      begin
9
+        while line = Readline.readline("> ", true)
10
+          break if line == "(exit)"
11
+          lexer = Lexer.new(line)
12
+          tree = Parser.new(lexer).parse
13
+
14
+          if tree.is_a? Error
15
+            puts tree
16
+            next
17
+          end
18
+
19
+          results = Interpreter.new(tree, @env).interpret
20
+          results.each { |result| puts result unless result.nil? }
21
+        end
22
+      rescue Interrupt
23
+        puts
24
+        repl(@env)
25
+      end
26
+    end
27
+  end
28
+end

Loading…
Cancel
Save