構文を使用する DSL のパーサーを作成しています(nodeHead: nodeBody)
。問題は、nodeBody
場合によっては括弧が含まれる可能性があることです。JParsecのbetween
オペレーターは適切な解決策であるはずですが、次のコードは失敗します。
public void testSample() {
Parser<Pair<String,String>> sut = Parsers.tuple(Scanners.IDENTIFIER.followedBy(Scanners.among(":")),
Scanners.ANY_CHAR.many().source()
).between(Scanners.among("("), Scanners.among(")"));
sut.parse("(hello:world)");
}
ANY_CHAR
に変更しても失敗しないのでIDENTIFIER
、ここでの問題は、タプルの 2 番目のパーサーが貪欲すぎることだと思います。あるいは、本体を適用する前に JParsec にパーサー間を適用させることはできますか?
どんなアイデアも非常に高く評価されています。