public CAutomat(CAutomat a) { MStari = a.get_Stari(); MStari_finale = a.get_Stari_Finale(); MStare_initiala = a.get_Stare_Initiala(); MAlfabet = a.get_alfabet(); }
static void Afiseaza_automatul(CAutomat automat) { File.WriteAllText("out.txt", ""); //sterg continutul anterior al fisierului for (int i = 0; i < automat.get_TAutomat().Count; i++) { File.AppendAllText("out.txt", automat.get_TAutomat()[i] + Environment.NewLine); } File.AppendAllText("out.txt", Environment.NewLine); File.AppendAllText("out.txt", automat.check_type()); }
static void Citeste_automatul(string nume_fis, CAutomat automat) { StreamReader cititor = File.OpenText(nume_fis); string linie; int hai = 0; while ((linie = cititor.ReadLine()) != null) { automat.load_TAutomat(linie); switch (hai) { case 0: { automat.load_Alfabet(linie); hai++; break; } case 1: { automat.load_Stari(linie); hai++; break; } case 2: { automat.load_Stari_Finale(linie); hai++; break; } case 3: { automat.load_Stare_Initiala(linie); hai++; break; } default: { automat.load_Tranzitii(linie, hai); hai++; break; } } } }
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); } } } }
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); }