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

时间:2016-09-23 09:58:58

标签: scala parsing parser-combinators

说我有这样的解析器:

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吗?感谢。

1 个答案:

答案 0 :(得分:0)

Option用于表示类型。如果要创建Option.apply() - 即调用new LoopCondition(a, b, Option[(c, d)]) - 请使用括号而不是方括号。而不是

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

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

或者你可以使用语法糖来表示元组并说

git checkout master
git reset --hard HEAD~
git merge Xcode7