Esempio n. 1
0
        public void TestDotForDFA()
        {
            // Make sure it does not crash and does not return null.
            var    dfa       = DFA.Create(NfaBuilder.Create(new ShuntingYard(new RegExLexer(new StringReader("(a|b)+bcd")))));
            string dotString = dfa.AsDotNotation(null);

            Assert.IsNotNull(dotString);
        }
Esempio n. 2
0
        public void Should_be_able_to_mark_the_last_step_as_active_for_DFA()
        {
            // Make sure it does not crash and does not return null.
            var    dfa       = DFA.Create(NfaBuilder.Create(new ShuntingYard(new RegExLexer(new StringReader("(a|b)+bcd")))));
            string dotString = dfa.AsDotNotation("abc");

            Assert.IsNotNull(dotString);
            Assert.IsTrue(dotString.Contains("4 [ fillcolor=\"green\" style=\"filled\"]"));
        }
Esempio n. 3
0
        /// <summary>
        /// Get the DFA and NFA graphs for a given regular expression and highlight active
        /// states for a given input string
        /// </summary>
        /// <param name="regex">Regular expression</param>
        /// <param name="input">Input string</param>
        /// <param name="minimize">Minimize the resulting DFA</param>
        /// <param name="nfaString">Dot notation NFA graph</param>
        /// <param name="dfaString">Dot notation DFA graph</param>
        public static void GetDfaAndNfaGraphs(string regex, string input, bool minimize, out string nfaString, out string dfaString)
        {
            var nfa = NfaBuilder.Create(new ShuntingYard(new RegExLexer(new StringReader(regex))));

            nfaString = nfa.AsDotNotation(input, "NFA");
            var dfa = DFA.Create(nfa);

            if (minimize)
            {
                dfa.Minimize();
            }
            dfaString = dfa.AsDotNotation(input, "DFA");
        }
Esempio n. 4
0
        public ILexer <T> CreateLexer()
        {
            // For each token, create a NFA
            IList <NFA> nfas = tokens.Select(token => NfaBuilder.Create(new ShuntingYard(new RegExLexer(new StringReader(token.Item1))))).ToList();

            foreach (var ignoreExpr in ignore)
            {
                nfas.Add(NfaBuilder.Create(new ShuntingYard(new RegExLexer(new StringReader(ignoreExpr)))));
            }

            // Create a merged NFA
            NFA mergedNfa = NFA.Merge(nfas);

            // If we desire a NFA based lexer, stop now
            if (Runtime == LexerRuntime.Nfa)
            {
                return(new NfaLexer <T>(mergedNfa, nfas, tokens, EndOfInputTokenNumber));
            }

            // Convert the NFA to a DFA
            DFA dfa = DFA.Create(mergedNfa);

            // Minimize the DFA if required
            dfa.Minimize();

            // If we desire a DFA based lexer, stop
            if (Runtime == LexerRuntime.Dfa)
            {
                // TODO:
                // The input ranges which will have been previously split into the smallest distinct
                // units will need to be recombined in order for this to work as fast as possible.
                //dfa.CombineInputRanges();
                return(new DfaLexer <T>(dfa, nfas, tokens, EndOfInputTokenNumber));
            }

            // Convert the dfa to table form
            var transitionTable = new TransitionTable <T>(dfa, nfas, tokens);

            return(new TabularLexer <T>(transitionTable, EndOfInputTokenNumber));
        }
Esempio n. 5
0
 private static DFA CreateDfa(string expression)
 {
     return(DFA.Create(NfaBuilder.Create(new ShuntingYard(new RegExLexer(new StringReader(expression))))));
 }
Esempio n. 6
0
 public void TestOneOrMoreDFA()
 {
     NFA nfa = NfaBuilder.Create(new ShuntingYard(new RegExLexer(new StringReader("a+"))));
     DFA dfa = DFA.Create(nfa);
 }
Esempio n. 7
0
 public void TestCreateDFA2()
 {
     DFA dfa = DFA.Create(NfaBuilder.Create(new ShuntingYard(new RegExLexer(new StringReader("a|b|c")))));
 }