private Nfa LexerRuleFactor(IEbnfLexerRuleFactor factor) { switch (factor) { case EbnfLexerRuleFactorLiteral literal: return(LexerRuleFactorLiteral(literal)); case EbnfLexerRuleFactorRegex regex: return(LexerRuleFactorRegex(regex)); default: throw new InvalidOperationException( $"Invalid IEbnfLexerRuleFactor node type detected. Found {factor.GetType().Name}, expected EbnfLexerRuleFactorLiteral or EbnfLexerRuleFactorRegex"); } }
private IEbnfLexerRuleTerm VisitLexerRuleTermNode(IInternalTreeNode node) { IEbnfLexerRuleFactor factor = null; IEbnfLexerRuleTerm term = null; foreach (var internalNode in node.Children.OfType <IInternalTreeNode>()) { if (internalNode.Is(EbnfGrammar.LexerRuleFactor)) { factor = VisitLexerRuleFactorNode(internalNode); } else if (internalNode.Is(EbnfGrammar.LexerRuleTerm)) { term = VisitLexerRuleTermNode(internalNode); } } if (term == null) { return(new EbnfLexerRuleTermSimple(factor)); } return(new EbnfLexerRuleTermConcatenation(factor, term)); }
public EbnfLexerRuleTermConcatenation(IEbnfLexerRuleFactor factor, IEbnfLexerRuleTerm term) { Factor = factor; Term = term; }
public EbnfLexerRuleTermSimple(IEbnfLexerRuleFactor factor) { Factor = factor; }