scala解析器^^^后跟一个函数

时间:2016-07-13 09:53:02

标签: scala parsing abstract-syntax-tree

我遇到了解析字符串的代码,如5 * 5 + 5

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

根据文档,^^^表示"如果左操作数成功解析,则忽略结果并使用右边的值"。那么为什么这段代码有效呢? ^^^右边的值是一个函数,而不是Expr值。

1 个答案:

答案 0 :(得分:1)

我被IDEA误导了。 " *"就在mult_expr之后没有     def * = rep(this) 但     def * [U>:T](sep:=> Parser [(U,U)=> U])= chainl1(this,sep)

确实" +" ^^^ {(a:Expr,b:Expr)=> Plus(a,b)}生成一个解析器,其类型为Parser [(Expr,Expr)=> EXPR。然后在foldLeft中使用此解析器生成Expr值