private RegexExpression VisitRegexExpressionNode(IInternalTreeNode node) { RegexExpression expression = null; IRegexTerm term = null; foreach (var internalNode in node.Children.OfType <IInternalTreeNode>()) { if (internalNode.Is(RegexGrammar.Expression)) { expression = VisitRegexExpressionNode(internalNode); } else if (internalNode.Is(RegexGrammar.Term)) { term = VisitRegexTermNode(internalNode); } } if (expression != null && term != null) { return(new RegexExpressionAlteration(term, expression)); } if (term != null) { return(new RegexExpressionTerm(term)); } throw new InvalidOperationException("Unable to create null expression."); }
private static Nfa Term(IRegexTerm termX) { switch (termX) { case RegexTermFactor termFactor: return(Factor(termFactor.Factor)); case RegexTermFactorTerm regexTermFactor: var factorNfa = Factor(regexTermFactor.Factor); var termNfa = Term(regexTermFactor.Term); return(Concatenation(factorNfa, termNfa)); } throw new InvalidOperationException("Unrecognized Regex Term"); }
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 RegexExpressionTerm(IRegexTerm term) { Term = term; }
public RegexExpressionAlteration(IRegexTerm term, RegexExpression expression) { Term = term; Expression = expression; }