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"); }
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)); }
public RegexTermFactorTerm(IRegexFactor factor, IRegexTerm term) { Factor = factor; Term = term; }
public RegexTermFactor(IRegexFactor factor) { Factor = factor; }