code: func (m *matcher) addq(q *sparse.Set, id uint32, flag syntax.EmptyOp) {
  	if q.Has(id) {
  		return
  	}
  	q.Add(id)
  	i := &m.prog.Inst[id]
  	switch i.Op {
  	case syntax.InstCapture, syntax.InstNop:
  		m.addq(q, i.Out, flag)
  	case syntax.InstAlt, syntax.InstAltMatch:
  		m.addq(q, i.Out, flag)
  		m.addq(q, i.Arg, flag)
  	case syntax.InstEmptyWidth:
  		if syntax.EmptyOp(i.Arg)&^flag == 0 {
  			m.addq(q, i.Out, flag)
  		}
  	}
  }
docs: // addq adds id to the queue, expanding according to flag.