// This static call constructs a RegexTree from a regular expression
// pattern string and an option string.
//
// The method creates, drives, and drops a parser instance.
internal static RegexTree Parse(String re, RegexOptions op) {
RegexParser p;
RegexNode root;
String[] capnamelist;
p = new RegexParser((op & RegexOptions.CultureInvariant) != 0 ? CultureInfo.InvariantCulture : CultureInfo.CurrentCulture);
p._options = op;
p.SetPattern(re);
p.CountCaptures();
p.Reset(op);
root = p.ScanRegex();
if (p._capnamelist == null)
capnamelist = null;
else
capnamelist = (String[])p._capnamelist.ToArray(typeof(String));
return new RegexTree(root, p._caps, p._capnumlist, p._captop, p._capnames, capnamelist, op);
}