0

sbt runこのリスティング [3.5] で実行したときに受け取ったエラーは[1]次のとおりです。

import util.parsing.combinator.JavaTokenParsers

trait ArithParser extends JavaTokenParsers {
    type T
    def expr: Parser[T] = chainl1(term,   "+" ^^^ Add |  "-" ^^^ Sub)
    def term            = chainl1(factor, "*" ^^^ Mul |  "/" ^^^ Div)
    def factor          = floatingPointNumber  ^^ Num | "(" ~> expr <~ ")"

    def Add = (T,T)  => T
    def Sub = (T,T)  => T
    def Mul = (T,T)  => T
    def Div = (T,T)  => T
    def Num = String => T
}

trait DirectEvaluation {
    type T = Double
    val Add = (_: Double) + (_:Double)
    val Sub = (_: Double) - (_:Double)
    val Mul = (_: Double) * (_:Double)
    val Div = (_: Double) / (_:Double)
    val Num = (_: String).toDouble
}

trait ASTBuilding {
    type T = Expr
    sealed abstract class Expr

    case class Add(e1: Expr, e2: Expr) extends Expr
    case class Sub(e1: Expr, e2: Expr) extends Expr
    case class Mul(e1: Expr, e2: Expr) extends Expr
    case class Div(e1: Expr, e2: Expr) extends Expr
    case class Num(e: String) extends Expr
}

object Interpreter extends ArithParser with DirectEvaluation
object Compiler extends ArithParser with ASTBuilding

object Main extends ArithParser {
    def main(args: Array[String]) {
        val defArgs = if (args.isEmpty) Array("10.5 - 4*2") else args
        val parser: ArithParser = if(defArgs.head === "eval") {
                println("Interpreter!"); Interpreter
            } else {
                println("Compiler!"); Compiler
            }
        defArgs.tail foreach {arg =>
            println("Input: " + arg)
            println("Output: " + parseAll(parser.expr, arg))
        }
    }
}

[1] E. ラブン、「Scala でのコンビネーター解析」、工科大学中部、2012 年。

これらのエラーを修正するにはどうすればよいですか?

4

1 に答える 1