示例#1
0
        public void generarXMLFail(ArrayList cadena, ExpresionRegular exp, string arch)
        {
            XmlDocument doc   = new XmlDocument();
            XmlElement  lista = doc.CreateElement("ListaTokens");

            doc.AppendChild(lista);
            XmlElement token;
            XmlElement valor;
            XmlElement fila;
            XmlElement columna;

            foreach (CadenaAValidar c in cadena)
            {
                if (c.getId().Equals(exp.getId()))
                {
                    foreach (Token t in c.errores)
                    {
                        token = doc.CreateElement("Token");
                        lista.AppendChild(token);
                        valor = doc.CreateElement("Valor");
                        valor.AppendChild(doc.CreateTextNode(t.getLexema()));
                        token.AppendChild(valor);
                        fila = doc.CreateElement("Fila");
                        fila.AppendChild(doc.CreateTextNode(t.getLinea().ToString()));
                        token.AppendChild(fila);
                        columna = doc.CreateElement("Columna");
                        columna.AppendChild(doc.CreateTextNode(t.getColumna().ToString()));
                        token.AppendChild(columna);
                    }
                }
            }
            doc.Save("C:\\Users\\Oliveira Raymundo\\Desktop\\ArchivosOLC1PY1\\XML\\" + arch + ".xml");
        }
示例#2
0
        public void EliminarEspacioTodoLugar()
        {
            var texto           = "   2  0  0   ";
            var textoModificado = ExpresionRegular.EliminarEspacio(texto);

            Assert.AreEqual("200", textoModificado);
        }
示例#3
0
        public void EliminarComodinTodoLugar()
        {
            var texto           = "**2**0**0**";
            var textoModificado = ExpresionRegular.EliminarComodin(texto);

            Assert.AreEqual("200", textoModificado);
        }
示例#4
0
        public void EliminarComodinInicio()
        {
            var texto           = "*200";
            var textoModificado = ExpresionRegular.EliminarComodin(texto);

            Assert.AreEqual("200", textoModificado);
        }
示例#5
0
        public void ValidaExpresionLogica_Correcta_ProposisionCompuesta_MenorIgual_OR_MayorIgual()
        {
            var cadena    = "<=20||>=40";
            var resultado = ExpresionRegular.ValidarExpresionLogica(cadena);

            Assert.IsTrue(resultado.Success);
        }
示例#6
0
        public void ValidaExpresionLogica_Test()
        {
            var cadena    = "<=20||>=40";
            var resultado = ExpresionRegular.ValidarExpresionLogica(cadena);

            Assert.IsTrue(resultado.Success);
        }
示例#7
0
        public void ValidaExpresionLogica_Correcta_ProposisionCompuesta_Menor_AND_Mayor()
        {
            var cadena    = "<20&&>40";
            var resultado = ExpresionRegular.ValidarExpresionLogica(cadena);

            Assert.IsTrue(resultado.Success);
        }
示例#8
0
        public void ValidaExpresionLogica_Correcta_ProposisionSimple_Diferente()
        {
            var cadena    = "!=20";
            var resultado = ExpresionRegular.ValidarExpresionLogica(cadena);

            Assert.IsTrue(resultado.Success);
        }
示例#9
0
文件: Form1.cs 项目: XiomRB/OLC1_PY1
 private void guardarErroresToolStripMenuItem_Click(object sender, EventArgs e)
 {
     for (int i = 0; i < ejecutar.expresiones.Count; i++)
     {
         ExpresionRegular exp = (ExpresionRegular)ejecutar.expresiones[i];
         archivo.generarXMLFail(ejecutar.cadenas, exp, "Errores" + exp.getId());
     }
 }
