Scala 的解析器组合器:解析一个选项

Scala's parser combinator: parse an option

假设我有这样的解析器:

trait PT {}

trait StatementPT extends PT{}

...

class LoopConditionPT(val operation: String, val variable: IdentPT, val condition: Option[(String,ExpressionPT)]) extends StatementPT { ... }

Option[(String,ExpressionPT)]) 烦了我一天,我的意思是我可以对付Option[T],但是Option[(T,T)]?我写了这个 def loopCondition 但它总是引发错误:

def loopCondition: Parser[LoopConditionPT] = "some string" ~ var ~ opt(("TIL"|"WILE") ~ expression) ^^ {
  case a ~ b ~ Some(c ~ d) => new LoopCondition(a, b, Option[(c, d)])
  case a ~ b ~ None => new LoopCondition(a, b, Option[("None", -1)])

有人可以帮我修复 loopCondition 吗?谢谢。

[] 用于表示类型。当你想创建一个 Option - 即调用 Option.apply() - 使用括号而不是方括号。所以而不是

new LoopCondition(a, b, Option[(c, d)])

new LoopCondition(a, b, Option((c, d)))

或者你可以对元组使用句法糖,然后说

new LoopCondition(a, b, Option(c -> d))