private void AceptarBtn_Click(object sender, EventArgs e)
        {
            TablaErrores cerrar = new TablaErrores();

            cerrar.Hide();
        }
Example #2
0
        private void analizarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            /*wenfwenfoiwe****wdhiuwqhd**************jiooihih*/

            listaTokens  = new List <token>();
            listaErrores = new List <Errores>();

            int fila    = 1;
            int columna = 1;

            int noToken = 0;
            int noError = 0;

            string cadena = editorTextoRichtxt.Text;

            int    estado = 0;
            string lexema = "";
            char   letra  = ' '; //

            for (int i = 0; i < cadena.Length; i++)
            {
                letra = Convert.ToChar(cadena.Substring(i, 1));

                switch (estado)
                {
                case 0:

                    if (letra == 13 || letra == 9)
                    {
                        //Salto de Carro espacio
                        estado = 0;
                        lexema = "";
                    }
                    else if (letra == 10)    //aumentar la fila para los saltos de linea
                    {
                        columna = 1;
                        fila++;
                    }
                    else if (char.IsLetter(letra))    //para las letras (ya sean mayusculas o minusculas)
                    {
                        estado  = 1;
                        lexema += letra;
                    }
                    else if (char.IsDigit(letra))    // para los digitos
                    {
                        estado  = 2;
                        lexema += letra;
                    }
                    else if (letra == 59 || letra == 123 || letra == 125)     // para los simbolos ({,},;)
                    {
                        estado  = 6;
                        lexema += letra;
                        i--;
                    }
                    else if (letra == 58)    // para los dos puntos
                    {
                        estado  = 3;
                        lexema += letra;
                    }
                    else if (letra == 34)    //para las comillas
                    {
                        estado  = 4;
                        lexema += letra;
                    }
                    else
                    {
                        estado = 0;
                        string error1 = Convert.ToString(letra);
                        guardarErrores(noError, error1, "componente lexico desconocido", fila, columna);
                        noError++;
                        columna++;
                        lexema = "";
                    }

                    break;

                case 1:

                    if (char.IsLetter(letra) || char.IsDigit(letra) || letra == 95)
                    {
                        lexema += letra;
                    }
                    else
                    {
                        if (!validarPalabraReservada(lexema).Equals(""))
                        {
                            estado = 0;
                            string PalabraReservada = Convert.ToString(lexema);
                            GuadarToken(noToken, PalabraReservada, "Palabra Reservada", fila, columna);
                            noToken++;
                            columna++;
                            lexema = "";
                            i--;
                            // CambiarColor(ID, Color.Orange, 0);
                        }
                        else
                        {
                            estado = 0;
                            string ID = Convert.ToString(lexema);
                            GuadarToken(noToken, ID, "ID", fila, columna);
                            noToken++;
                            columna++;
                            lexema = "";
                            i--;
                        }
                    }

                    break;

                case 2:

                    if (char.IsDigit(letra))
                    {
                        lexema += letra;
                    }
                    else
                    {
                        estado = 0;
                        string ID = Convert.ToString(lexema);
                        GuadarToken(noToken, ID, "Digito", fila, columna);
                        noToken++;
                        columna++;
                        lexema = "";
                        i--;
                        CambiarColor(ID, Color.Yellow, 0);
                    }

                    break;

                case 3:

                    if (letra == 58)     // dos puntos de nuevo
                    {
                        estado  = 5;
                        lexema += letra;
                    }
                    else
                    {
                        estado = 0;
                        string ID = Convert.ToString(lexema);
                        GuadarToken(noToken, ID, "Dos puntos", fila, columna);
                        noToken++;
                        columna++;
                        lexema = "";
                        i--;
                    }

                    break;

                case 4:

                    if (letra != 34)
                    {
                        estado  = 4;
                        lexema += letra;
                    }
                    else if (letra == 34)
                    {
                        estado  = 6;
                        lexema += letra;
                        i--;
                    }

                    break;

                case 5:

                    if (letra == 61)
                    {
                        estado  = 6;
                        lexema += letra;
                        i--;
                    }
                    else
                    {
                        estado = 0;
                        string error2 = Convert.ToString(lexema);
                        guardarErrores(noError, error2, "componente lexico desconocido", fila, columna);
                        noError++;
                        columna++;
                        lexema = "";
                        i--;
                    }

                    break;

                case 6:

                    if (letra == 59 || letra == 123 || letra == 125)
                    {
                        if (letra == 59)
                        {
                            estado = 0;
                            string ID = Convert.ToString(lexema);
                            GuadarToken(noToken, ID, "Punto y coma", fila, columna);
                            noToken++;
                            columna++;
                            lexema = "";
                        }
                        else if (letra == 123)
                        {
                            estado = 0;
                            string ID = Convert.ToString(lexema);
                            GuadarToken(noToken, ID, "llave que abre", fila, columna);
                            noToken++;
                            columna++;
                            lexema = "";
                        }
                        else if (letra == 125)
                        {
                            estado = 0;
                            string ID = Convert.ToString(lexema);
                            GuadarToken(noToken, ID, "llave que cierra", fila, columna);
                            noToken++;
                            columna++;
                            lexema = "";
                        }
                    }
                    else if (letra == 34)
                    {
                        estado = 0;
                        string ID = Convert.ToString(lexema);
                        GuadarToken(noToken, ID, "Cadena", fila, columna);
                        noToken++;
                        columna++;
                        lexema = "";
                    }
                    else if (letra == 61)
                    {
                        estado = 0;
                        string ID = Convert.ToString(lexema);
                        GuadarToken(noToken, ID, "Asignacion", fila, columna);
                        noToken++;
                        columna++;
                        lexema = "";
                    }

                    break;
                }
            }

            if (listaErrores.Count != 0)//si hay errores, muestra tabla de errores
            {
                TablaErrores abrirErr = new TablaErrores();
                abrirErr.Show();

                MessageBox.Show("el codigo se encuentra con errores lexicos" + "\n" +
                                "ver errores en la tabla los errores y corregir todos los errores lexicos " + "\n" +
                                "para generar el Administrador de Documentos");
            }
            else if (listaTokens.Count == 0 && listaErrores.Count == 0)
            {
                MessageBox.Show("El texto ingresado al editor de texto no es valido" + "\n"
                                + "porfavor ingrese codigo correcto al editor");
            }

            if (listaErrores.Count == 0)
            {
                if (listaTokens.Count != 0)
                {
                    CambiarColor(":", Color.Pink, 0);
                    CambiarColor(";", Color.Red, 0);
                    CambiarColor("{", Color.Purple, 0);
                    CambiarColor("}", Color.Purple, 0);
                    CambiarColor("::=", Color.Blue, 0);


                    for (int j = 0; j < listaTokens.Count; j++)// para las palabras reservadas
                    {
                        string token = listaTokens[j].Lexema.ToLower();

                        for (int k = 0; k < palabrasReservadas.Length; k++)
                        {
                            if (token.Equals(palabrasReservadas[k]))
                            {
                                CambiarColor(listaTokens[j].Lexema, Color.Cyan, 0);
                            }
                        }
                    }

                    for (int j = 0; j < listaTokens.Count; j++)// para los ID de mes
                    {
                        string token = listaTokens[j].Lexema.ToLower();

                        if (token.Equals("mes"))
                        {
                            CambiarColor(listaTokens[j + 2].Lexema, Color.Orange, 0);
                        }
                    }

                    for (int j = 0; j < listaTokens.Count; j++)// para los ID de nombre
                    {
                        string token = listaTokens[j].Lexema.ToLower();

                        if (token.Equals("nombre"))
                        {
                            CambiarColor(listaTokens[j + 2].Lexema, Color.Orange, 0);
                        }
                    }

                    for (int j = 0; j < listaTokens.Count; j++)// para las cadenas de path
                    {
                        string token = listaTokens[j].Lexema.ToLower();

                        if (token.Equals("path"))
                        {
                            CambiarColor(listaTokens[j + 2].Lexema, Color.Green, 0);
                        }
                    }

                    MessageBox.Show("El texto se ah analizado correctamente, y no se encontraron errores lexicos");

                    ObtenerDatosTreeView();

                    AdminDoc abrir = new AdminDoc();
                    abrir.Show();
                }
            }
        }