示例#10
0
文件: Form1.cs 项目: XiomRB/OLC1_PY1
        private void cargarAFDsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ExpresionRegular expresion = (ExpresionRegular)ejecutar.expresiones[0];
            Image            afd       = Image.FromFile("C:\\Users\\Oliveira Raymundo\\Desktop\\ArchivosOLC1PY1\\AFDs\\" + expresion.getId() + ".png");
            Image            trans     = Image.FromFile("C:\\Users\\Oliveira Raymundo\\Desktop\\ArchivosOLC1PY1\\Transiciones\\" + expresion.getId() + ".png");

            boxafn.Image      = afd;
            boxtrans.Image    = trans;
            boxafn.SizeMode   = PictureBoxSizeMode.StretchImage;
            boxtrans.SizeMode = PictureBoxSizeMode.StretchImage;
            nombrepic.Text    = expresion.getId();
            indice            = 0;
        }
示例#11
0
        internal ExpresionLogica(string cadena)
        {
            Proposiciones = new List <FiltroExpresion>();
            cadena        = ExpresionRegular.EliminarEspacio(cadena);
            var match = ExpresionRegular.ValidarExpresionLogica(cadena);

            EsExpresionLogica = match.Success;

            if (EsExpresionLogica)
            {
                var evaluador = new EvaluadorPreposicion(match);
                (Proposiciones, OperadorLogico) = evaluador.ValidarCadena();
            }
        }
示例#12
0
文件: Form1.cs 项目: XiomRB/OLC1_PY1
        private void picsig_Click(object sender, EventArgs e)
        {
            indice++;
            if (indice >= ejecutar.expresiones.Count)
            {
                indice = 0;
            }
            ExpresionRegular exp   = (ExpresionRegular)ejecutar.expresiones[indice];
            Image            afn   = Image.FromFile("C:\\Users\\Oliveira Raymundo\\Desktop\\ArchivosOLC1PY1\\AFDs\\" + exp.getId() + ".png");
            Image            trans = Image.FromFile("C:\\Users\\Oliveira Raymundo\\Desktop\\ArchivosOLC1PY1\\Transiciones\\" + exp.getId() + ".png");

            boxafn.Image      = afn;
            boxtrans.Image    = trans;
            boxafn.SizeMode   = PictureBoxSizeMode.StretchImage;
            boxtrans.SizeMode = PictureBoxSizeMode.StretchImage;
            nombrepic.Text    = exp.getId();
        }
        //------------------Privados que se usan para genera AUTÓMATA----------------------------
        private void GenerarExpresionRegular()
        {
            var especiales = new List <string>();

            especiales.Add("~");
            especiales.Add("¬");
            especiales.Add("^");
            especiales.Add("¨");

            foreach (var Token in ManejadorArchivo.Tokens)
            {
                var token = "";

                if (Token.Key != "TOKENS")
                {
                    foreach (var item in Token.Value)
                    {
                        if (token.Length - 1 >= 0)
                        {
                            if (token[token.Length - 1] != '(' && token[token.Length - 1] != ')' && token[token.Length - 1] != '|' &&
                                item != "\')" && item != "\'|" && item != "\')*")
                            {
                                token += ".";
                            }
                        }


                        if (item.Contains("*"))
                        {
                            var aux = item.Substring(0, item.Length - 1);



                            if (ManejadorArchivo.Sets.ContainsKey(aux))
                            {
                                if (!DiccionarioSustitucion.ContainsValue(aux))
                                {
                                    DiccionarioSustitucion.Add(especiales[0], aux);
                                    especiales.RemoveAt(0);

                                    foreach (var item2 in DiccionarioSustitucion)
                                    {
                                        if (item2.Value == aux)
                                        {
                                            token += item2.Key + "*";
                                        }
                                    }
                                }
                                else
                                {
                                    foreach (var item2 in DiccionarioSustitucion)
                                    {
                                        if (item2.Value == aux)
                                        {
                                            token += item2.Key + "*";
                                        }
                                    }
                                }
                            }
                            else
                            {
                                if (item.Contains('\'')) //si tiene comilla simple no se le agrega concateniacion,
                                {
                                    token += item.Trim('\'');
                                }
                                else
                                {
                                    token += item;
                                }
                            }
                        }
                        else if (ManejadorArchivo.Sets.ContainsKey(item))
                        {
                            if (!DiccionarioSustitucion.ContainsValue(item))
                            {
                                DiccionarioSustitucion.Add(especiales[0], item);
                                especiales.RemoveAt(0);

                                foreach (var item2 in DiccionarioSustitucion)
                                {
                                    if (item2.Value == item)
                                    {
                                        token += item2.Key;
                                    }
                                }
                            }
                            else
                            {
                                foreach (var item2 in DiccionarioSustitucion)
                                {
                                    if (item2.Value == item)
                                    {
                                        token += item2.Key;
                                    }
                                }
                            }
                        }
                        else if (item.Contains('\'')) //si tiene comilla simple no se le agrega concateniacion,
                        {
                            token += item.Trim('\'');
                        }
                        else
                        {
                            token += item;
                        }
                    }

                    ExpresionRegular += token + "|";
                }
            }

            ExpresionRegular = ExpresionRegular.TrimEnd('|');
        }
