static void Remove_Epsilon(string state, CAutomat automat, string fake_state, CAutomat NonEpsilon) { foreach (CTranzitie Aux_tranz in automat.get_Tranzitii()) { if (state == Aux_tranz.get_dinspre()) { if (Aux_tranz.get_cost() == "e") { Remove_Epsilon(Aux_tranz.get_catre(), automat, fake_state, NonEpsilon); } else { var tranz_noua = new CTranzitie(Aux_tranz.get_catre(), fake_state, Aux_tranz.get_cost()); NonEpsilon.Accept_Tranzitii(tranz_noua); } } } }
public void Remove_useless_states() { foreach (string stare in MStari) { bool ok = false; foreach (CTranzitie Aux_tranz in MTranzitii) { if (stare == Aux_tranz.get_catre()) { if (Aux_tranz.get_cost() != "e") { ok = true; } } } if (stare == MStare_initiala) { ok = true; } if (ok == false) { foreach (string q in MStari) { if (q == stare) { List <string> aux = MStari.ToList(); aux.Remove(q); MStari = aux.ToArray(); } } for (int i = 0; i < MTranzitii.Count; i++) { if (MTranzitii[i].get_dinspre() == stare) { MTranzitii.Remove(MTranzitii[i]); i--; } } } } }
static void Main(string[] args) { CAutomat automat = new CAutomat(); Citeste_automatul(args[0], automat); Afiseaza_automatul(automat); CAutomat NonEpsilon = new CAutomat(automat); foreach (CTranzitie Aux_tranz in automat.get_Tranzitii()) { Remove_Epsilon(Aux_tranz.get_dinspre(), automat, Aux_tranz.get_dinspre(), NonEpsilon); } File.AppendAllText("out.txt", Environment.NewLine); File.AppendAllText("out.txt", Environment.NewLine); NonEpsilon.Clean_automat(); NonEpsilon.Remove_useless_states(); // NonEpsilon.Clean_automat(); Afiseaza_automatul(NonEpsilon); }