private void btnleertodo_Click(object sender, EventArgs e) { Stopwatch st = new Stopwatch(); st.Start(); try { Depurar(); //Analizador Lexico List <string> TokensEntrada = MetodosAL.AnalizadorLexico(rtxtentrada.Text); foreach (string s in TokensEntrada) { rtxtcodigointermedio.Text += s; } //Analizador Sintactico //string strTokens = TrasformarAIden(rtxtcodigointermedio.Text); //rtxtIDEN.Text = strTokens; //AnalizadorSintactico(); List <string> LineasSintactico = MetodosAS.AnalizadorSintactico(TokensEntrada); foreach (string cx in LineasSintactico) { rtxtSalida.Text = cx; } //Analizar Semantico List <string> SemanticaIntermedia = MetodosASe.PrimeraPasada(TokensEntrada); foreach (string linea in SemanticaIntermedia) { rchtxtSementica.Text += linea; } MostrarIdentificadoresConstantes(); List <string> LineasSemanticas = MetodosASe.SegundaPasada(SemanticaIntermedia); foreach (string linea in LineasSemanticas) { rchtxtSementica.Text += linea; } linea = 1; st.Stop(); MessageBox.Show(st.Elapsed.ToString()); } catch (Exception ex) { MessageBox.Show(ex.Message + linea + ".\nVerifique el uso apropiado del léxico.", "Error de analizador léxico", MessageBoxButtons.OK, MessageBoxIcon.Error); linea = 1; } }
void CambiarEstado(char c, ref bool bandera, ref List <string> tokens) { txtEstadoAnt.Text = intEstadoActual.ToString(); intEstadoActual = MetodosAL.NuevoEstado(' ', intEstadoActual, ref bandera); txtEstadoActual.Text = intEstadoActual.ToString(); string tokn = MetodosAL.ObtenerToken(intEstadoActual, caracteres); tokens.Add(tokn); txttoken.Text = tokn; foreach (string tkn in tokens) { txtcadenatokens.Text += tkn + " "; //Muestro la cadena de tokens } rtxtcodigointermedio.Text += txtcadenatokens.Text + "\n"; txtcadenatokens.Text = ""; caracteres.Clear(); intEstadoActual = 0; }
private void btnCaracterXCaracter_Click(object sender, EventArgs e) { try { string strEntrada = rtxtentrada.Text; if (indx == 0) { Depurar(); rtxtcodigointermedio.Text = ""; } strEntrada = strEntrada.Replace('\n', ' '); string[] strPalabras = strEntrada.Split(' '); strEntrada = rtxtentrada.Text; List <string> tokens = new List <string>(); txtSubcadena.Text = strPalabras[palabra];//Mostrar la subcadena actual string palabraActual = strPalabras[palabra]; bool bandera = false; if (strEntrada.Length > indx) { char c = strEntrada[indx]; caracteres.Add(c); if (c != '\n') { txtEstadoAnt.Text = intEstadoActual.ToString(); txtCaracter.Text = c.ToString(); txtnumrenglon.Text = linea.ToString(); intEstadoActual = MetodosAL.NuevoEstado(c, intEstadoActual, ref bandera); if (bandera) { string tokn = MetodosAL.ObtenerToken(intEstadoActual, caracteres); tokens.Add(tokn); txttoken.Text = tokn; foreach (string tkn in tokens) { txtcadenatokens.Text += tkn + " "; //Muestro la cadena de tokens } intEstadoActual = 0; palabra++; //Avanzo a la siguiente palabra bandera = false; caracteres.Clear(); } txtEstadoActual.Text = intEstadoActual.ToString(); } else { linea++; CambiarEstado(' ', ref bandera, ref tokens); palabra++; } indx++; } else { CambiarEstado(' ', ref bandera, ref tokens); indx = 0; palabra = 0; linea = 1; } MostrarIdentificadoresConstantes(); } catch (Exception ex) { MessageBox.Show(ex.Message + linea + ".\nVerifique el uso apropiado del léxico, y el caracter actual.", "Error de analizador léxico", MessageBoxButtons.OK, MessageBoxIcon.Error); } }