equal
  deleted
  inserted
  replaced
  
    
    
|      1 // A parser and evaluator for the while language |      1 // A parser and evaluator for the while language | 
|      2 //  |      2 //  | 
|      3  |      3  | 
|      4 import scala.language.implicitConversions |      4 import scala.language.implicitConversions | 
|      5 import scala.language.reflectiveCalls |      5 import scala.language.reflectiveCalls | 
|         |      6  | 
|      6  |      7  | 
|      7 abstract class Parser[I <% Seq[_], T] { |      8 abstract class Parser[I <% Seq[_], T] { | 
|      8   def parse(ts: I): Set[(T, I)] |      9   def parse(ts: I): Set[(T, I)] | 
|      9  |     10  | 
|     10   def parse_all(ts: I) : Set[T] = |     11   def parse_all(ts: I) : Set[T] = | 
|     68 lazy val T: Parser[String, Int] =  |     69 lazy val T: Parser[String, Int] =  | 
|     69   (F ~ "*" ~ T) ==> { case ((x, y), z) => x * z} || F |     70   (F ~ "*" ~ T) ==> { case ((x, y), z) => x * z} || F | 
|     70 lazy val F: Parser[String, Int] =  |     71 lazy val F: Parser[String, Int] =  | 
|     71   ("(" ~ E ~ ")") ==> { case ((x, y), z) => y} || NumParser |     72   ("(" ~ E ~ ")") ==> { case ((x, y), z) => y} || NumParser | 
|     72  |     73  | 
|         |     74 println(E.parse_all("123")) | 
|     73 println(E.parse_all("1*2+3")) |     75 println(E.parse_all("1*2+3")) | 
|     74 println(E.parse_all("1+2*3")) |     76 println(E.parse_all("1+2*3")) | 
|     75 println(E.parse_all("1+2+3")) |     77 println(E.parse_all("1+2+3")) | 
|     76 println(E.parse_all("1+2+3")) |     78 println(E.parse_all("1+2+3")) | 
|     77 println(E.parse_all("1+2*3+1")) |     79 println(E.parse_all("1+2*3+1")) |