Example #1
0
        public void FromSDATest()
        {
            var sda = new SDA <char, char>("ZAB");

            sda.AddTransition('a', 'Z', "ZZ");
            sda.AddTransition('a', 'Z', "ZZ");
            sda.AddTransition('a', 'Z', "AZ");
            sda.AddTransition('b', 'A');
            sda.AddTransition('b', 'A', "B");
            sda.AddTransition('c', 'B');
            sda.AddTransition('d', 'Z');

            var exp = new DeterminisedSDA <char, char>("ZAB");

            exp.AddTransition('a', 'Z', new StackSymbolSequenceSet <char>(new StackSymbolSequence <char>[] { new StackSymbolSequence <char>("ZZ"), new StackSymbolSequence <char>("AZ") }));
            exp.AddTransition('b', 'A', new StackSymbolSequenceSet <char>(new StackSymbolSequence <char>[] { new StackSymbolSequence <char>(""), new StackSymbolSequence <char>("B") }));
            exp.AddTransition('c', 'B', new StackSymbolSequenceSet <char>(new StackSymbolSequence <char>[] { new StackSymbolSequence <char>("") }));
            exp.AddTransition('d', 'Z', new StackSymbolSequenceSet <char>(new StackSymbolSequence <char>[] { new StackSymbolSequence <char>("") }));

            var act = DeterminisedSDA <char, char> .FromSDAInNormalForm(sda);

            Assert.IsTrue(exp.Equals(act));

            Assert.IsTrue(act.ShortestWordsOfStackSymbols['Z'].SequenceEqual("d"));
            Assert.IsTrue(act.ShortestWordsOfStackSymbols['B'].SequenceEqual("c"));
            Assert.IsTrue(act.ShortestWordsOfStackSymbols['A'].SequenceEqual("b"));
        }
        private void populateData()
        {
            connection = new SQLiteConnection(connectionString);
            SQLiteDataAdapter SDA;

            if (comboBoxHari.Text == "SEMUA HARI")
            {
                SDA = new SQLiteDataAdapter("SELECT id, Hari, Jam, Ket AS Keterangan FROM databel ORDER BY Jam", connection);
            }
            else
            {
                SDA = new SQLiteDataAdapter("SELECT id, Hari, Jam, Ket AS Keterangan FROM databel WHERE Hari=@HARI ORDER BY Jam", connection);
                SDA.SelectCommand.Parameters.AddWithValue("HARI", comboBoxHari.Text);
            }


            DataTable dt = new DataTable();

            connection.Open();
            SDA.Fill(dt);

            dataGridView1.DataSource              = dt;
            dataGridView1.Columns[0].Visible      = false;
            dataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dataGridView1.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dataGridView1.Columns[3].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            labelRowCount.Text = dataGridView1.RowCount.ToString();
            connection.Close();
        }
