Class: ExpressionProcessor::Lexer

Inherits:
Object
  • Object
show all
Defined in:
lib/expression_processor.rb

Instance Method Summary collapse

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

#tokenizeObject



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