X-Git-Url: https://git.kianting.info/?a=blobdiff_plain;f=src%2Findex.js;fp=src%2Findex.js;h=4163e92ef817fdc17ff1d4deda28ceedc56fadba;hb=1a7598fd6e01515661591a41320a63451cb82d5f;hp=0e3686ca2732f5843159c62a956aa15071329fda;hpb=5f0943539e27b3e0d08e70559ea39017e6df330e;p=uann diff --git a/src/index.js b/src/index.js index 0e3686c..4163e92 100644 --- a/src/index.js +++ b/src/index.js @@ -101,6 +101,7 @@ let tMul = m1TType(tk.TokenType.I_MUL); let tDiv = m1TType(tk.TokenType.I_DIV); let tLParen = m1TType(tk.TokenType.L_PAREN); let tRParen = m1TType(tk.TokenType.R_PAREN); +let toSome = tk.toSome; node_process_1.argv.forEach((val, index) => { console.log(`${index}=${val}`); }); @@ -160,17 +161,27 @@ let circumfix = (f, signal) => (x) => { var a = f(x); if (a._tag == "Some") { let inner = a.value.ast[a.value.ast.length - 2]; - console.log("AST====" + repr(a.value.ast)); let ast_middle = [inner]; let new_ast = [ast_middle]; a.value.ast = new_ast; - console.log("+" + signal + "+" + repr(a)); } return a; }; -/** fac1 = "(" expr ")" */ -let fac1 = circumfix((x) => thenDo(thenDo(thenDo(tk.toSome(x), tLParen), expr), tRParen), "fac1"); -let fac2 = tInt; +/** + * TODO: 12(13)(14) only parsed with only 12(13) + */ +/** 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"); +let fac1 = (x) => { + let n = thenDo(thenDo(toSome(x), single), fac1Appliee); + console.log("+" + "bocchitherock" + "+" + repr(n)); + return n; +}; +let fac2 = single; let fac = orDo(fac1, fac2); /** * @@ -199,7 +210,9 @@ let expr2 = term; * expr = expr1 | expr2 */ let expr = orDo(expr1, expr2); -let tokens = tk.tokenize("(4-(3/4))"); //tk.tokenize(argv[2]); +let tokens = tk.tokenize("12(13)(14)"); +//let tokens = tk.tokenize("(4-(3/4))"); +//tk.tokenize(argv[2]); let tokensFiltered = tokens.filter((x) => { return (x.type != tk.TokenType.NL && x.type != tk.TokenType.SP); @@ -214,4 +227,4 @@ let beta = expr({ remained: tokensFiltered, ast: [] }); -console.log(repr(beta)); +console.log("RESULT=" + repr(beta));