private static RowRegexExprNodeAlteration ExpandPermute(RowRegexExprNodePermute permute)
        {
            var e      = PermutationEnumerator.Create(permute.ChildNodes.Count);
            var parent = new RowRegexExprNodeAlteration();

            foreach (int[] indexes in e)
            {
                var concat = new RowRegexExprNodeConcatenation();
                parent.AddChildNode(concat);
                for (var i = 0; i < indexes.Length; i++)
                {
                    RowRegexExprNode toCopy = permute.ChildNodes[indexes[i]];
                    var copy = CheckedCopy(toCopy);
                    concat.AddChildNode(copy);
                }
            }
            return(parent);
        }
 public RowRegexPermuteDesc(RowRegexExprNodePermute permute, RowRegexExprNode optionalParent, int level)
 {
     Permute        = permute;
     OptionalParent = optionalParent;
     Level          = level;
 }