1

Scalaで、具体的な型階層を徐々に構築するパーサーを作成しようとしています。私は始めました:

private def word   = regex(new Regex("[a-zA-Z][a-zA-Z0-9-]*")) 
private def quicktoken: Parser[Quicktoken] = "/" ~> word <~ "/" <~ (space?) ^^ { new Quicktoken(_) } 

大丈夫です。/hello/はクイックトークンに解析されます

次に、クイックトークンを複合式に追加します。クラスがあります

class MatchTokenPart(word:String,quicktoken:RewriteWord){
}

書けると思っていたのに…

private def matchTokenPartContent: Parser[MatchTokenPart] = word<~equals~quicktoken ^^ { case word~quicktoken => new MatchTokenPart(word, quicktoken)}

しかし、それは機能しません。単語はOption[String]型で、quicktokenはString型であると書かれています。私は何が欠けていますか?

4

1 に答える 1

2

もう1つの優先順位の問題:ではなく、a <~ b ~ cとして解釈されます。これは、で始まる中置演算子の優先順位が、で始まる演算子よりも低いためです(言語仕様の6.12.3のリストを参照してください)。a <~ (b ~ c)(a <~ b) ~ c<~

(word <~ equals) ~ quicktoken必要なので、括弧を指定する必要があります。

于 2012-07-27T17:16:30.983 に答える