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))
假设我有这样的解析器:
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))