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?