繁体   English   中英

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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM