Beispiel #1
0
        public EvaluadorExpresion(string expresion)
        {
            _expresion = expresion;

            if (expresion.StartsWith("IF"))
            {
                tieneIF = true;
                ParserIf parser = new ParserIf();
                arboles = parser.GetArbolesExpresion(expresion);
            }
            else
            {
                tieneIF = false;
                ParserExpresion parser = new ParserExpresion();
                ArbolExpresion  a      = parser.GetArbolExpresion(expresion);
                arboles = new List <ArbolExpresion>()
                {
                    a
                };
            }
        }
Beispiel #2
0
        public List <ArbolExpresion> GetArbolesExpresion(string expresion)
        {
            List <ArbolExpresion> resultado = new List <ArbolExpresion>();
            int    idxInicioIf = expresion.IndexOf("[") + 1;
            int    idxFinIf    = expresion.IndexOf("]") - 1;
            string condicion   = expresion.Substring(idxInicioIf, idxFinIf - idxInicioIf + 1);
            int    idxInicioA  = expresion.IndexOf("{");
            int    idxFinA     = expresion.IndexOf("}");
            string expresionA  = expresion.Substring(idxInicioA + 1, idxFinA - idxInicioA - 1);

            int             idxInicioB     = expresion.LastIndexOf("{");
            int             idxFinB        = expresion.LastIndexOf("}");
            string          expresionB     = expresion.Substring(idxInicioB + 1, idxFinB - idxInicioB - 1);
            ParserExpresion parserExp      = new ParserExpresion();
            ArbolExpresion  arbolCondicion = parserExp.GetArbolExpresion(condicion);
            ArbolExpresion  arbolA         = parserExp.GetArbolExpresion(expresionA);
            ArbolExpresion  arbolB         = parserExp.GetArbolExpresion(expresionB);

            resultado.Add(arbolCondicion);
            resultado.Add(arbolA);
            resultado.Add(arbolB);
            return(resultado);
        }
Beispiel #3
0
        public ArbolExpresion GetArbolExpresion(string expresion)
        {
            ArbolExpresion resultado = new ArbolExpresion();
            Stack <NodoArbol <TokenExpresion> > pilaVariables = new Stack <NodoArbol <TokenExpresion> >();
            Stack <TokenExpresion> pilaOperadores             = new Stack <TokenExpresion>();
            Scanner s = new Scanner();
            List <TokenExpresion> tokens = s.GetTokens(expresion);

            foreach (TokenExpresion t in tokens)
            {
                if (t.EsSimboloAgrupacionApertura())
                {
                    pilaOperadores.Push(t);
                }
                else if (t.EsSimboloAgrupacionCierre())
                {
                    bool continuar = true;
                    while (continuar)
                    {
                        TokenExpresion t1 = pilaOperadores.Pop();
                        if (t1.EsSimboloAgrupacionApertura())
                        {
                            continuar = false;
                        }
                        else
                        {
                            NodoArbol <TokenExpresion> n = new NodoArbol <TokenExpresion>();
                            n.Valor = t1;
                            n.Der   = pilaVariables.Pop();
                            n.Izq   = pilaVariables.Pop();
                            pilaVariables.Push(n);
                        }
                    }
                }
                else if (t.EsOperador())
                {
                    bool continuar = true;
                    while (continuar)
                    {
                        if (pilaOperadores.Count == 0)
                        {
                            break;
                        }

                        TokenExpresion t1 = pilaOperadores.Peek();
                        if (t1.EsSimboloAgrupacionApertura())
                        {
                            continuar = false;
                        }
                        else if (t1.GetPrecedencia() > t.GetPrecedencia())
                        {
                            t1 = pilaOperadores.Pop();
                            NodoArbol <TokenExpresion> n1 = new NodoArbol <TokenExpresion>();
                            n1.Valor = t1;
                            n1.Der   = pilaVariables.Pop();
                            n1.Izq   = pilaVariables.Pop();
                            pilaVariables.Push(n1);
                        }
                        else
                        {
                            continuar = false;
                        }
                    }
                    pilaOperadores.Push(t);
                }
                else
                {
                    NodoArbol <TokenExpresion> n = new NodoArbol <TokenExpresion>();
                    n.Valor = t;
                    pilaVariables.Push(n);
                }
            }

            while (pilaOperadores.Count > 0)
            {
                TokenExpresion             operador = pilaOperadores.Pop();
                NodoArbol <TokenExpresion> n        = new NodoArbol <TokenExpresion>();
                n.Valor = operador;
                n.Der   = pilaVariables.Pop();
                n.Izq   = pilaVariables.Pop();
                pilaVariables.Push(n);
            }

            if (pilaVariables.Count > 0)
            {
                resultado.Raiz = pilaVariables.Pop();
            }
            return(resultado);
        }