Class: RegexpExamples::ChargroupParser

Inherits:
Object
  • Object
show all
Defined in:
lib/regexp-examples/chargroup_parser.rb

Overview

A “sub-parser”, for char groups in a regular expression Some examples of what this class needs to parse:

abc
  • plain characters

a-z
  • ranges

nbd
  • escaped characters (which may represent character sets)

^abc
  • negated group

[a]
  • sub-groups (should match “a”, “b” or “c”)

[:lower:]
  • POSIX group

[a-f]&&
  • set intersection (should match “d”, “f” or “f”)

[^:alpha:]&&a-c
  • all of the above!!!! (should match “n”)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(regexp_string, is_sub_group: false) ⇒ ChargroupParser

Returns a new instance of ChargroupParser.



14
15
16
17
18
19
# File 'lib/regexp-examples/chargroup_parser.rb', line 14

def initialize(regexp_string, is_sub_group: false)
  @regexp_string = regexp_string
  @is_sub_group = is_sub_group
  @current_position = 0
  parse
end

Instance Attribute Details

#regexp_stringObject (readonly)

Returns the value of attribute regexp_string.



13
14
15
# File 'lib/regexp-examples/chargroup_parser.rb', line 13

def regexp_string
  @regexp_string
end

Instance Method Details

#lengthObject



43
44
45
# File 'lib/regexp-examples/chargroup_parser.rb', line 43

def length
  @current_position
end

#parseObject



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/regexp-examples/chargroup_parser.rb', line 21

def parse
  @charset = []
  @negative = false
  parse_first_chars
  until next_char == ']'
    case next_char
    when '['
      parse_sub_group_concat
    when '-'
      parse_after_hyphen
    when '&'
      parse_after_ampersand
    else
      @charset.concat parse_checking_backlash
      @current_position += 1
    end
  end

  @charset.uniq!
  @current_position += 1 # To account for final "]"
end

#resultObject



47
48
49
# File 'lib/regexp-examples/chargroup_parser.rb', line 47

def result
  @negative ? (CharSets::Any - @charset) : @charset
end