浏览代码

Lex strings

master
Dylan Baker 6 年前
父节点
当前提交
64cc88f9a8
共有 2 个文件被更改,包括 25 次插入0 次删除
  1. 16
    0
      lib/chervil/lexer.rb
  2. 9
    0
      spec/lexer_spec.rb

+ 16
- 0
lib/chervil/lexer.rb 查看文件

23
       when ')'
23
       when ')'
24
         advance
24
         advance
25
         Token.new(:rparen, ")")
25
         Token.new(:rparen, ")")
26
+      when '"', '\''
27
+        delimiter = current_char
28
+        advance
29
+        string = String.new
30
+        until current_char == delimiter
31
+          string << current_char
32
+          advance
33
+        end
34
+
35
+        if current_char.nil?
36
+          raise "Unterminated string"
37
+        end
38
+
39
+        advance
40
+
41
+        Token.new(:string, string)
26
       else
42
       else
27
         source = @source.slice(@position..-1)
43
         source = @source.slice(@position..-1)
28
         while source.match(/^\s/)
44
         while source.match(/^\s/)

+ 9
- 0
spec/lexer_spec.rb 查看文件

34
         Token.new(:identifier, 'hello')
34
         Token.new(:identifier, 'hello')
35
       )
35
       )
36
     end
36
     end
37
+
38
+    it 'lexes strings' do
39
+      expect(Lexer.new('"hello"').get_next_token).to eq(
40
+        Token.new(:string, 'hello')
41
+      )
42
+      expect(Lexer.new("'world'").get_next_token).to eq(
43
+        Token.new(:string, 'world')
44
+      )
45
+    end
37
   end
46
   end
38
 end
47
 end

正在加载...
取消
保存