Ho un parser che è stato scritto usando RegexParsers
di Scala - linkScala PackratParser ignora fallimento parser
aveva alcuni seri problemi di prestazioni durante l'analisi di una grammatica che aveva espressioni profondamente nidificate. Come tale ho creato una versione in cui mixo in Scala PackratParsers
- link
La versione di Packrat non presenta lo stesso problema di prestazioni e analizza correttamente la grammatica. Tuttavia, quando fornisco una grammatica non valida per il test, ad es. this
Il vecchio parser (non packrat) utilizzato per segnalare correttamente il fallimento 'regola non valido', tramite il fallimento parser combinatore | failure("Invalid rule")
qui - link
Quando si utilizza la versione packrat-parser, se abilito Tracing Riesco a vedere dalla traccia che l'errore è stato creato proprio come nella versione non packrat, tuttavia PackratParser sembra ignorarlo e restituire sempre failure: Base Failure
.
C'è qualcosa di diverso nella gestione degli errori quando si usano PackratParsers che devo capire?
Se uso 'err (" Regola invalida ")' invece di 'fallimento (" Regola invalida ")' allora perché il backtracking si è fermato, molte delle mie altre regole che erano in precedenza valide iniziano a restituire 'err (" Regola non valida ") 'che non è corretto. – adamretter