コード例 #1
0
ファイル: Form1.cs プロジェクト: rigo9412/Proyecto-Lexico
        private void btnEjecutar_Click(object sender, EventArgs e)
        {
            Matriz MT       = new Matriz("1"); //Inicializo mi matriz de transicion en el estado 1 que es mi estado inicial
            int    codAcsii = 0;               //inicializo mis variables en 0

            byte[] array;
            string respuesta = "";
            string palabra = "", cadena2 = "";
            string cadena = "";

            contadorCadena = 0;
            contadorCome   = 0;
            IDcontador     = 0;
            ContCome       = 0;
            ContCade       = 0;
            ContId         = 0;
            listaIDs.Clear();
            ///Termina de inicializar valores
            cadena2 = richTextBox1.Text + " ";        //guardo una cadena sin modificar
            cadena  = richTextBox1.Text + "\u0003";
            cadena  = cadena.Replace(' ', '\u0003');  //convierto los espacios en blanco en mi caracter FDC
            cadena  = cadena.Replace('\n', '\u0003'); //convierto los saltos de linea en mi caracter FDC
            //  cadena=PreparaCadena(cadena);
            for (int i = 0; i < cadena.Length; i++)
            {
                array    = Encoding.ASCII.GetBytes(cadena[i].ToString());//Se obtiene el codigo ACSII
                codAcsii = int.Parse(array[0].ToString());

                if (codAcsii == '"' && contadorCadena == 0 && contadorCome == 0)      //si entra aqui es que puede ser una cadena
                {
                    cadena = PreparaCadena(cadena, i);                                //checa si la cadena tiene fin si es asi reemplaza los FDC previamente puestos por espacios en blanco
                }
                else if (codAcsii == '/' && contadorCadena == 0 && contadorCome == 0) //si entra aqui puede ser un comentario
                {
                    contadorCome++;
                }
                else if (codAcsii == '*' && contadorCadena == 0 && contadorCome == 1)//si detecta un * puede ser un inicio de comentario
                {
                    contadorCome++;
                }

                if (contadorCome == 2)                            //si el contador es igual a dos detecto un inicio de comentario
                {
                    cadena       = prepararComentario(cadena, i); //busca el fin de comentario para quitar los fin de cadena por espacio en blanco
                    contadorCome = 0;                             //pongo el contador en 0
                }


                respuesta = MT.ConsultarEstado(MT.ValidadCaracter(codAcsii), MT.Estado, dataGridView1); //ejecunto el metodo de la clase matriz

                if (respuesta != "OK")                                                                  //si la respuesta es diferente de ok entra

                {
                    if (respuesta == "ACEPTA")    //si es acepta va por el token a la matriz
                    {
                        MT.ConsultarEstado(Conexion.columna, MT.Estado, dataGridView1);
                        // MessageBox.Show(MT.Estado);
                        DeterminarToken(MT.Estado, palabra, cadena2[i]);
                        MT.Estado      = "1";//me regreso al estado 1 y limpio todo
                        palabra        = "";
                        contadorCome   = 0;
                        contadorCadena = 0;
                    }
                    else
                    {
                        MessageBox.Show("Error en el estado:" + MT.Estado + " Caracter donde Inicio Error: " + Convert.ToChar(codAcsii) + "  Total de errores: " + ((cadena.Count()) - i));    //muestra toda la informacion del error ocurrido
                        break;
                    }
                }

                palabra = palabra + Convert.ToChar(codAcsii).ToString();    //sigue la secuencia hasta encontrar una respuesta diferente de OK
            }
        }