Example #3
0
        private void WriteI2c()
        {
            if (startFlag)
            {
                switch (DataType)
                {
                case "Addr":
                    if (i < 7)
                    {
                        main += SDA.ToString();
                        //main += i.ToString();
                        i++;
                    }
                    else if (i == 7)
                    {
                        if (SDA == 1)
                        {
                            main += " Read ";
                        }
                        else
                        {
                            main += " Write";
                        }
                        i++;
                    }
                    else if (i == 8)
                    {
                        textBox1.AppendText(DataType + ":" + main + " ACK ");
                        main     = "";
                        i        = 0;
                        DataType = "Data";
                    }
                    else
                    {
                        i = 0;
                    }
                    break;

                case "Data":
                    if (i < 8)
                    {
                        main += SDA.ToString();
                        i++;
                    }
                    else if (i == 8)
                    {
                        textBox1.AppendText(DataType + ":" + main + " ACK ");
                        main = "";
                        i    = 0;
                    }
                    else
                    {
                        i = 0;
                    }
                    break;
                }
            }
        }
        private static void AddTransitions(SDA <A, TripleStackSymbol <S> > sda, PDA <A, S> dpda, Dictionary <string, TripleStackSymbol <S> > stackSymbols)
        {
            var transitions = dpda.States.SelectMany(s => s.Value.Transitions).ToList();

            foreach (var t in transitions.Where(t => !t.SymbolIn.IsEmpty()))
            {
                AddTransition(t, sda, dpda, stackSymbols);
            }
        }
 private static void AddTransitionPushingOne(Transition <A, S> transition, SDA <A, TripleStackSymbol <S> > sda, PDA <A, S> dpda, Dictionary <string, TripleStackSymbol <S> > stackSymbols)
 {
     foreach (var r in dpda.States)
     {
         var stackSymbolIn   = stackSymbols[TripleStackSymbol <S> .GetKey(transition.Origin.Id, transition.StackSymbolIn, r.Key)];
         var stackSymbolsOut = new TripleStackSymbol <S>[]
         {
             stackSymbols[TripleStackSymbol <S> .GetKey(transition.Target.Id, transition.StackSymbolsWritten.First(), r.Key)]
         };
         sda.AddTransition(transition.SymbolIn.GetSymbol(), stackSymbolIn, stackSymbolsOut);
     }
 }
        public void ToSDAInNormalFormTest()
        {
            var dpda = new PDA <char, char>(new AcceptanceCondition.EmptyStack(), true, 'Z', false, "ZA");

            dpda.AddState(1, false);

            dpda.HasNormalForm();

            dpda.AddTransition().From(0).To(0).Read('a').Pop('Z').Push("AZ");
            dpda.AddTransition().From(0).To(0).Read('a').Pop('A').Push("AA");
            dpda.AddTransition().From(0).To(1).Read('b').Pop('A').Push("A");
            dpda.AddTransition().From(1).To(1).Read('c').Pop('A').Push();
            dpda.AddTransition().From(1).To(1).Read().Pop('Z').Push();

            var symbols = new Dictionary <string, TripleStackSymbol <char> >()
            {
                { "0A1", new TripleStackSymbol <char>(0, 'A', 1) },
                { "0Z1", new TripleStackSymbol <char>(0, 'Z', 1) },
                { "1A1", new TripleStackSymbol <char>(1, 'A', 1) }
            };

            var exp = new SDA <char, TripleStackSymbol <char> >(symbols.Values);

            exp.AddTransition('a', symbols["0Z1"], new TripleStackSymbol <char>[] { symbols["0A1"] });
            exp.AddTransition('a', symbols["0A1"], new TripleStackSymbol <char>[] { symbols["0A1"], symbols["1A1"] });
            exp.AddTransition('b', symbols["0A1"], new TripleStackSymbol <char>[] { symbols["1A1"] });
            exp.AddTransition('c', symbols["1A1"]);

            var act = DPDAInNormalFormToSDAConverter <char, char> .ToSDAInNormalForm(dpda).sda;

            Assert.IsTrue(exp.Equals(act));

            var actPDA = act.ToPDA(symbols["0Z1"]);

            actPDA.CreateRunner();
            dpda.CreateRunner();

            var equalityResult = new PDAEqualityResult <char, TripleStackSymbol <char> >(dpda, actPDA, "abc", 7, 300000, 3000);

            Assert.IsTrue(equalityResult.AreEqual);

            var actDeterminisedSDA = DeterminisedSDA <char, TripleStackSymbol <char> > .FromSDAInNormalForm(act);

            actDeterminisedSDA.CalculateShortestWordsOfStackSymbols();

            Assert.IsTrue(actDeterminisedSDA.ShortestWordsOfStackSymbols[symbols["1A1"]].SequenceEqual("c"));
            Assert.IsTrue(actDeterminisedSDA.ShortestWordsOfStackSymbols[symbols["0A1"]].SequenceEqual("bc"));
            Assert.IsTrue(actDeterminisedSDA.ShortestWordsOfStackSymbols[symbols["0Z1"]].SequenceEqual("abc"));
        }
        /// <summary>
        /// creates a SDA (a PDA with onyl one state) in normal form out of a DPDA in normal form
        /// </summary>
        /// <param name="dpda">DPDA in normal form</param>
        /// <returns></returns>
        public static SDAResult ToSDAInNormalForm(PDA <A, S> dpda)
        {
            Assertion.Assert(dpda.Deterministic, "the given PDA is not deterministic");
            Assertion.Assert(dpda.AcceptanceCondition.IsEmptyStack(), "the given PDA has not acceptance condition empty stack");
            Assertion.Assert(dpda.NormalForm, "the given DPDA has no normal form, but this is required");

            var allNewStackSymbols = CreateStackSymbols(dpda);
            var res = new SDA <A, TripleStackSymbol <S> >(allNewStackSymbols.Values);

            AddTransitions(res, dpda, allNewStackSymbols);
            var epsilonSymbols = RemoveEpsilonSymbolsFromRightHandSide(res, dpda, allNewStackSymbols);

            NormalizeSDA(res);

            return(new SDAResult(epsilonSymbols, res));
        }
        /// <summary>
        /// removes all redundant stack symbols, that means all symbols that only accept the empty language (when they are interpreted as configuration);
        /// this algorithm is very similar to the one that removes non-producing Nonterminals from a CFG
        /// </summary>
        /// <param name="sda"></param>
        private static void NormalizeSDA(SDA <A, TripleStackSymbol <S> > sda)
        {
            var stackSymbolsThatPushNothing = sda.Transitions.Where(t => t.StackSymbolsWritten.Length == 0).Select(t => t.StackSymbolIn).ToList();
            var notRedundantSymbols         = new HashSet <TripleStackSymbol <S> >(stackSymbolsThatPushNothing);

            var lastCount = 0;

            do
            {
                lastCount = notRedundantSymbols.Count;
                var newNotRedundantStackSymbols = sda.Transitions.Where(t => t.StackSymbolsWritten.All(s => notRedundantSymbols.Contains(s))).Select(t => t.StackSymbolIn).ToList();
                notRedundantSymbols.UnionWith(newNotRedundantStackSymbols);
            }while (lastCount < notRedundantSymbols.Count);

            var redundantSymbols = sda.AllStackSymbols.Except(notRedundantSymbols);

            sda.RemoveStackSymbols(redundantSymbols);
        }
        private static void AddTransition(Transition <A, S> transition, SDA <A, TripleStackSymbol <S> > sda, PDA <A, S> dpda, Dictionary <string, TripleStackSymbol <S> > stackSymbols)
        {
            switch (transition.StackSymbolsWritten.Count())
            {
            case 0:
                AddTransitionPushingNone(transition, sda, stackSymbols);
                break;

            case 1:
                AddTransitionPushingOne(transition, sda, dpda, stackSymbols);
                break;

            case 2:
                AddTransitionPushingTwo(transition, sda, dpda, stackSymbols);
                break;

            default:
                Assertion.Assert(false, "A DPDA in normal form should push two stack symbols at most");
                break;
            }
        }
