Antes de leer el resto de esta respuesta, lea Ir a la declaración considerada dañina . Si no quiere leerlo en su totalidad, aquí está lo que considero el punto clave:
El uso desenfrenado de la declaración go to tiene una consecuencia inmediata de que resulta terriblemente difícil encontrar un conjunto significativo de coordenadas en las que describir el progreso del proceso.
O para reformular, el problema con gotoes que el programa puede llegar en medio de un bloque de código, sin que el programador comprenda el estado del programa en ese punto. Las construcciones estándar orientadas a bloques están diseñadas para delinear claramente las transiciones de estado, un etiquetado breakestá destinado a llevar el programa a un estado conocido específico (fuera del bloque etiquetado que lo contiene).
En un programa imperativo del mundo real, el estado no está claramente delimitado por límites de bloque, por lo que es cuestionable si la etiqueta breakes una buena idea. Si el bloque cambia de estado que es visible desde fuera del bloque, y hay varios puntos para salir del bloque, entonces una etiqueta breakes equivalente a la primitiva goto. La única diferencia es que, en lugar de la posibilidad de aterrizar en medio de un bloque con un estado indeterminado, comienzas un nuevo bloque con un estado indeterminado.
Entonces, en general, consideraría una etiqueta breakcomo peligrosa. En mi opinión, es una señal de que el bloque debe convertirse en una función, con acceso limitado al alcance adjunto.
Sin embargo, este código de ejemplo fue claramente el producto de un generador de analizador (el OP comentó que era el código fuente de Xerces). Y los generadores de analizadores sintácticos (o generadores de código en general) a menudo se toman libertades con el código que generan, porque tienen un conocimiento perfecto del estado y los humanos no necesitan entenderlo.
label913definido?