この問題は非常に奇妙です。 |
を呼び出して両側が失敗した場合、最後に失敗した側最後が選択され、左側の方が優先されます。
giverRole
で直接解析しようとすると、期待通りの結果が得られます。しかし、失敗の前にマッチを成功させると、それはあなたが見ている結果を生み出します。
理由はやや微妙です - 私はすべてのパーサーに log
ステートメントを振りかけることでそれを見つけました。これを理解するには、 RegexParser
スキップスペースをどのように行うのかを理解する必要があります。具体的には、スペースは accept
でスキップされます。 failure
は accept
を呼び出さないので、スペースをスキップしません。
kwIs
の失敗は、スキップされたスペースとして b
で発生しますが、
failure
> の場合。ここに:
If bla blablaa
^ kwIs fails here
^ failure fails here
したがって、 kwIs
のエラーメッセージは、私が言及したルールによって優先されます。
この問題を回避するには、パーサーが何も照合せずにスペースをスキップさせるようにします。このパターンが常に一致することが重要です。そうしないと、さらに紛らわしいエラーメッセージが表示されます。私がうまくいくと思う提案があります:
"\\b|$".r ~ failure("is expected")
別の解決策は、暗黙のregex acceptを使用する代わりに acceptIf
または
acceptMatch
を使用することです。