public void Emparejar(string t) { Console.WriteLine("ENTRO A Emaprejamiento"); if (tar.variable == t) { textBox2.AppendText("<Linea: " + tar.numeroLinea + " Variable: \"" + tar.variable + "\" TOKEN: \"" + tar.valor + "\">\n"); textBox2.AppendText("Se empareja: " + tar.valor + "\n"); tar = AnalisisLexico(ref posicion, ref errDeCaracter); tea.Add(tar); } else { textBox2.AppendText("Error Sintactico de emparejamiento, EXPECTED: " + t + "\n"); } }
public TokensEnArchivo AnalisisLexico(ref int pos, ref string errDeCaracter) { int estadoActual = 0; int valor; bool isExpected = false; string tok = ""; string tipo = ""; TokensEnArchivo tokADevolver; List <string> expectedChars = new List <string>(); while (lineas[pos].caracter == " " || lineas[pos].caracter == "\n" || lineas[pos].caracter == "\t") { pos++; } for (; pos < lineas.Count; pos++) { isExpected = false; foreach (Finales f in finales) { if (estadoActual == f.estado) { tok = tok.Trim(new Char[] { ' ', '\n', '\t' }); foreach (string reserv in reservadas) { if (tok == reserv) { Console.WriteLine("ENTRO A RESERV" + " Variable: " + tok + " TOKEN: " + tok); tokADevolver = new TokensEnArchivo(lineas[pos].numeroLinea, reserv, tok); return(tokADevolver); } } tokADevolver = new TokensEnArchivo(lineas[pos].numeroLinea, f.token, tok); return(tokADevolver); } } expectedChars = expectedChar(estadoActual); foreach (string s in expectedChars) { if (lineas[pos].isNumber) { tipo = "NUMERO"; } else if (lineas[pos].isLetter) { tipo = "ALFABETO"; } else { tipo = lineas[pos].caracter; } if (tipo == s) { valor = getPosAlfa(tipo); estadoActual = cm.Matriz[estadoActual, valor]; tok += lineas[pos].caracter; isExpected = true; break; } } if (!isExpected) { tipo = "otro"; Console.WriteLine("ES OTRO"); valor = getPosAlfa(tipo); if (cm.Matriz[estadoActual, valor] == -1) { errDeCaracter = "TOKEN INESPERADO: " + lineas[pos].caracter + ". TOKEN ESPERADO: "; tok = "ERROR400"; foreach (string s in expectedChars) { errDeCaracter += s + " || "; } textBox2.AppendText("\n"); lineas.Clear(); expectedChars.Clear(); tea.Clear(); tokADevolver = new TokensEnArchivo(1, tok, tok); return(tokADevolver); } estadoActual = cm.Matriz[estadoActual, valor]; pos--; } } tokADevolver = new TokensEnArchivo(lineas[pos - 1].numeroLinea, "EOF", "EOF"); return(tokADevolver); }
/* * metodo que se acciona cuando se presiona el boton de checar cadena * basicamente obtiene el texto en la caja 2 y lo trata con * el automata para determinar si la cadena es correcta */ private void button1_Click(object sender, EventArgs e) { int contadorLineas = textBox1.Lines.Count(); bool isNumber; bool isLetter; int k = 0; posicion = 0; errDeCaracter = ""; List <string> expectedChars = new List <string>(); for (int i = 0; i < contadorLineas; i++) { for (int j = 0; j < textBox1.Lines[i].Length; j++) { string caracter = textBox1.Lines[i][j].ToString(); if (String.IsNullOrEmpty(caracter)) { continue; } if (caracter == "\n") { caracter = " "; } if (caracter == "\t") { caracter = " "; } isNumber = checkIfNumero(caracter); isLetter = checkIfLetter(caracter); Lineas l = new Lineas(i + 1, caracter, isNumber, isLetter); lineas.Add(l); } k = i + 1; } foreach (Caracteres c in caracteres) { if (lineas[lineas.Count - 1].caracter != c.valor && c.valor != "NUMERO" && c.valor != "ALFABETO" && c.valor != " ") { Lineas final = new Lineas(k, c.valor, false, false); // Console.WriteLine("VALOR FINAL: " + c.valor); lineas.Add(final); break; } } // Empieza análisis sintáctico tar = AnalisisLexico(ref posicion, ref errDeCaracter); tea.Add(tar); E(); if (tar.variable != "EOF") { textBox2.AppendText("Error, se esperaba, fin de archivo(EOF)" + "\n"); } /* while (posicion < lineas.Count) * { * * tar = AnalisisLexico(ref posicion, ref errDeCaracter); * if(tar.valor == "ERROR400") * { * textBox2.AppendText(errDeCaracter); * break; * } * else if (tar.valor == "EOF") * { * break; * } * E(); * tea.Add(tar); * // Console.WriteLine("Linea: " + tar.numeroLinea + " Variable: " + tar.variable + " TOKEN: " + tar.valor); * } */ /* * foreach (TokensEnArchivo t in tea) * { * textBox2.AppendText("<Linea: " + t.numeroLinea + " Variable: \"" + t.variable + "\" TOKEN: \"" + t.valor + "\">\n"); * } */ textBox2.AppendText("--------------------------------------------------------------" + "\n"); tea.Clear(); lineas.Clear(); expectedChars.Clear(); tar = null; }