Example #10
0
        private void CaptureNewSupplierOrder_Load(object sender, EventArgs e)
        {
            txtSupplierName.Enabled    = false;
            txtSupplierAddress.Enabled = false;
            txtSupplierEmail.Enabled   = false;

            //Populate CBX

            SqlConnection sqlcon = new SqlConnection(Globals_Class.ConnectionString);

            sqlcon.Open();
            string        Select = "SELECT * FROM SupplierInforamtion";
            SqlCommand    sqlcom = new SqlCommand(Select, sqlcon);
            SqlDataReader SDA;

            SDA = sqlcom.ExecuteReader();

            while (SDA.Read())
            {
                cbxSuppliers.Items.Add(SDA[2]);
            }
        }
        private static void AddTransitionPushingNone(Transition <A, S> transition, SDA <A, TripleStackSymbol <S> > sda, Dictionary <string, TripleStackSymbol <S> > stackSymbols)
        {
            var stackSymbolIn = stackSymbols[TripleStackSymbol <S> .GetKey(transition.Origin.Id, transition.StackSymbolIn, transition.Target.Id)];

            sda.AddTransition(transition.SymbolIn.GetSymbol(), stackSymbolIn);
        }
        private static IEnumerable <TripleStackSymbol <S> > RemoveEpsilonSymbolsFromRightHandSide(SDA <A, TripleStackSymbol <S> > sda, PDA <A, S> dpda, Dictionary <string, TripleStackSymbol <S> > stackSymbols)
        {
            var epsilonSymbols = new List <TripleStackSymbol <S> >();

            var transitions = dpda.States.SelectMany(s => s.Value.Transitions).ToList();

            foreach (var t in transitions.Where(t => t.SymbolIn.IsEmpty()))
            {
                var epsilonSymbol = stackSymbols[TripleStackSymbol <S> .GetKey(t.Origin.Id, t.StackSymbolIn, t.Target.Id)];

                epsilonSymbols.Add(epsilonSymbol);

                foreach (var sdaTransition in sda.Transitions.Where(sdaTransition => sdaTransition.StackSymbolsWritten.Contains(epsilonSymbol)))
                {
                    sdaTransition.RemoveEpsilonSymbol(epsilonSymbol);
                }
            }

            return(epsilonSymbols);
        }
 public SDAResult(IEnumerable <TripleStackSymbol <S> > epsilonTransitions, SDA <A, TripleStackSymbol <S> > sda)
 {
     EpsilonStackSymbols = epsilonTransitions;
     this.sda            = sda;
 }