コード例 #1
0
        public void TestDFAProduct()
        {
            //DFA 1
            HashSet <State <int> > Q1   = new HashSet <State <int> >();
            State <int>            q_01 = new State <int>(0, 0);
            State <int>            q_11 = new State <int>(1, 1);
            State <int>            q_21 = new State <int>(2, 2);

            Q1.Add(q_01);
            Q1.Add(q_11);
            Q1.Add(q_21);

            HashSet <char> Sigma = new HashSet <char>();

            Sigma.Add('a');
            Sigma.Add('b');

            Dictionary <TwoTuple <State <int>, char>, State <int> > delta1 = new Dictionary <TwoTuple <State <int>, char>, State <int> >();

            delta1.Add(new TwoTuple <State <int>, char>(q_01, 'a'), q_11);
            delta1.Add(new TwoTuple <State <int>, char>(q_11, 'a'), q_21);
            delta1.Add(new TwoTuple <State <int>, char>(q_21, 'a'), q_01);
            delta1.Add(new TwoTuple <State <int>, char>(q_01, 'b'), q_01);
            delta1.Add(new TwoTuple <State <int>, char>(q_11, 'b'), q_11);
            delta1.Add(new TwoTuple <State <int>, char>(q_21, 'b'), q_21);

            HashSet <State <int> > F1 = new HashSet <State <int> >();

            F1.Add(q_01);

            DFA <char, int> D1 = new DFA <char, int>(Q1, Sigma, delta1, q_01, F1);

            //DFA 2
            HashSet <State <int> > Q2   = new HashSet <State <int> >();
            State <int>            q_02 = new State <int>(0, 0);
            State <int>            q_12 = new State <int>(1, 1);
            State <int>            q_22 = new State <int>(2, 2);
            State <int>            q_32 = new State <int>(3, 3);

            Q2.Add(q_02);
            Q2.Add(q_12);
            Q2.Add(q_22);
            Q2.Add(q_32);

            Dictionary <TwoTuple <State <int>, char>, State <int> > delta2 = new Dictionary <TwoTuple <State <int>, char>, State <int> >();

            delta2.Add(new TwoTuple <State <int>, char>(q_02, 'a'), q_12);
            delta2.Add(new TwoTuple <State <int>, char>(q_02, 'b'), q_22);
            delta2.Add(new TwoTuple <State <int>, char>(q_12, 'a'), q_32);
            delta2.Add(new TwoTuple <State <int>, char>(q_12, 'b'), q_32);
            delta2.Add(new TwoTuple <State <int>, char>(q_22, 'a'), q_32);
            delta2.Add(new TwoTuple <State <int>, char>(q_22, 'b'), q_32);
            delta2.Add(new TwoTuple <State <int>, char>(q_32, 'a'), q_32);
            delta2.Add(new TwoTuple <State <int>, char>(q_32, 'b'), q_32);

            HashSet <State <int> > F2 = new HashSet <State <int> >();

            F2.Add(q_32);

            DFA <char, int> D2           = new DFA <char, int>(Q2, Sigma, delta2, q_02, F2);
            var             automataList = new List <DFA <char, int> >();

            automataList.Add(D1);
            automataList.Add(D2);
            automataList.Add(D2);

            BooleanOperation boolOp = BooleanOperation.parseBooleanOperationFromString("0&1&2");

            var D = AutomataUtilities.ExecuteSetOperation <char, int>(automataList, boolOp);
        }