データ構造を生成し、述語を実行してその一貫性を検証するパーサーを作成したいと考えています。述語が返される場合false
、パーサーはカスタムError
オブジェクトを返す必要があります (Failure
これは によって実現できるため、 ではなく^?
)。
それを実現できるパーサーの演算子を探しています。たとえば、整数のリストを解析し、それらが異なることを確認したいとしましょう。私はこのようなものが欲しいです:
import util.parsing.combinator.RegexParsers
object MyParser extends RegexParsers {
val number: Parser[Int] = """\d+""".r ^^ {_.toInt }
val list = repsep(number, ",") ^!(checkDistinct, "numbers have to be unique")
def checkDistinct(numbers: List[Int]) = (numbers.length == numbers.distinct.length)
}
上記^!
のコードは、私が探しているものです。パーサー出力を検証し、検証されない場合に有用なエラー メッセージを返すにはどうすればよいですか?