100 P.parse_all("(((()()))()))") | 
   100 P.parse_all("(((()()))()))") | 
   101 P.parse_all(")(") | 
   101 P.parse_all(")(") | 
   102 P.parse_all("()") | 
   102 P.parse_all("()") | 
   103   | 
   103   | 
   104 // just counts parentheses  | 
   104 // just counts parentheses  | 
   105 lazy val PC : Parser[String, Int] =   | 
   105 lazy val P2 : Parser[String, Int] =   | 
   106   ("(" ~ PC ~ ")" ~ PC ==> { case (((_, x), _), y) => x + y + 2 } ||  | 
   106   ("(" ~ P2 ~ ")" ~ P2 ==> { case (((_, x), _), y) => x + y + 2 } ||  | 
   107    "" ==> { (s) => 0 }) | 
   107    "" ==> { _ => 0 }) | 
   108   | 
   108   | 
   109 PC.parse_all("(((()()))())") | 
   109 P2.parse_all("(((()()))())") | 
   110 P.parse_all("(((()()))()))") | 
   110 P2.parse_all("(((()()))()))") | 
         | 
   111   | 
         | 
   112 // counts opening and closing parentheses  | 
         | 
   113 lazy val P3 : Parser[String, Int] =   | 
         | 
   114   ("(" ~ P3 ==> { case (_, x) => x + 1 } || | 
         | 
   115    ")" ~ P3 ==> { case (_, x) => x - 1 } ||  | 
         | 
   116    "" ==> { _ => 0 }) | 
         | 
   117   | 
         | 
   118 P3.parse_all("(((()()))())") | 
         | 
   119 P3.parse_all("(((()()))()))") | 
         | 
   120 P3.parse_all(")(") | 
   111   | 
   121   | 
   112 // Arithmetic Expressions (Terms and Factors)  | 
   122 // Arithmetic Expressions (Terms and Factors)  | 
   113 // (because it is mutually recursive, you need :paste   | 
   123 // (because it is mutually recursive, you need :paste   | 
   114 //  for munching this definition in the REPL)  | 
   124 //  for munching this definition in the REPL)  | 
   115   | 
   125   |