// -------------------------------------------------------------- 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); }
// -------------------------------------------------------------- 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); }