Parsing 如何在PetitPasser中消费但不捕获一些字符?
我定义了一条规则:Parsing 如何在PetitPasser中消费但不捕获一些字符?,parsing,dart,petitparser,Parsing,Dart,Petitparser,我定义了一条规则: def("invokation", char('@').word().plus().flatten()); 对于“@who”,它将匹配并获得结果@who 如何提问只需返回谁而不返回@?不确定您的问题是关于或的PetitPasser 在任何情况下,都需要将char('@')和word().plus().flant()连接到序列。然后选择列表结果列表的第二个元素,忽略第一个字符 在Java中,如下所示: def(“调用”,字符('@')) .seq(word().plus().
def("invokation", char('@').word().plus().flatten());
对于“@who”,它将匹配并获得结果@who
如何提问只需返回
谁
而不返回@
?不确定您的问题是关于或的PetitPasser
在任何情况下,都需要将char('@')
和word().plus().flant()
连接到序列。然后选择列表结果列表的第二个元素,忽略第一个字符
在Java中,如下所示:
def(“调用”,字符('@'))
.seq(word().plus().flatte())
.map(Functions.nthoff列表(1));
在Dart中,这是:
def(“调用”,char('@'))
.seq(word().plus().flatte())
.pick(1));
顺便说一句,我刚刚承诺对PetitParser for Java进行一项改进,这样您也可以在Java中使用
pick(int)
。我们可以添加一个api,比如“drop()”,这意味着一些匹配器应该使用输入,但会删除结果?因此代码可以是:def(“invokation”,char('@').drop().seq(word().plus().flant())
这当然是可行的,但IMHO会导致各种奇怪的情况。例如,在上面的seq(…)
中,单个单词仍然会被包装到一个列表中。一般来说,可组合性会受到很大影响。也就是说,没有什么可以阻止您引入其他新的组合运算符。