Example #1
0
        private static Matcher MakeMatcher()
        {
            // a?b?c?
            var aaa = FA.From('a').Opt();
            var bbb = FA.From('b').Opt();
            var ccc = FA.From('c').Opt();

            var nfa = FA.And(FA.From('a').Opt(), FA.From('b').Opt(), FA.From('c').Opt());

            return(new Matcher(nfa.ToDfa().Minimize()));
        }
Example #2
0
        private static Matcher MakeMatcher()
        {
            // [0]|[1-9][0-9]*
            var nfa = FA.Or(
                FA.From('0'),
                FA.And(FA.From('1', '9'), FA.From('0', '9').Star()));

            var dfa = nfa.ToDfa().Minimize();

            return(new Matcher(dfa));
        }
Example #3
0
        public void Automata3()
        {
            // [0]|[1-9][0-9]*
            var nfa = FA.Or(
                FA.From('0'),
                FA.And(FA.From('1', '9'), FA.From('0', '9').Star()));


            var dfa = nfa.ToDfa();

            dfa = dfa.Minimize();

            Assert.AreEqual(3, dfa.States.Count);
        }
Example #4
0
        public void Automata1()
        {
            // .* [0-5] .* | .* [4-9] .*
            var dot = FA.Any();

            var nfa = FA.Or(
                FA.And(dot.Star(), FA.From('0', '5'), dot.Plus()),
                FA.And(dot.Star(), FA.From('4', '9'), dot.Plus()));

            var dfa = nfa.ToDfa();

            dfa = dfa.Minimize();

            Assert.AreEqual(6, dfa.States.Count);
        }
Example #5
0
        public void Automata4()
        {
            // (a+b+c+)+|abc
            var a = FA.From('a');
            var b = FA.From('b');
            var c = FA.From('c');

            var nfa = FA.Or(
                FA.And(a.Plus(), b.Plus(), c.Plus()).Plus(),
                FA.And(a, b, c));

            var dfa = nfa.ToDfa();

            dfa = dfa.Minimize();

            Assert.AreEqual(5, dfa.States.Count);
        }
Example #6
0
        public void Automata2()
        {
            // .*[A-Z].+|.*[0-9].+
            var dotPlus = FA.Any().Plus();
            var dotStar = FA.Any().Star();
            var letter  = FA.From('A', 'Z');
            var digits  = FA.From('0', '9');

            var nfa = FA.Or(
                FA.And(dotStar, letter, dotPlus),
                FA.And(dotStar, digits, dotPlus));

            var dfa = nfa.ToDfa();

            dfa = dfa.Minimize();

            Assert.AreEqual(5, dfa.States.Count);
        }