Advertisement
Guest User

ricky

a guest
Jan 13th, 2009
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.46 KB | None | 0 0
  1. class Snoc[T](list: List[T]) { def >>[U >: T](x: U): List[U] = x :: list }
  2. implicit def list2Snoc[T](xs: List[T]): Snoc[T] = new Snoc(xs)
  3. object >> { def unapply[T](cons: scala.::[T]): Option[(List[T], T)] = Some((cons.tail, cons.head)) }
  4.  
  5. sealed trait Term
  6. case object True extends Term
  7. case object False extends Term
  8. case object O extends Term
  9. case class Succ(t: Term) extends Term
  10.  
  11. def parseTerm(s: String, stack: List[Term]): List[Term] = s match {
  12.  case "true" => stack >> True
  13.  case "false" => stack >> False
  14.  case "O" => stack >> O
  15.  case "succ" => stack match { case rest >> t => rest >> Succ(t)
  16.                               case _ => throw null }
  17.  case "pred" => stack match { case rest >> O => rest >> O
  18.                               case rest >> Succ(t) => rest >> t
  19.                               case _ => throw null }
  20.  case "if" => stack match { case rest >> then >> otherwise >> True => rest >> then
  21.                             case rest >> then >> otherwise >> False => rest >> otherwise
  22.                             case _ => throw null }
  23.  case "isZero" => stack match { case rest >> O => rest >> True
  24.                                 case rest >> _ => rest >> False
  25.                                 case _ => throw null }
  26. }
  27.  
  28. println
  29. print("> ")
  30. import java.io.{BufferedReader, InputStreamReader}
  31. val in = new BufferedReader(new InputStreamReader(System.in, "UTF-8"))
  32. val line = in.readLine
  33. println(line.split(" ").foldLeft(Nil : List[Term])((stack, token) => parseTerm(token, stack)))
  34.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement