code: func (iter *ExprIter) Reset() (findMatch bool) {
  	defer func() { iter.matched = findMatch }()
  
  	for elem := iter.Group.GetFirstElem(iter.Operand); elem != nil; elem = elem.Next() {
  		expr := elem.Value.(*GroupExpr)
  		exprOperand := GetOperand(expr.ExprNode)
  		if !iter.Operand.Match(exprOperand) {
  			break
  		}
  
  		if len(expr.Children) != len(iter.Children) {
  			continue
  		}
  
  		allMatched := true
  		for i := range iter.Children {
  			iter.Children[i].Group = expr.Children[i]
  			if !iter.Children[i].Reset() {
  				allMatched = false
  				break
  			}
  		}
  		if allMatched {
  			iter.Element = elem
  			return true
  		}
  	}
  	return false
  }
docs: // Reset resets the iterator to the first matched Group expression.