3.7. Símbolos balanceados (Un caso general)¶
El problema de paréntesis balanceados mostrado anteriormente es un caso específico de una situación más general que surge en muchos lenguajes de programación. El problema general de balancear y anidar diferentes tipos de símbolos de apertura y cierre ocurre con frecuencia. Por ejemplo, en Python, los corchetes, [
y ]
, se utilizan para las listas; las llaves, {
y }
, se utilizan para los diccionarios; y los paréntesis, (
y )
, se utilizan para las tuplas y las expresiones aritméticas. Es posible mezclar símbolos siempre y cuando cada uno mantenga su propia relación de apertura y cierre. Cadenas de símbolos como
{ { ( [ ] [ ] ) } ( ) }
[ [ { { ( ( ) ) } } ] ]
[ ] [ ] [ ] ( ) { }
están adecuadamente balanceados puesto que no sólo cada símbolo de apertura tiene un símbolo de cierre correspondiente, sino que los tipos de símbolos también coinciden.
Compare aquellos con las siguientes cadenas que no están balanceadas:
( [ ) ]
( ( ( ) ] ) )
[ { ( ) ]
El verificador de paréntesis simples de la sección anterior se puede ampliar fácilmente para manejar estos nuevos tipos de símbolos. Recuerde que cada símbolo de apertura simplemente se incluye en la pila para esperar que el símbolo de cierre coincidente aparezca más adelante en la secuencia. Cuando aparece un símbolo de cierre, la única diferencia es que debemos comprobar que coincide correctamente con el tipo del símbolo de apertura en el tope de la pila. Si los dos símbolos no coinciden, la cadena no está balanceada. Una vez más, si toda la cadena es procesada y no queda nada en la pila, la cadena está correctamente balanceada.
El programa en Python para implementar esto se muestra en el ActiveCode 1. El único cambio aparece en la línea 16 donde llamamos una función auxiliar, parejas
, para ayudar con la verificación de los símbolos. Cada símbolo que se extrae de la pila se debe comprobar para ver si coincide con el símbolo de cierre actual. Si no hay coincidencia, la variable booleana balancedos
se pone en False
.
Estos dos ejemplos muestran que las pilas son estructuras de datos muy importantes para el procesamiento de instrucciones de lenguajes en ciencias de la computación. Casi cualquier notación que usted se pueda imaginar tiene algún tipo de símbolo anidado que debe coincidir en un orden balanceado. Hay una serie de otros usos importantes para las pilas en ciencias de la computación. Seguiremos explorándolos en las próximas secciones.