Пример #1
0
        private static void TestNfa(NFA nfa)
        {
            using (var tw = new StreamWriter(@"D:\Down\rtest\nfa.gv", false, Encoding.UTF8))
            {
                nfa.ToGraphViz(tw);
            }

            //foreach (var kvp in nfa.LambdaClosure())
            //{
            //    Console.WriteLine(kvp.Key);
            //    foreach (var s in kvp.Value)
            //    {
            //        Console.WriteLine("\t{0}", s.Name);
            //    }
            //}

            //foreach (var kvp in nfa.TFunction())
            //{
            //    Console.WriteLine("{0} {1}", kvp.Key.Item1, kvp.Key.Item2);
            //    foreach (var st in kvp.Value)
            //    {
            //        Console.WriteLine("\t{0}", st);
            //    }
            //}
        }
Пример #2
0
        public DFA(NFA nfa)
        {
            var lc = nfa.LambdaClosure();
            var tf = nfa.TFunction();

            StartState = MakeState(new SortedSet <State>(lc[nfa.StartState]));

            while (worklist.Count != 0)
            {
                var state = worklist.Pop();

                foreach (var kvp in tf.Where(t => state.SubStates.Contains(t.Key.Item1)).GroupBy(t => t.Key.Item2))
                {
                    var key = kvp.Key;
                    var val = kvp.SelectMany(t => t.Value);

                    var st = MakeState(val);

                    this.Transitions.Add(new Tuple <NfaSourcedState, char?, NfaSourcedState>(state, key, st));
                }
            }

            foreach (var state in States)
            {
                if (state.SubStates.Any(s => s.IsFinal))
                {
                    state.IsFinal = true;
                }
            }
        }
Пример #3
0
        static void Main(string[] args)
        {
            var sc = new Scanner(new StringReader("asdf(2|3|4)*"));
            //TestScanner(sc);

            var parser = new Parser(sc);
            var tree   = parser.Result.Visit(new SimplifyingRewriter());
            //tree.Visit(new TreePrinter());

            var nfa = new NFA(tree);

            TestNfa(nfa);

            var dfa = new DFA(nfa);

            TestDfa(dfa);

            var csharp = new CSharpOutput(dfa);

            Console.WriteLine(csharp);

            //var f = new IlOutput(dfa).ToFunc();

            //Console.WriteLine(f("asdf"));


            //Console.WriteLine(TestNS.Test.Match("asf"));
            //Console.WriteLine(new CSharpOutput(new DFA(new NFA(new Parser(new Scanner(new StringReader("asdf(2|3|4)*"))).Result.Visit(new SimplifyingRewriter())))));
        }
Пример #4
0
 public NfaVistor(NFA nfa)
 {
     this.nfa = nfa;
 }