|    147 println(P.parse_all(")(")) |    147 println(P.parse_all(")(")) | 
|    148 println(P.parse_all("()")) |    148 println(P.parse_all("()")) | 
|    149  |    149  | 
|    150 // A parser for arithmetic expressions (Terms and Factors) |    150 // A parser for arithmetic expressions (Terms and Factors) | 
|    151  |    151  | 
|    152 "1 + 2 * 3" |         | 
|    153 "(1 + 2) * 3" |         | 
|    154 { |         | 
|    155 lazy val E: Parser[String, Int] = { |    152 lazy val E: Parser[String, Int] = { | 
|    156   (T ~ p"+" ~ E).map{ case ((x, _), z) => x + z } || |    153   (T ~ p"+" ~ E).map{ case ((x, _), z) => x + z } || | 
|    157   (T ~ p"-" ~ E).map{ case ((x, _), z) => x - z } || T } |    154   (T ~ p"-" ~ E).map{ case ((x, _), z) => x - z } || T } | 
|    158 lazy val T: Parser[String, Int] = { |    155 lazy val T: Parser[String, Int] = { | 
|    159   (F ~ p"*" ~ T).map{ case ((x, _), z) => x * z } || F } |    156   (F ~ p"*" ~ T).map{ case ((x, _), z) => x * z } || F } | 
|    160 lazy val F: Parser[String, Int] = { |    157 lazy val F: Parser[String, Int] = { | 
|    161   (p"(" ~ E ~ p")").map{ case ((_, y), _) => y } || NumParserInt } |    158   (p"(" ~ E ~ p")").map{ case ((_, y), _) => y } || NumParserInt } | 
|    162 } |    159  | 
|         |    160 println(E.parse_all("2*2*2")) | 
|    163 println(E.parse_all("1+3+4")) |    161 println(E.parse_all("1+3+4")) | 
|    164 println(E.parse("1+3+4")) |    162 println(E.parse("1+3+4")) | 
|    165 println(E.parse_all("4*2+3")) |    163 println(E.parse_all("4*2+3")) | 
|    166 println(E.parse_all("4*(2+3)")) |    164 println(E.parse_all("4*(2+3)")) | 
|    167 println(E.parse_all("(4)*(((2+3)))")) |    165 println(E.parse_all("(4)*(((2+3)))")) |