Browse Source

Lex hashes

master
Dylan Baker 5 years ago
parent
commit
1415296cd0
3 changed files with 6 additions and 1 deletions
  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 View File

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 View File

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 View File

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),

Loading…
Cancel
Save