private void AnnotateIteratedsMatches(IMatch parentMatch, bool addAnnotation, string prefix, int nestingLevel) { IPatternGraph pattern = parentMatch.Pattern; IEnumerable <IMatches> iteratedsMatches = parentMatch.Iterateds; int numIterated, numOptional, numMultiple, numOther; ClassifyIterateds(pattern, out numIterated, out numOptional, out numMultiple, out numOther); int i = 0; foreach (IMatches matches in iteratedsMatches) { String name; if (pattern.Iterateds[i].MinMatches == 0 && pattern.Iterateds[i].MaxMatches == 0) { name = "(.)*"; if (numIterated > 1) { name += "'" + i; } } else if (pattern.Iterateds[i].MinMatches == 0 && pattern.Iterateds[i].MaxMatches == 1) { name = "(.)?"; if (numOptional > 1) { name += "'" + i; } } else if (pattern.Iterateds[i].MinMatches == 1 && pattern.Iterateds[i].MaxMatches == 0) { name = "(.)+"; if (numMultiple > 1) { name += "'" + i; } } else { name = "(.)[" + pattern.Iterateds[i].MinMatches + ":" + pattern.Iterateds[i].MaxMatches + "]"; if (numOther > 1) { name += "'" + i; } } int j = 0; foreach (IMatch match in matches) { AnnotateMatch(match, addAnnotation, prefix + "/" + name + "/" + j, nestingLevel + 1, false); ++j; } ++i; } }
private void AnnotateSubpatternMatches(IMatch parentMatch, bool addAnnotation, string prefix, int nestingLevel) { IPatternGraph pattern = parentMatch.Pattern; IEnumerable <IMatch> matches = parentMatch.EmbeddedGraphs; int i = 0; foreach (IMatch match in matches) { AnnotateMatch(match, addAnnotation, prefix + "/" + pattern.EmbeddedGraphs[i].Name, nestingLevel + 1, true); ++i; } }
private void AnnotateIndependentsMatches(IMatch parentMatch, bool addAnnotation, string prefix, int nestingLevel) { IPatternGraph pattern = parentMatch.Pattern; IEnumerable <IMatch> matches = parentMatch.Independents; int i = 0; foreach (IMatch match in matches) { String name = "&(.)"; if (pattern.IndependentPatternGraphs.Length > 1) { name += "'" + i; } AnnotateMatch(match, addAnnotation, prefix + "/" + name, nestingLevel + 1, false); ++i; } }
private void AnnotateAlternativesMatches(IMatch parentMatch, bool addAnnotation, string prefix, int nestingLevel) { IPatternGraph pattern = parentMatch.Pattern; IEnumerable <IMatch> matches = parentMatch.Alternatives; int i = 0; foreach (IMatch match in matches) { String name = "(.|.)"; if (pattern.Alternatives.Length > 1) { name += "'" + i; } String caseName = match.Pattern.Name; AnnotateMatch(match, addAnnotation, prefix + "/" + name + "/" + caseName, nestingLevel + 1, false); ++i; } }
private static void ClassifyIterateds(IPatternGraph pattern, out int numIterated, out int numOptional, out int numMultiple, out int numOther) { numIterated = numOptional = numMultiple = numOther = 0; for (int i = 0; i < pattern.Iterateds.Length; ++i) { if (pattern.Iterateds[i].MinMatches == 0 && pattern.Iterateds[i].MaxMatches == 0) { ++numIterated; } else if (pattern.Iterateds[i].MinMatches == 0 && pattern.Iterateds[i].MaxMatches == 1) { ++numOptional; } else if (pattern.Iterateds[i].MinMatches == 1 && pattern.Iterateds[i].MaxMatches == 0) { ++numMultiple; } else { ++numOther; } } }
private void classifyIterateds(IPatternGraph pattern, out int numIterated, out int numOptional, out int numMultiple, out int numOther) { numIterated = numOptional = numMultiple = numOther = 0; for(int i = 0; i < pattern.Iterateds.Length; ++i) { if(pattern.Iterateds[i].MinMatches == 0 && pattern.Iterateds[i].MaxMatches == 0) ++numIterated; else if(pattern.Iterateds[i].MinMatches == 0 && pattern.Iterateds[i].MaxMatches == 1) ++numOptional; else if(pattern.Iterateds[i].MinMatches == 1 && pattern.Iterateds[i].MaxMatches == 0) ++numMultiple; else ++numOther; } }