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")) |