Este código en C# evalúa la corrección del embebimiento de expresiones mediante el uso de una pila. Al analizar la expresión caracter por caracter, los símbolos de apertura son agregados a la pila mientras que los de cierre son comparados con el elemento superior de la pila. Si coinciden, la pila es desapilada; de lo contrario, la expresión es inválida. Al final, la pila debe quedar vacía para que la expresión sea válida.
Este código en C# evalúa la corrección del embebimiento de expresiones mediante el uso de una pila. Al analizar la expresión caracter por caracter, los símbolos de apertura son agregados a la pila mientras que los de cierre son comparados con el elemento superior de la pila. Si coinciden, la pila es desapilada; de lo contrario, la expresión es inválida. Al final, la pila debe quedar vacía para que la expresión sea válida.
Este código en C# evalúa la corrección del embebimiento de expresiones mediante el uso de una pila. Al analizar la expresión caracter por caracter, los símbolos de apertura son agregados a la pila mientras que los de cierre son comparados con el elemento superior de la pila. Si coinciden, la pila es desapilada; de lo contrario, la expresión es inválida. Al final, la pila debe quedar vacía para que la expresión sea válida.
Fernando Campos Camacho Universidad de Occidente, Agosto 2014
Cdigo en C-Sharp para Evaluar el correcto embebimiento de expresiones
------------------------------------------------------------------------------------------------------------------------- private void btnevaluar_Click(object sender, System.EventArgs e) { int valid=1; int i=0,stacktop=0; // i para contar los caracteres de la expresin // stacktop empieza en cero por que la pila esta vaca int limiteexpresion=expresion.Text.Length-1; // para no leer ms del lmite char symb,symb_apertura=' ',x; string[] pila; // Declaracin del array (pila) pila = new string[50]; // Instanciacin del array while (i<=limiteexpresion && valid==1) { symb=expresion.Text[i]; if (symb=='[' || symb=='{' || symb=='(') { stacktop++; pila[stacktop]=symb.ToString(); } if (symb==']' || symb=='}' || symb==')') { if (stacktop==0) valid=0; else { x=char.Parse(pila[stacktop]); stacktop--; switch (symb) { case ']':symb_apertura='[';break; case '}':symb_apertura='{';break; case ')':symb_apertura='(';break; } if (x!=symb_apertura) valid=0; } } i++; } if (stacktop!=0) valid=0; if (valid==1) MessageBox.Show("Cadena Vlida"); else MessageBox.Show("Cadena No Vlida"); } }