equal
  deleted
  inserted
  replaced
  
    
    
|     12  |     12  | 
|     13 abstract class Parser[I : IsSeq, T] { |     13 abstract class Parser[I : IsSeq, T] { | 
|     14   def parse(ts: I): Set[(T, I)] |     14   def parse(ts: I): Set[(T, I)] | 
|     15  |     15  | 
|     16   def parse_all(ts: I) : Set[T] = |     16   def parse_all(ts: I) : Set[T] = | 
|     17     for ((head, tail) <- parse(ts); if (tail.isEmpty)) yield head |     17     for ((head, tail) <- parse(ts); if tail.isEmpty) yield head | 
|     18 } |     18 } | 
|     19  |     19  | 
|     20 class SeqParser[I : IsSeq, T, S](p: => Parser[I, T], q: => Parser[I, S]) extends Parser[I, ~[T, S]] { |     20 class SeqParser[I : IsSeq, T, S](p: => Parser[I, T], q: => Parser[I, S]) extends Parser[I, ~[T, S]] { | 
|     21   def parse(sb: I) =  |     21   def parse(sb: I) =  | 
|     22     for ((head1, tail1) <- p.parse(sb);  |     22     for ((head1, tail1) <- p.parse(sb);  | 
|    121    (AExp ~ ">" ~ AExp) ==> { case x ~ y ~ z => Bop(">", x, z): BExp } || |    121    (AExp ~ ">" ~ AExp) ==> { case x ~ y ~ z => Bop(">", x, z): BExp } || | 
|    122    ("(" ~ BExp ~ ")" ~ "&&" ~ BExp) ==> { case x ~ y ~ z ~ u ~ v => And(y, v): BExp } || |    122    ("(" ~ BExp ~ ")" ~ "&&" ~ BExp) ==> { case x ~ y ~ z ~ u ~ v => And(y, v): BExp } || | 
|    123    ("(" ~ BExp ~ ")" ~ "||" ~ BExp) ==> { case x ~ y ~ z ~ u ~ v => Or(y, v): BExp } || |    123    ("(" ~ BExp ~ ")" ~ "||" ~ BExp) ==> { case x ~ y ~ z ~ u ~ v => Or(y, v): BExp } || | 
|    124    ("true" ==> (_ => True: BExp )) ||  |    124    ("true" ==> (_ => True: BExp )) ||  | 
|    125    ("false" ==> (_ => False: BExp )) || |    125    ("false" ==> (_ => False: BExp )) || | 
|    126    ("(" ~ BExp ~ ")") ==> { case x ~ y ~ z => y} |    126    ("(" ~ BExp ~ ")") ==> { case _ ~ x ~ _ => x } | 
|    127  |    127  | 
|    128 // statement / statements |    128 // statement / statements | 
|    129 lazy val Stmt: Parser[String, Stmt] = |    129 lazy val Stmt: Parser[String, Stmt] = | 
|    130   (("skip" ==> (_ => Skip: Stmt)) || |    130   (("skip" ==> (_ => Skip: Stmt)) || | 
|    131    (IdParser ~ ":=" ~ AExp) ==> { case x ~ y ~ z => Assign(x, z): Stmt } || |    131    (IdParser ~ ":=" ~ AExp) ==> { case x ~ y ~ z => Assign(x, z): Stmt } || |