예제 #1
0
        private string GetDFAInfo <S>(IAutomaton <S> fa)
        {
            StringBuilder sb = new();

            sb.Append("|Q|=");
            sb.Append(fa.StateCount);
            sb.Append("&#13;");
            sb.Append('|');
            sb.Append(DeltaCapital);
            sb.Append("|=");
            sb.Append(fa.TransitionCount);
            sb.Append("&#13;");
            sb.Append('|');
            sb.Append(SigmalCapital);
            sb.Append("|=");
            sb.Append(fa.Alphabet.Length);
            sb.Append("&#13;");
            sb.Append(SigmalCapital);
            sb.Append('=');
            for (int i = 0; i < fa.Alphabet.Length; i++)
            {
                if (i > 0)
                {
                    sb.Append(',');
                }
                sb.Append(fa.DescribeLabel(fa.Alphabet[i]));
            }
            return(sb.ToString());
        }
예제 #2
0
        private string GetNonFinalRuleInfo <S>(IAutomaton <S> aut, int source, int target, List <S> rules)
        {
            string lab  = "";
            string info = "";

            for (int i = 0; i < rules.Count; i++)
            {
                lab += (lab == "" ? "" : ",\n ") + aut.DescribeLabel(rules[i]);
            }

            int lab_length = lab.Length;

            if (_maxDgmlTransitionLabelLength >= 0 && lab_length > _maxDgmlTransitionLabelLength)
            {
                info += $" FullLabel = \"{lab}\"";
                lab   = string.Concat(lab.AsSpan(0, _maxDgmlTransitionLabelLength), "..");
            }

            return($"<Link Source=\"{source}\" Target=\"{target}\" Label=\"{lab}\" Category=\"NonepsilonTransition\" {info}/>");
        }