Scala解析器组合器,除了最后一个

问题描述 投票:2回答:1

使用scala parser-combinators解析消耗除最后一个元素以外的所有元素的列表的正确方法是什么?例如,如果我想将“垃圾邮件,垃圾邮件,垃圾邮件和鸡蛋”解析为List(“ spam”,“ spam”,“ spam”,“ spam”)〜“ spam and eggs”。

如果我只使用“垃圾邮件”。+,那么在我匹配“垃圾邮件和鸡蛋”之前,所有垃圾邮件都已被消耗掉。自然地,我可以匹配“和鸡蛋”,但实际上我可能已经有一个我不想改变的复杂的“垃圾邮件和鸡蛋”解析器。

scala parser-combinators
1个回答
0
投票

这里是一个简单但效率低下的版本:

def allButOne[T](p: Parser[T]): Parser[List[T]] = (p <~ guard(p)).+
© www.soinside.com 2019 - 2024. All rights reserved.