2016-07-13 3 views
0

が続くが、私は5 * 5 + 5Scalaのパーサ^^^機能

def add_expr: Parser[Expr] = 
    mult_expr * (
     "+" ^^^ { (a: Expr, b: Expr) => Plus(a, b) } | 
     "-" ^^^ { (a: Expr, b: Expr) => Minus(a, b) }) 

文書によるような文字列をパースのこの部分のコードに出くわした、^^^」と言い、結果を無視して右側の値を使用してください。では、なぜこのコードが機能するのですか? ^^^の右側の値は関数であり、Exprの値ではありません。

答えて

1

私はIDEAによって誤解されました。 (U、U)=> U))= chainl1(これは、mult_exprの直後の "*"は ではありません)def * = rep(this) しかし def * [U>:T] =(Expr、b:Expr)=> Plus(a、b)}は、型がParser [(Expr、Expr)=> Expr]のパーサを生成します。次に、このパーサーはfoldLeftでExpr値を生成するために使用されます

関連する問題