浏览代码

Lex hashes

master
Dylan Baker 6 年前
父节点
当前提交
1415296cd0
共有 3 个文件被更改,包括 6 次插入1 次删除
  1. 1
    0
      lib/ahem/ast/operators.rb
  2. 3
    0
      lib/ahem/lexer.rb
  3. 2
    1
      spec/lexer_spec.rb

+ 1
- 0
lib/ahem/ast/operators.rb 查看文件

11
   OR = :or
11
   OR = :or
12
   AND = :and
12
   AND = :and
13
   NOT = :not
13
   NOT = :not
14
+  HASH = :'#'
14
 end
15
 end

+ 3
- 0
lib/ahem/lexer.rb 查看文件

128
     elsif source.match(/\A\>/)
128
     elsif source.match(/\A\>/)
129
       @position += 1
129
       @position += 1
130
       Token.new(TokenKinds::OPERATOR, :>)
130
       Token.new(TokenKinds::OPERATOR, :>)
131
+    elsif source.match(/\A\#/)
132
+      @position += 1
133
+      Token.new(TokenKinds::OPERATOR, :'#')
131
     elsif source.match(/\Aand/)
134
     elsif source.match(/\Aand/)
132
       @position += 3
135
       @position += 3
133
       Token.new(TokenKinds::OPERATOR, :and)
136
       Token.new(TokenKinds::OPERATOR, :and)

+ 2
- 1
spec/lexer_spec.rb 查看文件

32
   end
32
   end
33
 
33
 
34
   it 'lexes operators' do
34
   it 'lexes operators' do
35
-    expect(Lexer.new('+-*/<<=>>=== and or not').scan_all).to eq(
35
+    expect(Lexer.new('+-*/<<=>>===# and or not').scan_all).to eq(
36
       [
36
       [
37
         Token.new(TokenKinds::OPERATOR, :+),
37
         Token.new(TokenKinds::OPERATOR, :+),
38
         Token.new(TokenKinds::OPERATOR, :-),
38
         Token.new(TokenKinds::OPERATOR, :-),
43
         Token.new(TokenKinds::OPERATOR, :>),
43
         Token.new(TokenKinds::OPERATOR, :>),
44
         Token.new(TokenKinds::OPERATOR, :>=),
44
         Token.new(TokenKinds::OPERATOR, :>=),
45
         Token.new(TokenKinds::OPERATOR, :==),
45
         Token.new(TokenKinds::OPERATOR, :==),
46
+        Token.new(TokenKinds::OPERATOR, :'#'),
46
         Token.new(TokenKinds::OPERATOR, :and),
47
         Token.new(TokenKinds::OPERATOR, :and),
47
         Token.new(TokenKinds::OPERATOR, :or),
48
         Token.new(TokenKinds::OPERATOR, :or),
48
         Token.new(TokenKinds::OPERATOR, :not),
49
         Token.new(TokenKinds::OPERATOR, :not),

正在加载...
取消
保存