Example #1
0
        /// <summary>
        /// Funcion que identifica a que tipo de componente lexico pertenece el
        /// caracter leido de la cadena de entrada
        /// </summary>
        /// <param name="parRes">Siguiente caracter leido de la cadena de entrada</param>
        /// <returns>Retorna un tipo entero indicando el Id de la tabla al que pertenece
        /// el carcater leido</returns>
        public int tipoDeSimbolo(char parRes)
        {
            char cCar = parRes;
            CBuscarConcordancia objCBuscarConcordancia = new CBuscarConcordancia();

            if (objCBuscarConcordancia.IsCaracterEspecial(cCar) == true)
            {
                if (objCBuscarConcordancia.IsopAritmetico(cCar) == true)
                {
                    return(4);
                }
                else if (objCBuscarConcordancia.IsopLogico(cCar) == true)
                {
                    return(5);
                }
                else if (objCBuscarConcordancia.IsopRelacional(cCar) == true)
                {
                    return(6);
                }
                else if (objCBuscarConcordancia.IsopAsignacion(cCar) == true)
                {
                    return(7);
                }
                else if (objCBuscarConcordancia.IsParentesisCircular(cCar) == true)
                {
                    return(8);
                }
                else if (objCBuscarConcordancia.IsParentesisCuadrado(cCar) == true)
                {
                    return(9);
                }
                else if (objCBuscarConcordancia.IsLlaves(cCar) == true)
                {
                    return(10);
                }
            }
            else if (objCBuscarConcordancia.IsCaracterAlfabeto(cCar) == true)
            {
                return(2);
            }
            else if (WindowsApplication1.CBuscarConcordancia.IsDigito(cCar) == true)
            {
                return(3);
            }
            else if (cCar == '\n')              //Caracter Fin de linea
            {
                return(11);
            }
            else if (cCar == '\x0')
            {
                return(12);       //Caracter Fin de Archivo
            }
            return(-1);           //Simbolo no reconocido
        }
Example #2
0
        public string analizadorLexico()
        {
            int    iAm           = 0;
            int    iAf           = 0;
            bool   bConcordancia = false;
            string sCadEntrada   = this.txtCadena.Text;
            string sLexema       = string.Empty;
            string sToken        = string.Empty;
            string sRes          = string.Empty;
            string sRes2         = string.Empty;

            CBuscarConcordancia objCBuscarConcordancia = new CBuscarConcordancia();
            CAnalizadorLexico   objAnalizadorLexico    = new CAnalizadorLexico();

            lstvInfo.Items.Clear();

            if (this.txtCadena.Text != string.Empty)
            {
                while (sRes != "EOF")
                {
                    bConcordancia = objAnalizadorLexico.buscarConcordancia(sCadEntrada + "\x0", ref iAf, ref iAm, out sRes, out sRes2);

                    if (bConcordancia)
                    {
                        sLexema = string.Empty;
                        sLexema = CAnalizadorLexico.extraerLexema(sCadEntrada, ref iAf, ref iAm);

                        switch (sRes)
                        {
                        //Token Lexema Numeros
                        case "Numero":
                            sToken = objAnalizadorLexico.tokenLexema(sLexema, sRes, sRes2, "Numeros");
                            break;

                        //Token Lexema Identificador
                        case "Identificador":
                            sToken = objAnalizadorLexico.tokenLexema(sLexema, "Identificador");
                            break;

                        default:
                            sToken = "";
                            break;
                        }

                        if (sToken == string.Empty)
                        {
                            sToken = objAnalizadorLexico.tokenLexema(sCadEntrada, sLexema, ref iAf, ref iAm);
                            //Token de un Simbolo Reconocido
                            mostrarTokenLexema(lstvInfo, sLexema, sToken);
                        }
                        else
                        {
                            //Token de un Simbolo Reconocido
                            mostrarTokenLexema(lstvInfo, sLexema, sToken);
                        }
                        bConcordancia = true;
                        iAf           = iAm;              //Igualar la posicion de los dos apuntadores
                    }
                    else
                    {
                    }
                }                //Fin While

                //Regresar Token Fin de Archivo
                mostrarTokenLexema(lstvInfo, "EOF", "(0,0)");
            }
            else
            {
                MessageBox.Show("Cadena Vacia intentelo otra vez");
            }

            sToken = "Cadena Vacia";
            return(sToken);
        }
