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(); }
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; } }
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; }