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(…)
中,单个单词仍然会被包装到一个列表中。一般来说,可组合性会受到很大影响。也就是说,没有什么可以阻止您引入其他新的组合运算符。