簡體   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