我正在为使用语法的 DSL 编写解析器(nodeHead: nodeBody)
。问题是nodeBody
在某些情况下可能包含括号。JParsec的between
operator 应该是一个很好的解决方案,但是下面的代码失败了:
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
,所以我认为这里的问题是元组中的第二个解析器过于贪婪。或者,我可以让 JParsec 在应用正文之前应用解析器之间吗?
任何想法都非常受欢迎。