internal virtual StringBuilder ToStringBuilder(StringBuilder b) { switch (kind) { case Kind.REGEXP_UNION: b.Append("("); exp1.ToStringBuilder(b); b.Append("|"); exp2.ToStringBuilder(b); b.Append(")"); break; case Kind.REGEXP_CONCATENATION: exp1.ToStringBuilder(b); exp2.ToStringBuilder(b); break; case Kind.REGEXP_INTERSECTION: b.Append("("); exp1.ToStringBuilder(b); b.Append("&"); exp2.ToStringBuilder(b); b.Append(")"); break; case Kind.REGEXP_OPTIONAL: b.Append("("); exp1.ToStringBuilder(b); b.Append(")?"); break; case Kind.REGEXP_REPEAT: b.Append("("); exp1.ToStringBuilder(b); b.Append(")*"); break; case Kind.REGEXP_REPEAT_MIN: b.Append("("); exp1.ToStringBuilder(b); b.Append("){").Append(min).Append(",}"); break; case Kind.REGEXP_REPEAT_MINMAX: b.Append("("); exp1.ToStringBuilder(b); b.Append("){").Append(min).Append(",").Append(max).Append("}"); break; case Kind.REGEXP_COMPLEMENT: b.Append("~("); exp1.ToStringBuilder(b); b.Append(")"); break; case Kind.REGEXP_CHAR: b.Append("\\").AppendCodePoint(c); break; case Kind.REGEXP_CHAR_RANGE: b.Append("[\\").AppendCodePoint(from).Append("-\\").AppendCodePoint(to).Append("]"); break; case Kind.REGEXP_ANYCHAR: b.Append("."); break; case Kind.REGEXP_EMPTY: b.Append("#"); break; case Kind.REGEXP_STRING: b.Append("\"").Append(s).Append("\""); break; case Kind.REGEXP_ANYSTRING: b.Append("@"); break; case Kind.REGEXP_AUTOMATON: b.Append("<").Append(s).Append(">"); break; case Kind.REGEXP_INTERVAL: string s1 = Convert.ToString(min, CultureInfo.InvariantCulture); string s2 = Convert.ToString(max, CultureInfo.InvariantCulture); b.Append("<"); if (digits > 0) { for (int i = s1.Length; i < digits; i++) { b.Append('0'); } } b.Append(s1).Append("-"); if (digits > 0) { for (int i = s2.Length; i < digits; i++) { b.Append('0'); } } b.Append(s2).Append(">"); break; } return(b); }
internal virtual StringBuilder ToStringBuilder(StringBuilder b) { switch (kind) { case Kind.REGEXP_UNION: b.Append("("); Exp1.ToStringBuilder(b); b.Append("|"); Exp2.ToStringBuilder(b); b.Append(")"); break; case Kind.REGEXP_CONCATENATION: Exp1.ToStringBuilder(b); Exp2.ToStringBuilder(b); break; case Kind.REGEXP_INTERSECTION: b.Append("("); Exp1.ToStringBuilder(b); b.Append("&"); Exp2.ToStringBuilder(b); b.Append(")"); break; case Kind.REGEXP_OPTIONAL: b.Append("("); Exp1.ToStringBuilder(b); b.Append(")?"); break; case Kind.REGEXP_REPEAT: b.Append("("); Exp1.ToStringBuilder(b); b.Append(")*"); break; case Kind.REGEXP_REPEAT_MIN: b.Append("("); Exp1.ToStringBuilder(b); b.Append("){").Append(Min).Append(",}"); break; case Kind.REGEXP_REPEAT_MINMAX: b.Append("("); Exp1.ToStringBuilder(b); b.Append("){").Append(Min).Append(",").Append(Max).Append("}"); break; case Kind.REGEXP_COMPLEMENT: b.Append("~("); Exp1.ToStringBuilder(b); b.Append(")"); break; case Kind.REGEXP_CHAR: b.Append("\\").Append(Character.ToChars(c)); break; case Kind.REGEXP_CHAR_RANGE: b.Append("[\\").Append(Character.ToChars(From)).Append("-\\").Append(Character.ToChars(To)).Append("]"); break; case Kind.REGEXP_ANYCHAR: b.Append("."); break; case Kind.REGEXP_EMPTY: b.Append("#"); break; case Kind.REGEXP_STRING: b.Append("\"").Append(s).Append("\""); break; case Kind.REGEXP_ANYSTRING: b.Append("@"); break; case Kind.REGEXP_AUTOMATON: b.Append("<").Append(s).Append(">"); break; case Kind.REGEXP_INTERVAL: string s1 = Convert.ToString(Min); string s2 = Convert.ToString(Max); b.Append("<"); if (Digits > 0) { for (int i = s1.Length; i < Digits; i++) { b.Append('0'); } } b.Append(s1).Append("-"); if (Digits > 0) { for (int i = s2.Length; i < Digits; i++) { b.Append('0'); } } b.Append(s2).Append(">"); break; } return(b); }