示例#14
0
        private static ExprContrato GeneraPredicadoContrato(ReglaEntradaContrato regla, out List <MensajeConfiguracionRegla> listaMensajes)
        {
            listaMensajes = new List <MensajeConfiguracionRegla>();

            ExprContrato predicado = ConstructorPredicado.True <Contrato>();

            if (regla.IsNull())
            {
                return(predicado);
            }

            if (regla.Region.IsNotNullOrEmpty())
            {
                ExprContrato criterio = contrato => regla.Region.Contains(contrato.Region, StringComparison.InvariantCultureIgnoreCase);
                predicado = predicado.And(criterio);
            }

            if (regla.Producto.IsNotNullOrEmpty())
            {
                ExprContrato criterio = contrato => regla.Producto.Contains(contrato.Producto, StringComparison.InvariantCultureIgnoreCase);
                predicado = predicado.And(criterio);
            }

            if (regla.CodigoEstado.IsNotNullOrEmpty())
            {
                ExprContrato criterio = contrato => regla.CodigoEstado.Contains(contrato.CodigoEstado);
                predicado = predicado.And(criterio);
            }

            if (regla.CodigoPlan.IsNotNullOrEmpty())
            {
                var nombrePropiedad = "CodigoPlan";

                var filtros = new List <FiltroExpresion>();

                foreach (var codigo in regla.CodigoPlan)
                {
                    var valor = ExpresionRegular.EliminarComodin(codigo);
                    if (valor.IsNullOrEmpty())
                    {
                        continue;
                    }

                    var filtro = new FiltroExpresion
                    {
                        NombrePropiedad = nombrePropiedad,
                        Valor           = valor
                    };
                    if (codigo.StartsWith("*") && codigo.EndsWith("*"))
                    {
                        filtro.Operador = Operador.Contiene;
                    }
                    else if (codigo.StartsWith("*"))
                    {
                        filtro.Operador = Operador.TerminaCon;
                    }
                    else if (codigo.EndsWith("*"))
                    {
                        filtro.Operador = Operador.IniciaCon;
                    }
                    else if (codigo.Trim().IsNotNullOrEmpty())
                    {
                        filtro.Operador = Operador.IgualQue;
                    }
                    filtros.Add(filtro);
                }

                ExprContrato exprOr = ConstruirArbolExpresionOr <Contrato>(filtros);
                if (exprOr.IsNull())
                {
                    listaMensajes.Add(CrearMensajeConfiguracionRegla.ObtenerMensajeErrorParametro(nombrePropiedad));
                    return(null);
                }
                predicado = predicado.And(exprOr);
            }

            if (regla.Version.IsNotNullOrEmpty())
            {
                ExprContrato criterio = contrato => regla.Version.Contains(contrato.Version);
                predicado = predicado.And(criterio);
            }

            if (regla.CoberturaMaxima.IsNotNullOrEmpty())
            {
                var nombrePropiedad = "CoberturaMaxima";
                var expresionLogica = new ExpresionLogica(regla.CoberturaMaxima);
                if (!expresionLogica.EsExpresionLogica)
                {
                    listaMensajes.Add(CrearMensajeConfiguracionRegla.ObtenerMensajeErrorExpresionLogica(nombrePropiedad, regla.CoberturaMaxima));
                    return(null);
                }

                expresionLogica.Proposiciones.Select(x => { x.NombrePropiedad = nombrePropiedad; return(x); }).ToList();

                ExprContrato exprAnd = ConstruirArbolExpresionAnd <Contrato>(expresionLogica.Proposiciones);
                if (exprAnd.IsNull())
                {
                    listaMensajes.Add(CrearMensajeConfiguracionRegla.ObtenerMensajeErrorParametro(nombrePropiedad));
                    return(null);
                }
                predicado = predicado.And(exprAnd);
            }

            if (regla.Nivel.IsNotNullOrEmpty())
            {
                ExprContrato criterio = contrato => regla.Nivel.Contains(contrato.Nivel);
                predicado = predicado.And(criterio);
            }

            if (regla.DeducibleTotal.IsNotNullOrEmpty())
            {
                var nombrePropiedad = "DeducibleTotal";
                var expresionLogica = new ExpresionLogica(regla.DeducibleTotal);
                if (!expresionLogica.EsExpresionLogica)
                {
                    listaMensajes.Add(CrearMensajeConfiguracionRegla.ObtenerMensajeErrorExpresionLogica(nombrePropiedad, regla.DeducibleTotal));
                    return(null);
                }

                expresionLogica.Proposiciones.Select(x => { x.NombrePropiedad = nombrePropiedad; return(x); }).ToList();

                ExprContrato exprAnd = ConstruirArbolExpresionAnd <Contrato>(expresionLogica.Proposiciones);
                if (exprAnd.IsNull())
                {
                    listaMensajes.Add(CrearMensajeConfiguracionRegla.ObtenerMensajeErrorParametro(nombrePropiedad));
                    return(null);
                }
                predicado = predicado.And(exprAnd);
            }

            if (regla.TieneImpedimento.IsNotNull())
            {
                ExprContrato criterio = contrato => contrato.TieneImpedimento == regla.TieneImpedimento;
                predicado = predicado.And(criterio);
            }

            if (regla.EsMoroso.IsNotNull())
            {
                ExprContrato criterio = contrato => contrato.EsMoroso == regla.EsMoroso;
                predicado = predicado.And(criterio);
            }

            if (regla.NumeroEmpresa.IsNotNullOrEmpty())
            {
                ExprContrato criterio = contrato => regla.NumeroEmpresa.Contains(contrato.NumeroEmpresa);
                predicado = predicado.And(criterio);
            }

            if (regla.CodigoSucursal.IsNotNullOrEmpty())
            {
                ExprContrato criterio = contrato => regla.CodigoSucursal.Contains(contrato.CodigoSucursal);
                predicado = predicado.And(criterio);
            }

            if (regla.NumeroLista.IsNotNullOrEmpty())
            {
                ExprContrato criterio = contrato => regla.NumeroLista.Contains(contrato.NumeroLista);
                predicado = predicado.And(criterio);
            }

            if (regla.EsDeducibleAnual.IsNotNull())
            {
                ExprContrato criterio = contrato => contrato.EsDeducibleAnual == regla.EsDeducibleAnual;
                predicado = predicado.And(criterio);
            }

            if (regla.EsVigente.IsNotNull())
            {
                if (regla.EsVigente.Value)
                {
                    ExprContrato criterio = contrato => contrato.FechaVigencia > DateTime.Now.Date;
                    predicado = predicado.And(criterio);
                }
                else
                {
                    ExprContrato criterio = contrato => contrato.FechaVigencia <= DateTime.Now.Date;
                    predicado = predicado.And(criterio);
                }
            }

            return(predicado);
        }