class Regexp::Parser

def quantifier(token)

def quantifier(token)
  target_node = node.extract_quantifier_target(token.text)
  # in case of chained quantifiers, wrap target in an implicit passive group
  # description of the problem: https://github.com/ammar/regexp_parser/issues/3
  # rationale for this solution: https://github.com/ammar/regexp_parser/pull/69
  if target_node.quantified?
    new_group = Group::Passive.construct(
      token:             :passive,
      ts:                target_node.ts,
      level:             target_node.level,
      set_level:         target_node.set_level,
      conditional_level: target_node.conditional_level,
      options:           active_opts,
    )
    new_group.implicit = true
    new_group << target_node
    increase_group_level(target_node)
    node.expressions[node.expressions.index(target_node)] = new_group
    target_node = new_group
  end
  unless token.token =~ /\A(?:zero_or_one|zero_or_more|one_or_more|interval)
                           (?:_greedy|_reluctant|_possessive)?\z/x
    raise UnknownTokenError.new('Quantifier', token)
  end
  target_node.quantify(token, active_opts)
end