Scala Parser Combinators を使用して、定義された言語のパーサーを実装したいと考えています。ただし、言語をコンパイルするソフトウェアは言語のすべての機能を実装しているわけではないため、これらの機能を使用する場合は失敗したいと考えています。以下の小さな例を偽造しようとしました:
object TestFail extends JavaTokenParsers {
def test: Parser[String] =
"hello" ~ "world" ^^ { case _ => ??? } |
"hello" ~ ident ^^ { case "hello" ~ id => s"hi, $id" }
}
つまり、パーサーは "hello" + 何らかの識別子で成功しますが、識別子が "world" の場合は失敗します。Parsers クラスに fail() および err() パーサーが存在することがわかりますが、それらは String ではなく Parser[Nothing] を返すため、それらの使用方法がわかりません。ドキュメントはこのユースケースをカバーしていないようです…</p>