public static SyntacticalNFAState BuildNFA(this IRuleReferenceProductionRuleItem ruleReference, IGrammarSymbolSet symbols, ControlledDictionary <IOilexerGrammarProductionRuleEntry, SyntacticalDFARootState> lookup, Dictionary <IProductionRuleSource, IProductionRuleCaptureStructuralItem> replacements) { SyntacticalNFAState state = new SyntacticalNFAState(lookup, (GrammarSymbolSet)symbols); GrammarVocabulary movement = new GrammarVocabulary(symbols, symbols[ruleReference.Reference]); var stateEnd = new SyntacticalNFAState(lookup, (GrammarSymbolSet)symbols); state.MoveTo(movement, stateEnd); return(state); }
public static SyntacticalNFAState BuildNFA <T, TLiteral>(this ILiteralReferenceProductionRuleItem <T, TLiteral> item, IGrammarSymbolSet symbols, ControlledDictionary <IOilexerGrammarProductionRuleEntry, SyntacticalDFARootState> lookup, Dictionary <IProductionRuleSource, IProductionRuleCaptureStructuralItem> replacements) where TLiteral : ILiteralTokenItem <T> { SyntacticalNFAState state = new SyntacticalNFAState(lookup, (GrammarSymbolSet)symbols); GrammarVocabulary movement = new GrammarVocabulary(symbols, symbols[item.Literal]); var stateEnd = new SyntacticalNFAState(lookup, (GrammarSymbolSet)symbols); state.MoveTo(movement, stateEnd); return(state); }
public static SyntacticalNFAState BuildNFA(this ITokenReferenceProductionRuleItem tokenReference, IGrammarSymbolSet symbols, ControlledDictionary <IOilexerGrammarProductionRuleEntry, SyntacticalDFARootState> lookup, Dictionary <IProductionRuleSource, IProductionRuleCaptureStructuralItem> replacements) { SyntacticalNFAState state = new SyntacticalNFAState(lookup, (GrammarSymbolSet)symbols); var symbol = symbols[tokenReference.Reference]; GrammarVocabulary movement = null; if (symbol is IGrammarConstantItemSymbol) { IGrammarConstantItemSymbol constantItemSymbol = (IGrammarConstantItemSymbol)symbol; movement = new GrammarVocabulary(symbols, (from s in symbols let cis = s as IGrammarConstantItemSymbol where cis != null && cis.Source == constantItemSymbol.Source select cis).ToArray()); } else { movement = new GrammarVocabulary(symbols, symbol); } var stateEnd = new SyntacticalNFAState(lookup, (GrammarSymbolSet)symbols); state.MoveTo(movement, stateEnd); return(state); }