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; } }
public bool PushTransition(TerminalPattern inputChar, out RGGTransition transition) { RGGTransition tempTransition; if (_pushTransitions.TryGetValue(inputChar.ToString(), out tempTransition)) { transition = tempTransition; return(true); } else { transition = null; return(false); } }
private string AddQuotationMarks(TerminalPattern characters) { return(AddQuotationMarks(string.Format("{0}", characters.ToString()))); }