0

構文を使用する 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 にパーサー間を適用させることはできますか?

どんなアイデアも非常に高く評価されています。

4

2 に答える 2

0

私が尋ねた時点では、それを行う方法はなかったようです。ただし、後でgithub をフォークしてプルすると、次のreluctantBetween()ようになります。

迅速な対応について@abaillyに感謝します。

于 2014-01-05T20:31:27.753 に答える