public void RegisterRegularExpression(string regularExpression, Action <Lexeme> lexemeHandler) { var tokenizer = new RegularExpressionTokenizer(); tokenizer.Tokenize(regularExpression); var nfa = new Nfa.Nfa(tokenizer.Tokens); }
internal Nfa.Nfa BuildNfa() { var nfa = new Nfa.Nfa(); NfaNode end_node = new NfaNode().SetAccepting(true); foreach (Tuple <char, char> elem in bracketElements) { nfa.StartNode.ConnectTo(end_node, NfaEdge.Create(elem.Item1, elem.Item2)); } return(nfa); }
internal Nfa.Nfa BuildNfa() { Nfa.Nfa[] alt_nfa = chains.Select(it => RegexChainTraits.BuildNfa(it)).ToArray(); if (alt_nfa.Length == 1) { return(alt_nfa.Single()); } else { var nfa = new Nfa.Nfa(); alt_nfa.ForEach(it => nfa.StartNode.ConnectTo(it.StartNode, NfaEdge.CreateEmpty())); // accepting nodes have no outgoing edges mergeNodes(alt_nfa.Select(it => it.Accepting()).Flatten().Where(it => !it.ConnectedTo.Any()).ToArray()); return(nfa); } }
public static Nfa.Nfa BuildNfa(object this_) { switch (AtomType(this_)) { case RegexAtom.Bracket: return(AsBracket(this_).BuildNfa()); case RegexAtom.Alternatives: return(AsAlternatives(this_).BuildNfa()); case RegexAtom.Char: { var nfa = new Nfa.Nfa(); nfa.StartNode.ConnectTo(new NfaNode().SetAccepting(true), NfaEdge.Create(AsChar(this_))); return(nfa); } } throw new Exception(); }