97 lazy val T: Parser[String, Int] =   | 
    97 lazy val T: Parser[String, Int] =   | 
    98   (F ~ "*" ~ T) ==> { case ((x, y), z) => x * z } | F | 
    98   (F ~ "*" ~ T) ==> { case ((x, y), z) => x * z } | F | 
    99 lazy val F: Parser[String, Int] =   | 
    99 lazy val F: Parser[String, Int] =   | 
   100   ("(" ~ E ~ ")") ==> { case ((x, y), z) => y } | NumParserInt | 
   100   ("(" ~ E ~ ")") ==> { case ((x, y), z) => y } | NumParserInt | 
   101   | 
   101   | 
         | 
   102 lazy val E: Parser[String, String] =   | 
         | 
   103   (T ~ "+" ~ E) ==> { case ((x, y), z) => "(" + x + ")+(" + z + ")"} | T  | 
         | 
   104 lazy val T: Parser[String, String] =   | 
         | 
   105   (F ~ "*" ~ T) ==> { case ((x, y), z) => "(" + x + ")*("+ z + ")"} | F | 
         | 
   106 lazy val F: Parser[String, String] =   | 
         | 
   107   ("(" ~ E ~ ")") ==> { case ((x, y), z) => y } | NumParser | 
   102   | 
   108   | 
         | 
   109 println(E.parse_all("1+3+4")) | 
         | 
   110 println(E.parse("1+3+4")) | 
   103 println(E.parse_all("4*2+3")) | 
   111 println(E.parse_all("4*2+3")) | 
   104 println(E.parse_all("4*(2+3)")) | 
   112 println(E.parse_all("4*(2+3)")) | 
   105 println(E.parse_all("(4)*((2+3))")) | 
   113 println(E.parse_all("(4)*((2+3))")) | 
   106 println(E.parse_all("4/2+3")) | 
   114 println(E.parse_all("4/2+3")) | 
   107 println(E.parse("1 + 2 * 3")) | 
   115 println(E.parse("1 + 2 * 3")) | 
   124   | 
   132   | 
   125 // non-ambiguous vs ambiguous grammars  | 
   133 // non-ambiguous vs ambiguous grammars  | 
   126 lazy val S : Parser[String, String] =  | 
   134 lazy val S : Parser[String, String] =  | 
   127   ("1" ~ S ~ S) ==> { case ((x, y), z) => x + y + z } | "" | 
   135   ("1" ~ S ~ S) ==> { case ((x, y), z) => x + y + z } | "" | 
   128   | 
   136   | 
   129 S.parse("1" * 15) | 
   137 S.parse("1" * 17) | 
   130   | 
   138   | 
   131 lazy val U : Parser[String, String] =  | 
   139 lazy val U : Parser[String, String] =  | 
   132   ("1" ~ U) ==> { case (x, y) => x + y  } | "" | 
   140   ("1" ~ U) ==> { case (x, y) => x + y  } | "" | 
   133   | 
   141   | 
   134 U.parse("1" * 15) | 
   142 U.parse("1" * 25) | 
   135   | 
   143   | 
   136 U.parse("11") | 
   144 U.parse("11") | 
   137 U.parse("11111") | 
   145 U.parse("11111") | 
   138 U.parse("11011") | 
   146 U.parse("11011") | 
   139   | 
   147   |