private StringBuilder ToStringBuilder(StringBuilder sb) { switch (kind) { case Kind.RegexpUnion: sb.Append("("); exp1.ToStringBuilder(sb); sb.Append("|"); exp2.ToStringBuilder(sb); sb.Append(")"); break; case Kind.RegexpConcatenation: exp1.ToStringBuilder(sb); exp2.ToStringBuilder(sb); break; case Kind.RegexpIntersection: sb.Append("("); exp1.ToStringBuilder(sb); sb.Append("&"); exp2.ToStringBuilder(sb); sb.Append(")"); break; case Kind.RegexpOptional: sb.Append("("); exp1.ToStringBuilder(sb); sb.Append(")?"); break; case Kind.RegexpRepeat: sb.Append("("); exp1.ToStringBuilder(sb); sb.Append(")*"); break; case Kind.RegexpRepeatMin: sb.Append("("); exp1.ToStringBuilder(sb); sb.Append("){").Append(min).Append(",}"); break; case Kind.RegexpRepeatMinMax: sb.Append("("); exp1.ToStringBuilder(sb); sb.Append("){").Append(min).Append(",").Append(max).Append("}"); break; case Kind.RegexpComplement: sb.Append("~("); exp1.ToStringBuilder(sb); sb.Append(")"); break; case Kind.RegexpChar: sb.Append("\\").Append(c); break; case Kind.RegexpCharRange: sb.Append("[\\").Append(from).Append("-\\").Append(to).Append("]"); break; case Kind.RegexpAnyChar: sb.Append("."); break; case Kind.RegexpEmpty: sb.Append("#"); break; case Kind.RegexpString: sb.Append("\"").Append(s).Append("\""); break; case Kind.RegexpAnyString: sb.Append("@"); break; case Kind.RegexpAutomaton: sb.Append("<").Append(s).Append(">"); break; case Kind.RegexpInterval: string s1 = Convert.ToDecimal(min).ToString(); string s2 = Convert.ToDecimal(max).ToString(); sb.Append("<"); if (digits > 0) { for (int i = s1.Length; i < digits; i++) { sb.Append('0'); } } sb.Append(s1).Append("-"); if (digits > 0) { for (int i = s2.Length; i < digits; i++) { sb.Append('0'); } } sb.Append(s2).Append(">"); break; } return(sb); }