public void ejemplo_2(string texto) { Console.WriteLine("La entrada del ejemplo 2 se escribe en el label de la pagina principal"); if (texto != null) { Lexico querer = new Lexico(texto); List <analisis> elemento = querer.leerCadena(); foreach (analisis p in elemento) { Console.WriteLine(p.palabra + " , " + p.tipo); } } }
public void ejemplo_2(string texto) { Console.WriteLine("La entrada del ejemplo 2 se escribe en el label de la pagina principal"); if (texto != null) { Lexico querer = new Lexico(texto); List <string> elemento = querer.leerCadena(); for (int i = 0; i < elemento.Count(); i++) { string[] palabra = elemento[i].Split('#'); Console.WriteLine(palabra[0] + " , " + palabra[2]); } } }
private void analizar_cadena() { Lexico querer = new Lexico(textBox1.Text); List <string> elemento = querer.leerCadena(); for (int i = 0; i < elemento.Count(); i++) { string[] palabra = elemento[i].Split('#'); dataGridView1.Rows.Add(palabra[0], palabra[1], palabra[2]); } /* * foreach (string palabra in texto) * { * int numero = 0; * float numero2 = 0; * bool result=false; * bool result2=false; * try * { * result= int.TryParse(palabra, out numero); * result2 = float.TryParse(palabra, out numero2); * } catch { }; * * if (palabras_reservadas.Contains(palabra)) * coincidencias.Add(palabra + ":\t es palabra reservada."); * else if (simbolos.Contains(palabra)) * coincidencias.Add(palabra + ":\t es un simbolo."); * else if (operadores.Contains(palabra)) * coincidencias.Add(palabra + ":\t es un operador."); * else if (result) * coincidencias.Add(palabra + ":\t es un numero."); * else if (result2) * coincidencias.Add(palabra + ":\t es un real"); * else if(palabra!= "") * coincidencias.Add(palabra + ":\t es un identificador."); * }*/ }
private void analizar_cadena() { Lexico querer = new Lexico(textBox1.Text); List <analisis> elemento = querer.leerCadena(); foreach (analisis p in elemento) { dataGridView1.Rows.Add(p.palabra, p.id, p.tipo); } /* * foreach (string palabra in texto) * { * int numero = 0; * float numero2 = 0; * bool result=false; * bool result2=false; * try * { * result= int.TryParse(palabra, out numero); * result2 = float.TryParse(palabra, out numero2); * } catch { }; * * if (palabras_reservadas.Contains(palabra)) * coincidencias.Add(palabra + ":\t es palabra reservada."); * else if (simbolos.Contains(palabra)) * coincidencias.Add(palabra + ":\t es un simbolo."); * else if (operadores.Contains(palabra)) * coincidencias.Add(palabra + ":\t es un operador."); * else if (result) * coincidencias.Add(palabra + ":\t es un numero."); * else if (result2) * coincidencias.Add(palabra + ":\t es un real"); * else if(palabra!= "") * coincidencias.Add(palabra + ":\t es un identificador."); * }*/ }
public void ejemplo_3() { int [,] tabla = new int[3, 3] { { 2, 0, 1 }, { 0, -1, 0 }, { 0, -2, 0 } }; Stack <string> pila = new Stack <string>(); int fila = 0, columna = 0, accion = 0; bool aceptación = false; Lexico lexico = new Lexico("a$"); pila.Push("1"); pila.Push("0"); List <string> elemento = lexico.leerCadena(); string[] palabra = elemento[0].Split('#'); try { fila = Convert.ToInt32(pila.Peek()); columna = Convert.ToInt32(palabra[1]); } catch { }; accion = tabla[fila, columna]; mostrar2(pila); Console.WriteLine("entrada: " + palabra[0]); Console.WriteLine("accion: " + accion); pila.Push(palabra[1]); pila.Push(Convert.ToString(accion)); if (accion == 2) { palabra = elemento[1].Split('#'); try { fila = Convert.ToInt32(pila.Peek()); columna = Convert.ToInt32(palabra[1]); } catch { }; accion = tabla[fila, columna]; mostrar2(pila); Console.WriteLine("entrada: " + palabra[0]); Console.WriteLine("accion: " + accion); } if (accion == -2) { pila.Pop(); pila.Pop(); try { fila = Convert.ToInt32(pila.Peek()); columna = 2; } catch { }; accion = tabla[fila, columna]; //transicion pila.Push(Convert.ToString(2)); pila.Push(Convert.ToString(accion)); mostrar2(pila); Console.WriteLine("entrada: " + palabra[0]); Console.WriteLine("accion: " + accion); try { fila = Convert.ToInt32(pila.Peek()); columna = Convert.ToInt32(palabra[1]); } catch { }; accion = tabla[fila, columna]; if (accion == -1) { mostrar2(pila); Console.WriteLine("entrada: " + palabra[0]); Console.WriteLine("accion: " + accion); aceptación = accion == -1; if (aceptación) { Console.WriteLine("aceptacion"); } } } }
public void ejercicio_2(string cadena) { int[,] tabla = new int[5, 4] { { 2, 0, 0, 1 }, { 0, 0, -1, 0 }, { 0, 3, -3, 0 }, { 2, 0, 0, 4 }, { 0, 0, -2, 0 } }; int[] idRegla = new int[2] { 2, 2 }; int[] lonRegla = new int[2] { 3, 0 }; Stack <string> pila = new Stack <string>(); int pos = 0;//indica la posicion actual del analizador lexico int fila = 0, columna = 0, accion = 0; bool aceptación = false; Lexico lexico = new Lexico(cadena + "$"); pila.Push("2"); pila.Push("0"); List <string> elemento = lexico.leerCadena(); string[] palabra = elemento[0].Split('#'); fila = Convert.ToInt32(pila.Peek()); columna = Convert.ToInt32(palabra[1]); accion = tabla[fila, columna]; mostrar2(pila); accionEntrada(accion, palabra[0]); while (!aceptación || accion == 0) { if (accion > 0) { if (palabra[1] == "0") { lonRegla[0] = +1; } if (palabra[1] == "1") { lonRegla[1] += 1; } pila.Push(palabra[1]); pila.Push(Convert.ToString(accion)); if (pos + 1 < elemento.Count()) { pos++; } palabra = elemento[pos].Split('#'); fila = Convert.ToInt32(pila.Peek()); columna = Convert.ToInt32(palabra[1]); accion = tabla[fila, columna]; mostrar2(pila); accionEntrada(accion, palabra[0]); } if (accion == 0) { Console.WriteLine("error"); break; } if (accion < 0) { if (accion == -3) { pila.Pop(); pila.Pop(); fila = Convert.ToInt32(pila.Peek()); columna = 3; accion = tabla[fila, columna]; pila.Push("4"); pila.Push(Convert.ToString(accion)); mostrar2(pila); accionEntrada(accion, palabra[0]); } if (accion == -2) { pila.Pop(); pila.Pop(); pila.Pop(); pila.Pop(); pila.Pop(); pila.Pop(); pila.Pop(); pila.Pop(); fila = Convert.ToInt32(pila.Peek()); columna = 3; accion = tabla[fila, columna]; pila.Push("4"); pila.Push(Convert.ToString(accion)); mostrar2(pila); accionEntrada(accion, palabra[0]); } if (accion == -1) { fila = Convert.ToInt32(pila.Peek()); columna = Convert.ToInt32(palabra[1]); accion = tabla[fila, columna]; mostrar2(pila); accionEntrada(accion, palabra[0]); aceptación = accion == -1; if (aceptación) { Console.WriteLine("aceptacion"); } } } } }
public void ejercicio_2(string cadena) { int[,] tabla = new int[5, 4] { { 2, 0, 0, 1 }, { 0, 0, -1, 0 }, { 0, 3, -3, 0 }, { 2, 0, 0, 4 }, { 0, 0, -2, 0 } }; int[] idRegla = new int[2] { 2, 2 }; int[] lonRegla = new int[2] { 3, 0 }; Stack <ElementoPila> pila = new Stack <ElementoPila>(); int fila = 0, columna = 0, accion = 0; bool aceptación = false; Lexico lexico = new Lexico(cadena + "$"); ElementoPila aux; List <analisis> elemento = lexico.leerCadena(); pila.Push(new Terminal(2, "$", accion)); aux = pila.Peek(); fila = aux.accion; int i = 0; columna = elemento[i].id; accion = tabla[fila, columna]; mostrar2(pila); accionEntrada(accion, elemento[i].palabra); while (!aceptación || accion == 0) { if (accion > 0) { if (elemento[i].id == 0) { lonRegla[0] = +1; } if (elemento[i].id == 1) { lonRegla[1] += 1; } pila.Push(new NoTerminal(elemento[i].id, elemento[i].palabra, accion)); if (i + 1 < elemento.Count()) { i++; } aux = pila.Peek(); fila = aux.accion; columna = elemento[i].id; accion = tabla[fila, columna]; mostrar2(pila); accionEntrada(accion, elemento[i].palabra); } if (accion == 0) { Console.WriteLine("error"); break; } if (accion < 0) { if (accion == -3) { pila.Pop(); aux = pila.Peek(); fila = aux.accion; columna = 3; accion = tabla[fila, columna]; pila.Push(new Estado(4, "E2", accion)); mostrar2(pila); accionEntrada(accion, elemento[i].palabra); } if (accion == -2) { pila.Pop(); pila.Pop(); pila.Pop(); pila.Pop(); aux = pila.Peek(); fila = aux.accion; columna = 3; accion = tabla[fila, columna]; pila.Push(new Estado(4, "E1", accion)); mostrar2(pila); accionEntrada(accion, elemento[i].palabra); } if (accion == -1) { aux = pila.Peek(); fila = aux.accion; columna = elemento[i].id; accion = tabla[fila, columna]; mostrar2(pila); accionEntrada(accion, elemento[i].palabra); aceptación = accion == -1; if (aceptación) { Console.WriteLine("aceptacion"); } } } } }
public void ejemplo_3() { int [,] tabla = new int[3, 3] { { 2, 0, 1 }, { 0, -1, 0 }, { 0, -2, 0 } }; Stack <ElementoPila> pila = new Stack <ElementoPila>(); int fila = 0, columna = 0, accion = 0; bool aceptación = false; Lexico lexico = new Lexico("a$"); analisis entrada = new analisis(); entrada.modificar(0, "$", "$"); ElementoPila t = new Terminal(entrada.id, entrada.palabra, 0); ElementoPila aux; pila.Push(t); List <analisis> elemento = lexico.leerCadena(); aux = pila.Peek(); fila = aux.accion; columna = elemento[0].id; accion = tabla[fila, columna]; ElementoPila nt = new NoTerminal(entrada.id, entrada.palabra, accion); mostrar2(pila); Console.WriteLine("entrada: " + elemento[1].palabra); Console.WriteLine("accion: " + nt.accion); pila.Push(nt); if (accion == 2) { aux = pila.Peek(); fila = aux.accion; columna = elemento[1].id; accion = tabla[fila, columna]; pila.Push(new NoTerminal(elemento[1].id, elemento[1].palabra, accion)); mostrar2(pila); Console.WriteLine("entrada: " + elemento[1].palabra); Console.WriteLine("accion: " + accion); } if (accion == -2) { pila.Pop(); aux = pila.Peek(); fila = aux.accion; columna = 2; accion = tabla[fila, columna]; //transicion pila.Push(new Estado(2, "E1", accion)); mostrar2(pila); Console.WriteLine("entrada: " + elemento[1].palabra); Console.WriteLine("accion: " + accion); aux = pila.Peek(); fila = aux.accion; columna = elemento[1].id; accion = tabla[fila, columna]; if (accion == -1) { mostrar2(pila); Console.WriteLine("entrada: " + elemento[1].palabra); Console.WriteLine("accion: " + accion); aceptación = accion == -1; if (aceptación) { Console.WriteLine("aceptacion"); } } } }