class RegularExpression::Lexer

Constants

SINGLE

Public Class Methods

new(source) click to toggle source
# File lib/regular_expression/lexer.rb, line 23
def initialize(source)
  @source = source.dup
end

Public Instance Methods

tokens() click to toggle source
# File lib/regular_expression/lexer.rb, line 27
def tokens
  result = []

  until @source.empty?
    case @source
    when /\A\\[wWdD]/
      result << [:CHAR_CLASS, $&]
    when /\A(?:\\[Az]|\$)/
      result << [:ANCHOR, $&]
    when /\A[\^$()\[\]{}|*+?.\-,]/
      result << [SINGLE[$&], $&]
    when /\A\d+/
      result << [:INTEGER, $&.to_i]
    when /\A(?:\u0009|\u000A|\u000D|[\u0020-\uD7FF]|[\uE000-\uFFFD])/
      result << [:CHAR, $&]
    else
      raise SyntaxError, @source
    end

    @source = $'
  end

  result << [false, "end"]
  result
end