コード例 #1
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;
            }
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
ファイル: RGG.cs プロジェクト: larsbuch/split-parser
 private string AddQuotationMarks(TerminalPattern characters)
 {
     return(AddQuotationMarks(string.Format("{0}", characters.ToString())));
 }