-//let fac1 = midfix((x : TokenMatcheePair)=>
-// thenDo(thenDo(thenDo(tk.toSome(x), tInt), tMul), tInt));
+/** single1 = tInt | "(" expr ")"*/
+let single1 = circumfix((x) => thenDo(thenDo(thenDo(tk.toSome(x), tLParen), expr), tRParen), "fac1");
+let single2 = tInt;
+let single = orDo(single1, single2);
+/** fac1 = single "(" int ")" | single */
+let fac1Appliee = circumfix((x) => thenDo(thenDo(thenDo(tk.toSome(x), tLParen), tInt), tRParen), "fac1");