Parser组合器验证多个输入

时间:2013-07-04 13:00:16

标签: scala parser-combinators

假设我在StandardTokenParser中有一个片段:

lazy val validWords = Set("param value","param2 value2")

lazy val paramNameCollectionToken = paramNameToken ~ rep(paramNameToken) ^^ {
     case head ~ rest => (head :: rest).mkString(" ")
}

如果head :: rest的结果包含在validWords Set中,我怎样才能生成列表?

1 个答案:

答案 0 :(得分:1)

执行此操作的一种简单方法是使用filter

val validToken: Parser[String] = paramNameCollection.filter(validWords)

如果过滤谓词失败,则解析器失败消息将是通用的,例如“输入与过滤器匹配:...”

source of filter应该包含一些有关如何自定义此消息的线索。