Esempio n. 1
0
 internal PatternPart(RGG rGG, PatternBuilder pattern, PartType partType)
 {
     RGG                = rGG;
     Pattern            = pattern;
     PartType           = partType;
     _childPatternParts = new List <PatternPart>();
 }
Esempio n. 2
0
        internal void Build(string fromNode)
        {
            switch (PartType)
            {
            case PartType.PatternStart:
                RGG.CreateRGGTransition(fromNode, ToNodeName, TransitionType.PatternStart);
                NextPatternPart.Build(ToNodeName);
                break;

            case PartType.GroupStart:
                RGG.CreateRGGTransition(fromNode, ToNodeName, TransitionType.GroupStart, Name);
                foreach (PatternPart childPatternPart in ChildPatternParts)
                {
                    childPatternPart.Build(ToNodeName);
                }
                break;

            case PartType.GroupEnd:
                if (RGG.GetNode(fromNode).TransitionCount == 0)
                {
                    RGG.CreateRGGTransition(fromNode, ToNodeName, TransitionType.GroupEnd, Name);
                    NextPatternPart.Build(ToNodeName);
                }
                break;

            case PartType.Terminal:
                if (TerminalPattern == null)
                {
                    TerminalPattern = new TerminalPattern(string.Empty);
                }
                RGG.CreateRGGTransition(fromNode, ToNodeName, TransitionType.Terminal, TerminalPattern);
                NextPatternPart.Build(ToNodeName);
                break;

            case PartType.NonTerminal:
                TransitionType transitionType = TransitionType.NonTerminalNonRecursive;
                if (Name == Pattern.Name)
                {
                    transitionType = TransitionType.NonTerminalRecursive;
                }
                RGG.CreateRGGTransition(fromNode, ToNodeName, transitionType, Name);
                NextPatternPart.Build(ToNodeName);
                break;

            case PartType.PatternEnd:
                RGG.CreateRGGTransition(fromNode, ToNodeName, TransitionType.PatternEnd);
                break;
            }
        }
Esempio n. 3
0
 internal PatternBuilder(RGG rGG, string patternName)
 {
     _rGG               = rGG;
     _patternName       = patternName;
     _startPatternParts = new List <PatternPart>();
 }