private string GetDFAInfo <S>(IAutomaton <S> fa) { StringBuilder sb = new(); sb.Append("|Q|="); sb.Append(fa.StateCount); sb.Append(" "); sb.Append('|'); sb.Append(DeltaCapital); sb.Append("|="); sb.Append(fa.TransitionCount); sb.Append(" "); sb.Append('|'); sb.Append(SigmalCapital); sb.Append("|="); sb.Append(fa.Alphabet.Length); sb.Append(" "); 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()); }
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}/>"); }