Пример #1
0
        private static Nfa Factor(IRegexFactor factorAtom)
        {
            switch (factorAtom)
            {
            case RegexFactorAtom atom:
                return(Atom(atom.Atom));

            case RegexFactorIterator iterator:
                var atomNfa = Atom(iterator.Atom);
                switch (iterator.Iterator)
                {
                case RegexIterator.ZeroOrMany:
                    return(KleeneStar(atomNfa));

                case RegexIterator.OneOrMany:
                    return(KleenePlus(atomNfa));

                case RegexIterator.ZeroOrOne:
                    return(Optional(atomNfa));
                }

                break;
            }

            throw new InvalidOperationException("Unrecognized regex factor");
        }
Пример #2
0
        private IRegexTerm VisitRegexTermNode(IInternalTreeNode node)
        {
            IRegexFactor factorAtom = null;
            IRegexTerm   term       = null;

            foreach (var internalNode in node.Children.OfType <IInternalTreeNode>())
            {
                if (internalNode.Is(RegexGrammar.Factor))
                {
                    factorAtom = VisitRegexFactorNode(internalNode);
                }
                else if (internalNode.Is(RegexGrammar.Term))
                {
                    term = VisitRegexTermNode(internalNode);
                }
            }

            if (term == null)
            {
                return(new RegexTermFactor(factorAtom));
            }

            return(new RegexTermFactorTerm(factorAtom, term));
        }
Пример #3
0
 public RegexTermFactorTerm(IRegexFactor factor, IRegexTerm term)
 {
     Factor = factor;
     Term   = term;
 }
Пример #4
0
 public RegexTermFactor(IRegexFactor factor)
 {
     Factor = factor;
 }