+
+
+/**
+ *
+ * fac2 = int MUL int
+ */
+let fac2 = tInt;
+
+/**
+ * fac = fac1 | fac2
+ */
+let fac = orDo(fac1, fac2);
+
+
+/**
+ *
+ * expr1 = fac ADD fac
+ */
+let expr1 = midfix((x : TokenMatcheePair)=>
+ thenDo(thenDo(thenDo(tk.toSome(x), fac), tAdd), fac), "expr1");
+/**
+ * expr2 = fac
+ */
+let expr2 = fac;
+
+/**
+ * expr = expr1 | expr2
+ */
+let expr = orDo(expr1, expr2);
+
+
+
+
+let tokens = tk.tokenize("2+3*4");//tk.tokenize(argv[2]);
+let tokensFiltered = tokens.filter(
+ (x)=>{return (x.type != tk.TokenType.NL
+ && x.type != tk.TokenType.SP)});
+
+let wrappedTokens : tk.Maybe<TokenMatcheePair> =
+ tk.toSome({
+ matched : [] ,
+ remained : tokensFiltered,
+ ast : []});
+
+let beta = expr({
+ matched : [] ,
+ remained : tokensFiltered,
+ ast : []});
+
+console.log(repr(wrappedTokens));
+
+console.log(repr(beta));
+