Example #3
0
        /// <summary>
        /// Ejecuta el diagrama de transicion correspondiente para identificar
        /// Palabras Reservadas o Identificadores
        /// </summary>
        /// <param name="parCar">Caracter de entrada al diagrama de transicion</param>
        /// <param name="parAf">Apuntador Fijo</param>
        /// <param name="parAm">Apuntador Movil</param>
        /// <returns>True si encuetra una concordancia, False en caso contrario</returns>
        public bool IsEstadoTerminalPalabraReservada(string parCadEntrada, char parCar, ref int iAm)
        {
            char   cCar        = parCar;
            string sCadEntrada = parCadEntrada;

            CAnalizadorLexico objAnalizadorLexico = new CAnalizadorLexico();

            int  iEstado      = 0;
            bool bError       = false;
            bool bEstadoFinal = false;
            CBuscarConcordancia objCBuscarConcordancia = new CBuscarConcordancia();

            while (!bEstadoFinal)
            {
                switch (iEstado)
                {
                case 0:
                    if (objCBuscarConcordancia.IsCaracterMin(cCar) == true)
                    {
                        iEstado = 1;
                        cCar    = objAnalizadorLexico.sgteCar(sCadEntrada, ref iAm);
                    }
                    else if (objCBuscarConcordancia.IsCaracterMay(cCar) == true)
                    {
                        iEstado = 2;
                        cCar    = objAnalizadorLexico.sgteCar(sCadEntrada, ref iAm);
                    }
                    else
                    {
                        bError       = true;
                        bEstadoFinal = true;
                    }
                    break;

                case 1:
                    if (objCBuscarConcordancia.IsCaracterMin(cCar) == true)
                    {
                        iEstado = 1;
                        cCar    = objAnalizadorLexico.sgteCar(sCadEntrada, ref iAm);
                    }
                    else if (IsDigito(cCar) == true)
                    {
                        iEstado = 2;
                        cCar    = objAnalizadorLexico.sgteCar(sCadEntrada, ref iAm);
                    }
                    else if (objCBuscarConcordancia.IsCaracterMay(cCar) == true)
                    {
                        iEstado = 2;
                        cCar    = objAnalizadorLexico.sgteCar(sCadEntrada, ref iAm);
                    }
                    else
                    {
                        iEstado = 4;
                    }
                    break;

                case 2:
                    if (IsDigito(cCar) == true)
                    {
                        iEstado = 2;
                        cCar    = objAnalizadorLexico.sgteCar(sCadEntrada, ref iAm);
                    }
                    else if (objCBuscarConcordancia.IsCaracterMin(cCar) == true)
                    {
                        iEstado = 2;
                        cCar    = objAnalizadorLexico.sgteCar(sCadEntrada, ref iAm);
                    }
                    else if (objCBuscarConcordancia.IsCaracterMay(cCar) == true)
                    {
                        iEstado = 2;
                        cCar    = objAnalizadorLexico.sgteCar(sCadEntrada, ref iAm);
                    }
                    else
                    {
                        iEstado = 3;
                    }
                    break;

                case 3:
                    bEstadoFinal = true;
                    break;

                case 4:
                    bEstadoFinal = true;
                    break;

                default:
                    break;
                }
            }            //Fin while

            if (bError == false)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Example #4
0
        /// <summary>
        /// Token Lexema General
        /// </summary>
        /// <param name="parsCadEntrada">Cadena de entrada dada por el usuario</param>
        /// <param name="parsLexema">Lexema extraido de la cadena de entrada</param>
        /// <param name="iAf">Apuntador Fijo</param>
        /// <param name="iAm">Apuntador Movil</param>
        /// <returns></returns>
        public string tokenLexema(string parsCadEntrada, string parsLexema, ref int iAf, ref int iAm)
        {
            string              sLexema                = parsLexema;
            string              sToken                 = string.Empty;
            string              sCadEntrada            = parsCadEntrada;
            char                cCar                   = sLexema[0];
            int                 i                      = 0;
            CCompoLex           objCCompoLex           = new CCompoLex();
            CBuscarConcordancia objCBuscarConcordancia = new CBuscarConcordancia();


            for ( ; i <= objCCompoLex.sPalReservadas.Length - 1; i++)
            {
                if (sLexema.Equals(objCCompoLex.sPalReservadas[i]))
                {
                    return("(1," + i.ToString() + ")");
                }
                else
                {
                    continue;
                }
            }

            for (i = 0; i <= objCCompoLex.sOpAritmeticos.Length - 1; i++)
            {
                if (sLexema.Equals(objCCompoLex.sOpAritmeticos[i]))
                {
                    return("(2," + i.ToString() + ")");
                }
                else
                {
                    continue;
                }
            }

            for (i = 0; i <= objCCompoLex.sOpRelacionales.Length - 1; i++)
            {
                if (sLexema.Equals(objCCompoLex.sOpRelacionales[i]))
                {
                    return("(3," + i.ToString() + ")");
                }
                else
                {
                    continue;
                }
            }

            for (i = 0; i <= objCCompoLex.sOpLogicos.Length - 1; i++)
            {
                if (sLexema.Equals(objCCompoLex.sOpLogicos[i]))
                {
                    return("(4," + i.ToString() + ")");
                }
            }

            for (i = 0; i <= objCCompoLex.sParCircular.Length - 1; i++)
            {
                if (sLexema.Equals(objCCompoLex.sParCircular[i]))
                {
                    return("(5," + i.ToString() + ")");
                }
            }

            for (i = 0; i <= objCCompoLex.sParCuadrado.Length - 1; i++)
            {
                if (sLexema.Equals(objCCompoLex.sParCuadrado[i]))
                {
                    return("(6," + i.ToString() + ")");
                }
            }

            for (i = 0; i <= objCCompoLex.sLlaves.Length - 1; i++)
            {
                if (sLexema.Equals(objCCompoLex.sLlaves[i]))
                {
                    return("(7," + i.ToString() + ")");
                }
            }

            if (sLexema.Equals("="))
            {
                return("(12,1)");
            }
            else
            {
                return("");
            }
        }
Example #5
0
        /// <summary>
        /// Identifica cual es el patron de concordancia con el que encaja la cadena leida
        /// de la cadena de entrada
        /// </summary>
        /// <param name="parCadena">Cadena de Entrada proporcionada por el usuario</param>
        /// <param name="iAf">Apuntador Fijo en la cadena de entrada</param>
        /// <param name="iAm">Apuntador Movil en la cadena de entrada</param>
        /// <param name="sRes">Variable de control entre funciones</param>
        /// <param name="sRes2">Variable de control entre funciones</param>
        /// <returns>True si encontro una concordancia, FALSE en caso contrario</returns>
        public bool buscarConcordancia(string parCadena, ref int iAf, ref int iAm, out string sRes, out string sRes2)
        {
            string sCadena       = parCadena;
            string sLexema       = string.Empty;
            bool   bConcordancia = false;

            sRes  = string.Empty;
            sRes2 = string.Empty;
            char cCar = sCadena[iAm];

            CBuscarConcordancia objCBuscarConcordancia = new CBuscarConcordancia();
            CAnalizadorLexico   objCAnalizadorLexico   = new CAnalizadorLexico();

            //Espacios
            if (cCar == ' ')
            {
                cCar          = objCAnalizadorLexico.sgteCar(sCadena, ref iAm);
                bConcordancia = true;
            }            //Identificadores,Palabras Reservadas
            else if (objCBuscarConcordancia.IsEstadoTerminalPalabraReservada(sCadena, cCar, ref iAm) == true)
            {
                sLexema = CAnalizadorLexico.extraerLexema(sCadena, ref iAf, ref iAm);
                if (objCBuscarConcordancia.IsPalabraReservada(sLexema) == false)
                {
                    //Verificar si el Identificador ya existe para no agregarlo
                    if (objCBuscarConcordancia.IsExistsIdentificador(sLexema) == true)
                    {
                        sRes = "Identificador";
                    }                    //Identificador Nuevo
                    else
                    {
                        CCompoLex.iIdentificador.Add(sLexema);
                        sRes = "Identificador";
                    }
                }
                bConcordancia = true;
            }
            else if (objCBuscarConcordancia.IsNumero(sCadena, cCar, ref iAm, out sRes))
            {
                switch (sRes)
                {
                case "NumEntero":
                    bConcordancia = true;
                    //Agregar simbolo a la tabla
                    sLexema = extraerLexema(sCadena, ref iAf, ref iAm);
                    CCompoLex.NumerosEnteros.Add(sLexema);
                    sRes  = "Numero";
                    sRes2 = "Entero";
                    break;

                case "NumReal":
                    bConcordancia = true;
                    //Agregar simbolo a la tabla
                    sLexema = extraerLexema(sCadena, ref iAf, ref iAm);
                    CCompoLex.NumerosFlotantes.Add(sLexema);
                    sRes  = "Numero";
                    sRes2 = "Real";
                    break;

                case "NumExpCientifica":
                    bConcordancia = true;
                    //Agregar simbolo a la tabla
                    sLexema = extraerLexema(sCadena, ref iAf, ref iAm);
                    CCompoLex.NumerosNotacionCientifica.Add(sLexema);
                    sRes  = "Numero";
                    sRes2 = "NotacionCientifica";
                    break;

                default:
                    sRes  = "";
                    sRes2 = "";
                    break;
                }
            }
            //Operador Aritmetico
            else if (objCBuscarConcordancia.IsEstadoTerminalOpAritmetico(sCadena, cCar, ref iAf, ref iAm) == true)
            {
                bConcordancia = true;
            }            //Operador Logico
            else if (objCBuscarConcordancia.IsEstadoTerminalOpLogico(sCadena, cCar, ref iAf, ref iAm) == true)
            {
                bConcordancia = true;
            }            //Operador Relacional
            else if (objCBuscarConcordancia.IsEstadoTerminalOpRelacional(sCadena, cCar, ref iAf, ref iAm) == true)
            {
                bConcordancia = true;
            }            //Operador Asignacion
            else if (objCBuscarConcordancia.IsopAsignacion(cCar) == true)
            {
                bConcordancia = true;
                cCar          = objCAnalizadorLexico.sgteCar(sCadena, ref iAm);
            }            //Parentesis Circular
            else if (objCBuscarConcordancia.IsParentesisCircular(cCar) == true)
            {
                bConcordancia = true;
                cCar          = objCAnalizadorLexico.sgteCar(sCadena, ref iAm);
            }            //Parentesis Cuadrado
            else if (objCBuscarConcordancia.IsParentesisCuadrado(cCar) == true)
            {
                bConcordancia = true;
                cCar          = objCAnalizadorLexico.sgteCar(sCadena, ref iAm);
            }            //Llaves
            else if (objCBuscarConcordancia.IsLlaves(cCar) == true)
            {
                bConcordancia = true;
                cCar          = objCAnalizadorLexico.sgteCar(sCadena, ref iAm);
            }            //Algun otro caracter especial
            else if (objCBuscarConcordancia.IsCaracterEspecial(cCar))
            {
                bConcordancia = true;
                cCar          = objCAnalizadorLexico.sgteCar(sCadena, ref iAm);
            }            //Fin de Linea
            else if (cCar == '\n')
            {
                bConcordancia = true;
                cCar          = objCAnalizadorLexico.sgteCar(sCadena, ref iAm);
            }            //Fin de Archivo
            else if (cCar == '\x0')
            {
                bConcordancia = false;
                sRes          = "EOF";
            }            //Simbolo no reconocido
            else
            {
                bConcordancia = true;
                cCar          = objCAnalizadorLexico.sgteCar(sCadena, ref iAm);
            }
            return(bConcordancia);
        }