Advertisement
Guest User

Untitled

a guest
Jan 20th, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 2.10 KB | None | 0 0
  1. type Variable = String
  2.   type Env[A] = Map[Variable,A]
  3.  
  4.   // Arithmetic expressions
  5.  
  6.   abstract class Expr
  7.   case class Num(n: Integer) extends Expr
  8.   case class Plus(e1: Expr, e2: Expr) extends Expr
  9.   case class Minus(e1: Expr, e2: Expr) extends Expr
  10.   case class Times(e1: Expr, e2: Expr) extends Expr
  11.  
  12.   // Booleans
  13.   case class Bool(n: Boolean) extends Expr
  14.   case class Eq(e1: Expr, e2:Expr) extends Expr
  15.   case class IfThenElse(e: Expr, e1: Expr, e2: Expr) extends Expr
  16.  
  17.    // Strings
  18.   case class Str(s: String) extends Expr
  19.   case class Length(e: Expr) extends Expr
  20.   case class Index(e1: Expr, e2: Expr) extends Expr
  21.   case class Concat(e1: Expr, e2: Expr) extends Expr
  22.  
  23.   // Variables and let-binding
  24.   case class Var(x: Variable) extends Expr
  25.   case class Let(x: Variable, e1: Expr, e2: Expr) extends Expr
  26.   case class LetFun(f: Variable, arg: Variable, ty: Type, e1:Expr, e2:Expr)
  27.       extends Expr
  28.   case class LetRec(f: Variable, arg: Variable, xty: Type, ty: Type, e1:Expr, e2:Expr)
  29.       extends Expr
  30.   case class LetPair(x: Variable,y: Variable, e1:Expr, e2:Expr) extends Expr
  31.  
  32.   // Pairing
  33.   case class Pair(e1: Expr, e2: Expr) extends Expr
  34.   case class First(e: Expr) extends Expr
  35.   case class Second(e: Expr) extends Expr
  36.  
  37.   // Functions
  38.   case class Lambda(x: Variable, ty: Type, e: Expr) extends Expr
  39.   case class Apply(e1: Expr, e2: Expr) extends Expr
  40.   case class Rec(f: Variable, x: Variable, tyx:Type, ty: Type, e: Expr) extends Expr
  41.  
  42.   // Values
  43.   abstract class Value
  44.   case class NumV(n: Integer) extends Value
  45.   case class BoolV(n: Boolean) extends Value
  46.   case class StringV(s: String) extends Value
  47.   case class PairV(v1: Value, v2: Value) extends Value
  48.   case class ClosureV(env: Env[Value], x: Variable, e: Expr) extends Value
  49.   case class RecV(env: Env[Value], f:Variable, x: Variable, e: Expr) extends Value
  50.  
  51.   // Types
  52.   abstract class Type
  53.   case object IntTy extends Type
  54.   case object BoolTy extends Type
  55.   case object StringTy extends Type
  56.   case class PairTy(ty1: Type, ty2: Type) extends Type
  57.   case class FunTy(ty1: Type, ty2: Type) extends Type
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement