scala parsing parser-combinators

Scala PackratParser ignora el analizador de fallas



parsing parser-combinators (1)

Parece que necesita usar err("Invalid rule") lugar de failure , ya que garantiza que no se realizará ninguna marcha atrás.

Tengo un analizador que fue escrito usando RegexParsers de Scala - link

Tuvo algunos problemas graves de rendimiento al analizar una gramática que tenía expresiones profundamente anidadas. Como tal, he creado una versión en la que mezclo en PackratParsers de Scala - link

La versión de Packrat no presenta el mismo problema de rendimiento y analiza correctamente la gramática. Sin embargo, cuando proporciono una gramática no válida para las pruebas, por ejemplo,

El analizador antiguo (que no es de packrat) solía informar correctamente la falla de la ''Regla inválida'', a través del combinador del analizador de fallas | failure("Invalid rule") | failure("Invalid rule") aquí - link

Cuando utilizo la versión packrat-parser, si habilito el rastreo, puedo ver en el rastreo que el error se creó tal como está en la versión no empaquetada; sin embargo, el PackratParser parece ignorarlo y siempre devuelve el failure: Base Failure .

¿Hay algo diferente sobre el manejo de fallas al usar PackratParsers que necesito entender?