Exemple #1
0
 // --------------------------------------------------------------
 static string ProcesarToken(string token, CPila pila, string expresionPosFijo)
 {
     // ----- Si token = ")" desapilar todos los operadores hasta encontrar "("
     if (token.Equals(")"))
     {
         while ((!pila.EsVacia()) && (!((string)pila.Cima()).Equals("(")))
         {
             expresionPosFijo = expresionPosFijo + (string)pila.Cima();
             // ---- Desapilar operador
             pila.Desapilar();
         }
         // ---- Quitar de la pila el ")"
         if (!pila.EsVacia())
         {
             pila.Desapilar();
         }
     }
     else
     if (token.Equals("+") || token.Equals("-") ||
         token.Equals("*") || token.Equals("/") ||
         token.Equals("^"))
     {
         // ---- Desapilar operadores, si existen de acuerdo a us precedencia
         while ((!pila.EsVacia()) && OkProcedencia(token, (string)pila.Cima()))
         {
             // ---- Agregar operador a la expresion PosFijo
             expresionPosFijo = expresionPosFijo + (string)pila.Cima();
             // ---- Desapilar operador
             pila.Desapilar();
         }
         // ---- Apilar nuevo operador
         pila.Apilar(token);
     }
     else
     // ---- Si es "(" apilar
     if (token.Equals("("))
     {
         pila.Apilar(token);
     }
     else
     // ---- Si no es " " agregar token a expreseionPosFijo, caso
     //      contrario ignorar token.
     if (!token.Equals(" "))
     {
         expresionPosFijo = expresionPosFijo + " " + token;
     }
     // ---- Retornar valor de expresión posFijo
     return(expresionPosFijo);
 }
Exemple #2
0
        // --------------------------------------------------------------
        public string Convertir()
        {
            // ---- Declarar objetos
            CPila           pila = new CPila();
            StringTokenizer st   = new StringTokenizer(Expresion, "+-*/^() ", true);
            string          token;
            string          expresionPosFijo = "";

            // ---- Convertir expresión, descomponiendo en tokens
            if (st.countTokens() > 0)
            {
                do
                {
                    token            = st.nextToken();
                    expresionPosFijo = ProcesarToken(token, pila, expresionPosFijo);
                } while (st.hasMoreTokens());
            }
            // ----- Desapilar todos los operadores que quedan en la pila
            while (!pila.EsVacia())
            {
                // ----- Agregar operador a la expresión PosFijo
                expresionPosFijo = expresionPosFijo + (string)pila.Cima();
                // ----- Desapilar operador
                pila.Desapilar();
            }
            return(expresionPosFijo);
        }