Class: Maxy::Gen::Tokenizer

Inherits:
Object
  • Object
show all
Defined in:
lib/maxy/gen/tokenizer.rb

Constant Summary collapse

TOKEN_TYPES =
[
    [:arguments, /({[^{}]*})/],
    [:escaped_identifier, /(\\[\S][^-+={}()\\]*)(?=[-+=*{}])?/],
    [:identifier, /([^-+={}()\\]+)(?=[-+=*{}])?/],
    [:oparen, /(\()/],
    [:cparen, /(\))/],
    [:plus, /(\+)/],
    [:equals, /(=)/],
    [:dash, /(-)/]
]

Instance Method Summary collapse

Constructor Details

#initialize(pattern) ⇒ Tokenizer

Returns a new instance of Tokenizer.


15
16
17
# File 'lib/maxy/gen/tokenizer.rb', line 15

def initialize(pattern)
  @pattern = pattern
end

Instance Method Details

#tokenizeObject


19
20
21
22
23
24
25
# File 'lib/maxy/gen/tokenizer.rb', line 19

def tokenize
  tokens = []
  until @pattern.empty?
    tokens << tokenize_one_token
  end
  tokens
end

#tokenize_one_tokenObject


27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/maxy/gen/tokenizer.rb', line 27

def tokenize_one_token
  TOKEN_TYPES.each do |type, re|
    re = /\A#{re}/
    if @pattern =~ re
      value = $1
      @pattern = @pattern[value.length..-1]
      return Token.new(type, value)
    end
  end

  raise RuntimeError.new "Couldn't match token on #{@pattern.inspect}"
end