この単純な質問に対する答えが見つかりませんでした。検索に間違ったキーワードを使用した可能性があります。
AST を作成するには、Number、Add、Sub、Mul、Div などのノードが必要です。多くの数学演算は同じ構造を共有しているため、同じパターン マッチングのケースでそれらをすべて扱うにはどうすればよいでしょうか? たとえば、以下の行は構文的に正しくないと言われています。
object AST {
sealed abstract class Expr
case class MathOp(e1: Expr, e2: Expr) extends Expr
case class Number extends Expr
case class Add(e1: Expr, e2: Expr) extends MathOp(e1, e2)
case class Sub(e1: Expr, e2: Expr) extends MathOp(e1, e2)
}
意図は、次のことができるようにすることです。
expr match {
case MathOp(e1: Expr, e2: Expr) => //do something that would be done to Add, Sub, Mul, Div
case Number => //do another thing
}