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 年。
これらのエラーを修正するにはどうすればよいですか?