Class: ExpressionProcessor::Lexer
- Inherits:
-
Object
- Object
- ExpressionProcessor::Lexer
- Defined in:
- lib/expression_processor.rb
Instance Method Summary collapse
-
#initialize(code) ⇒ Lexer
constructor
A new instance of Lexer.
- #tokenize ⇒ Object
Constructor Details
#initialize(code) ⇒ Lexer
Returns a new instance of Lexer.
85 86 87 88 |
# File 'lib/expression_processor.rb', line 85 def initialize(code) @code = code.upcase.gsub(/\s/, '') @tokens = [] end |
Instance Method Details
#tokenize ⇒ Object
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/expression_processor.rb', line 90 def tokenize position = 0 # scan one character at a time while position < @code.size chunk = @code[position..-1] if token = chunk[/\A([A-Z]\w*)\(/, 1] @tokens << [:call, token] elsif token = chunk[/\A([A-Z]\w*)/, 1] @tokens << [:identifier, token] elsif token = chunk[/\A([0-9.]+%{1})/, 1] @tokens << [:percent, token] elsif token = chunk[/\A(\$)[\d.]+/, 1] @tokens << [:dollar, token] elsif token = chunk[/\A([0-9.]+)/, 1] @tokens << [:float, token.to_f] elsif token = chunk[/\A([%\/*+-])/, 1] @tokens << [:operator, token] else token = chunk[0,1] @tokens << [token, token] end position += token.size end @tokens end |