Advertisement
Guest User

Untitled

a guest
Aug 9th, 2015
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.08 KB | None | 0 0
  1. trait Parser extends RegexParsers with PackratParsers {
  2.   import LambdaAST._
  3.  
  4.     lazy val identifier:PackratParser[String]  =
  5.       """[a-zA-Z]+""".r ^^ {_.toString}
  6.    
  7.     lazy val TERM:PackratParser[Term] = LABSTR | APP | ID | PEXPR
  8.    
  9.     lazy val PEXPR:PackratParser[Term] = "(" ~> TERM <~ ")" ^^
  10.       { term => term }
  11.      
  12.     lazy val ID:PackratParser[Id] =
  13.       identifier ^^ Id
  14.    
  15.     lazy val LABSTR:PackratParser[Abstraction] =
  16.       ID ~ "." ~ TERM ^^
  17.         { case id ~ _ ~ term => Abstraction(id,term) }
  18.    
  19.     lazy val APP:PackratParser[Application] =
  20.       TERM ~ TERM ^^
  21.         { case t1 ~ t2 => Application(t1,t2) }
  22.    
  23.     lazy val FUNC:PackratParser[Func] =
  24.       ID ~ ID ~ "=" ~ TERM ^^
  25.       { case name ~ arg ~ "=" ~ body =>
  26.         Func(name,arg,body) }
  27. }
  28.  
  29.  
  30. object LambdaAST {
  31.  
  32.   abstract trait Term
  33.   case class Id(id:String) extends Term
  34.   case class Abstraction(id:Id,body:Term) extends Term
  35.   case class Application(left:Term,right:Term) extends Term
  36.   case class Func(name:Id,arg:Id,rhs:Term) extends Term
  37.  
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement