class Regexp::Expression::Sequence

A sequence of expressions. Differs from a Subexpressions by how it handles quantifiers, as it applies them to its last element instead of itself as a whole subexpression.

Used as the base class for the Alternation alternatives, Conditional branches, and CharacterSet::Intersection intersected sequences.

Public Class Methods

add_to(subexpression, params = {}, active_opts = {}) click to toggle source
# File lib/regexp_parser/expression/sequence.rb, line 11
def add_to(subexpression, params = {}, active_opts = {})
  sequence = at_levels(
    subexpression.level,
    subexpression.set_level,
    params[:conditional_level] || subexpression.conditional_level
  )
  sequence.nesting_level = subexpression.nesting_level + 1
  sequence.options = active_opts
  subexpression.expressions << sequence
  sequence
end
at_levels(level, set_level, conditional_level) click to toggle source
# File lib/regexp_parser/expression/sequence.rb, line 23
def at_levels(level, set_level, conditional_level)
  token = Regexp::Token.new(
    :expression,
    :sequence,
    '',
    nil, # ts
    nil, # te
    level,
    set_level,
    conditional_level
  )
  new(token)
end

Public Instance Methods

quantify(token, text, min = nil, max = nil, mode = :greedy) click to toggle source
# File lib/regexp_parser/expression/sequence.rb, line 43
def quantify(token, text, min = nil, max = nil, mode = :greedy)
  target = expressions.reverse.find { |exp| !exp.is_a?(FreeSpace) }
  target or raise Regexp::Parser::Error,
    "No valid target found for '#{text}' quantifier"

  target.quantify(token, text, min, max, mode)
end
starts_at() click to toggle source
# File lib/regexp_parser/expression/sequence.rb, line 38
def starts_at
  expressions.first.starts_at
end
Also aliased as: ts
ts()
Alias for: starts_at