internal PatternPart(RGG rGG, PatternBuilder pattern, PartType partType) { RGG = rGG; Pattern = pattern; PartType = partType; _childPatternParts = new List <PatternPart>(); }
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; } }
internal PatternBuilder(RGG rGG, string patternName) { _rGG = rGG; _patternName = patternName; _startPatternParts = new List <PatternPart>(); }