Class: Regexp::Parser

Inherits:
Object
  • Object
show all
Includes:
Expression, Expression::UnicodeProperty
Defined in:
lib/regexp_parser/parser.rb,
lib/regexp_parser/version.rb,
lib/regexp_parser/error.rb

Defined Under Namespace

Classes: Error, ParserError, UnknownTokenError, UnknownTokenTypeError

Constant Summary collapse

VERSION =
'2.5.0'

Constants included from Expression

Expression::MatchLength

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.parse(input, syntax = "ruby/#{RUBY_VERSION}", options: nil, &block) ⇒ Object



21
22
23
# File 'lib/regexp_parser/parser.rb', line 21

def self.parse(input, syntax = "ruby/#{RUBY_VERSION}", options: nil, &block)
  new.parse(input, syntax, options: options, &block)
end

Instance Method Details

#parse(input, syntax = "ruby/#{RUBY_VERSION}", options: nil, &block) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/regexp_parser/parser.rb', line 25

def parse(input, syntax = "ruby/#{RUBY_VERSION}", options: nil, &block)
  root = Root.construct(options: extract_options(input, options))

  self.root = root
  self.node = root
  self.nesting = [root]

  self.options_stack = [root.options]
  self.switching_options = false
  self.conditional_nesting = []

  self.captured_group_counts = Hash.new(0)

  Regexp::Lexer.scan(input, syntax, options: options) do |token|
    parse_token(token)
  end

  # Trigger recursive setting of #nesting_level, which reflects how deep
  # a node is in the tree. Do this at the end to account for tree rewrites.
  root.nesting_level = 0
  assign_referenced_expressions

  if block_given?
    block.call(root)
  else
    root
  end
end