Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- absctract class Expression
- case class VarExpr(varName:String) extends Expression
- case class IntExpr(value:Int) extends Expression
- case class PlusExpr(e1:Expression, e2:Expression) extends Expression
- case class MultExpr(e1:Expression, e2:Expression) extends Expression
- object Expr {
- def main(args:Array[String]):Unit = {
- val myExpr = PlusExpr(IntExpr(7), PlusExpr(IntExpr(2), MultExpr(VarExpr("x"), IntExpr(3))))
- println(asString(myExpr))
- println(eval(myExpr))
- }
- def eval(e:Expression):Int = e match{
- case v:VarExpr => 15 // jede variable = 15 (statischer wert atm)
- case i:IntExpr => i.value
- case p:PlusExpr => eval(p.e1) + eval(p.e2)
- case p:MultExpr => eval(p.e1) * eval(p.e2)
- }
- def asString(e:Expression):String = e match{
- case v:VarExpr => v.varName
- case i:IntExpr => i.value
- case p:PlusExpr => "( " + asString(p.e1) + " + " + asString(p.e2) + " )"
- case p:MultExpr => asString(p.e1) + " * " + asString(p.e2)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement