class YARP::Pattern

def scan(root)

def scan(root)
  return to_enum(__method__, root) unless block_given?
  @compiled ||= compile
  queue = [root]
  while (node = queue.shift)
    yield node if @compiled.call(node)
    queue.concat(node.child_nodes.compact)
  end
end