Advertisement
Guest User

Untitled

a guest
Apr 18th, 2015
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.10 KB | None | 0 0
  1. package juicy.source.ast
  2.  
  3. trait Expression extends Visitable
  4. trait Statement extends Visitable
  5.  
  6. trait BinOp extends Expression {
  7. val lhs: Expression
  8. val rhs: Expression
  9.  
  10. protected def rewriter[T <: BinOp]
  11. (ctor: (Expression, Expression) => T)
  12. (implicit rule: Rewriter) = {
  13. rule(
  14. ctor(
  15. lhs.rewrite.asInstanceOf[Expression],
  16. rhs.rewrite.asInstanceOf[Expression]
  17. ))
  18. }
  19. }
  20.  
  21. case class Add(lhs: Expression, rhs: Expression) extends BinOp {
  22. def rewrite(implicit rule: Rewriter) = rewriter(Add.apply _)
  23. }
  24.  
  25. case class Sub(lhs: Expression, rhs: Expression) extends BinOp {
  26. def rewrite(implicit rule: Rewriter) = rewriter(Sub.apply _)
  27. }
  28.  
  29. case class WhileStmnt(
  30. cond: Expression,
  31. body: Statement
  32. ) extends Statement {
  33. def rewrite(implicit rule: Rewriter) =
  34. rule(
  35. WhileStmnt(
  36. cond.rewrite.asInstanceOf[Expression],
  37. body.rewrite.asInstanceOf[Statement]
  38. ))
  39. }
  40.  
  41. case class ExprStmnt(
  42. expr: Expression
  43. ) extends Statement {
  44. def rewrite(implicit rule: Rewriter) =
  45. rule(
  46. ExprStmnt(
  47. expr.rewrite.asInstanceOf[Expression]
  48. ))
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement