equal
  deleted
  inserted
  replaced
  
    
    
    56   def parse(sb: String) = { | 
    56   def parse(sb: String) = { | 
    57     val (prefix, suffix) = sb.splitAt(s.length)  | 
    57     val (prefix, suffix) = sb.splitAt(s.length)  | 
    58     if (prefix == s) Set((prefix, suffix)) else Set()  | 
    58     if (prefix == s) Set((prefix, suffix)) else Set()  | 
    59   }  | 
    59   }  | 
    60 }  | 
    60 }  | 
         | 
    61   | 
         | 
    62   | 
    61   | 
    63   | 
    62 // atomic parser for identifiers (variable names)  | 
    64 // atomic parser for identifiers (variable names)  | 
    63 case object IdParser extends Parser[String, String] { | 
    65 case object IdParser extends Parser[String, String] { | 
    64   val reg = "[a-z][a-z,0-9]*".r  | 
    66   val reg = "[a-z][a-z,0-9]*".r  | 
    65   def parse(sb: String) = reg.findPrefixOf(sb) match { | 
    67   def parse(sb: String) = reg.findPrefixOf(sb) match { | 
    81 }  | 
    83 }  | 
    82   | 
    84   | 
    83 // the following string interpolation allows us to write   | 
    85 // the following string interpolation allows us to write   | 
    84 // StrParser(_some_string_) more conveniently as   | 
    86 // StrParser(_some_string_) more conveniently as   | 
    85 //  | 
    87 //  | 
    86 // p"<_some_string_>"   | 
    88 // p"_some_string_"   | 
    87   | 
    89   | 
    88 extension (sc: StringContext)   | 
    90 extension (sc: StringContext)   | 
    89   def p(args: Any*) = StrParser(sc.s(args*))  | 
    91   def p(args: Any*) = StrParser(sc.s(args*))  | 
         | 
    92   | 
         | 
    93   | 
         | 
    94   | 
         | 
    95 // the following is an alternative way to achieve the same, except  | 
         | 
    96 // that the p needs parentheses as in  | 
         | 
    97 //  | 
         | 
    98 // p("_some_string_") | 
         | 
    99 //  | 
         | 
   100 //import StrParser.{apply => p} | 
    90   | 
   101   | 
    91 // the abstract syntax trees for the WHILE language  | 
   102 // the abstract syntax trees for the WHILE language  | 
    92 abstract class Stmt  | 
   103 abstract class Stmt  | 
    93 abstract class AExp  | 
   104 abstract class AExp  | 
    94 abstract class BExp   | 
   105 abstract class BExp   |