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;
         }
     }
 }
Example #6
0
 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;
     }
 }