private List <Gramatica> CerraduraS(Gramatica C) { int ApProd = 0; char B; List <Gramatica> E = new List <Gramatica>(); ApProd = Producciones.IndexOf(C.Produc); for (int j = 0; j < Der[ApProd].Count(); j++) { if (Der[ApProd][j] >= 65 && Der[ApProd][j] <= 90) { B = Der[ApProd][j]; if (j - 1 >= 0) { char ant = Der[ApProd][j - 1]; if (ant < 65 || ant > 90 && ant == 176) { E = AgregaProd(Conjuntos[0], B, Der[ApProd][j + 1]); } else { E = AgregaProd(Conjuntos[0], B, '$'); } } else { E = AgregaProd(Conjuntos[0], B, '$'); } } } return(E); }
private Gramatica Ir_a(Gramatica E, char X) { Gramatica Aux; string RePun; RePun = E.Produc.Replace("°" + X, X + "°"); Aux = new Gramatica(RePun, E.Prim); //AgregaProd(E, X, E.Prim); return(Aux); }
private void CreaTabla() { //Funcion Ir_Falsa for (int i = 0; i < Conjuntos.Count(); i++) { for (int k = 0; k < X.Count; k++) { bool term = true; List <Gramatica> Aux = new List <Gramatica>(); for (int j = 0; j < Conjuntos[i].Count; j++) { for (int l = 0; l < Conjuntos[i][j].Produc.Count(); l++) { if (Conjuntos[i][j].Produc[l] == 176) { if (X[k] > 65 && X[k] < 90) { term = false; } if (l + 1 != Conjuntos[i][j].Produc.Count()) { if (Conjuntos[i][j].Produc[l + 1] == X[k]) { Gramatica result = Ir_a(Conjuntos[i][j], X[k]); Aux.Add(result); } } } } } for (int result = 0; result < Aux.Count; result++) { for (int rec = 0; rec < Aux[result].Produc.Count(); rec++) { if (Aux[result].Produc[rec] == 176) { if (rec + 1 < Aux[result].Produc.Count()) { if (Aux[result].Produc[rec + 1] >= 65 && Aux[result].Produc[rec + 1] <= 90) { Aux = AgregaProdS(Aux, Aux[result].Produc[rec + 1], Aux[result].Prim); } } } } } bool repetir = false; for (int rp = 0; rp < Conjuntos.Count; rp++) { repetir = Repeticion(Conjuntos[rp], Aux); if (repetir) { if (term) { orAc.Add(i); Acciones.Add("d" + rp); orPri.Add(X[k]); break; } else { orAc.Add(i); Acciones.Add("" + rp); orPri.Add(X[k]); break; } } } } } string A; string[] div; // Producciones sin el punto for (int i = 0; i < Producciones.Count; i++) { A = Producciones[i].Replace("°", ""); ProSP.Add(A); } for (int i = 0; i < Conjuntos.Count; i++) { for (int j = 0; j < Conjuntos[i].Count; j++) { for (int k = 0; k < Conjuntos[i][j].Produc.Count(); k++) { //aqui //div = Conjuntos[i][j].Produc.Split('➳'); div = SplitFlecha(Conjuntos[i][j].Produc); if (div[0].Length == 1) { if (Conjuntos[i][j].Produc[k] == '°' && k == Conjuntos[i][j].Produc.Count() - 1) { string cambio = Conjuntos[i][j].Produc.Replace("°", ""); for (int l = 0; l < ProSP.Count; l++) { if (cambio == ProSP[l]) { orAc.Add(i); Acciones.Add("r" + l); orPri.Add(Conjuntos[i][j].Prim); } } } } } } } orAc.Add(1); Acciones.Add("Aceptado"); orPri.Add('$'); }
private void button1_Click(object sender, EventArgs e) { Aumentada(); button2.Visible = true; List <Gramatica> E = new List <Gramatica>(); E.Add(new Gramatica(Producciones[0], '$')); C = Cerradura(E); Conjuntos.Add(C); bool repeat = true; for (int i = 0; i < Der.Count(); i++) { for (int j = 0; j < Der[i].Count(); j++) { if (X.Count == 0 && Der[i][j] != 176) { X.Add(Der[i][j]); } else { for (int k = 0; k < X.Count; k++) { if (Der[i][j] == X[k] || Der[i][j] == 176) { repeat = true; k = X.Count; } else { repeat = false; } } if (!repeat) { X.Add(Der[i][j]); } repeat = true; } } } for (int i = 0; i < Conjuntos.Count(); i++) { for (int k = 0; k < X.Count; k++) { List <Gramatica> Aux = new List <Gramatica>(); for (int j = 0; j < Conjuntos[i].Count; j++) { for (int l = 0; l < Conjuntos[i][j].Produc.Count(); l++) { if (Conjuntos[i][j].Produc[l] == 176) { if (l + 1 != Conjuntos[i][j].Produc.Count()) { if (Conjuntos[i][j].Produc[l + 1] == X[k]) { Gramatica result = Ir_a(Conjuntos[i][j], X[k]); Aux.Add(result); } } } } } for (int result = 0; result < Aux.Count; result++) { for (int rec = 0; rec < Aux[result].Produc.Count(); rec++) { if (Aux[result].Produc[rec] == 176) { if (rec + 1 < Aux[result].Produc.Count()) { if (Aux[result].Produc[rec + 1] >= 65 && Aux[result].Produc[rec + 1] <= 90) { Aux = AgregaProdS(Aux, Aux[result].Produc[rec + 1], Aux[result].Prim); } } } } } bool repetir = false; for (int rp = 0; rp < Conjuntos.Count; rp++) { repetir = Repeticion(Conjuntos[rp], Aux); if (repetir) { break; } } if (Aux.Count != 0 && !repetir) { Conjuntos.Add(Aux); } } } CreaTabla(); TAnalisisS.Columns.Add("Estado", "Estado"); for (int i = 0; i < X.Count; i++) { if (X[i] >= 97) { TAnalisisS.Columns.Add(X[i].ToString(), X[i].ToString()); } } TAnalisisS.Columns.Add("$", "$"); for (int i = 0; i < X.Count; i++) { if (X[i] < 97) { TAnalisisS.Columns.Add(X[i].ToString(), X[i].ToString()); } } for (int i = 0; i < Conjuntos.Count; i++) { TAnalisisS.Rows.Add(); } for (int i = 0; i < orAc.Count; i++) { TAnalisisS.Rows[orAc[i]].Cells[0].Value = orAc[i]; for (int j = 0; j < TAnalisisS.ColumnCount; j++) { if (orPri[i].ToString() == TAnalisisS.Columns[j].HeaderText) { TAnalisisS.Rows[orAc[i]].Cells[j].Value = Acciones[i]; } } } }