Class: Maxy::Gen::Tokenizer
- Inherits:
-
Object
- Object
- Maxy::Gen::Tokenizer
- 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
-
#initialize(pattern) ⇒ Tokenizer
constructor
A new instance of Tokenizer.
- #tokenize ⇒ Object
- #tokenize_one_token ⇒ Object
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
#tokenize ⇒ Object
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_token ⇒ Object
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 |