Esempio n. 1
0
        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);
        }