2016-09-23 3 views
0

は、私はこのようなパーサを持っていると言うオプション解析:Scalaのパーサコンビネータ:

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を修正助けることができますか?ありがとう。

+2

ザッツない代わりに、 'オプション[(Cの有効な構文を...と言うことができると言いますオプション(c - > d) '、'オプション((c、d)) '、' Some(c - > d) 'など –

答えて

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