X-Git-Url: https://git.kianting.info/?a=blobdiff_plain;f=src%2Findex.ts;h=0d94c74c6fb2434f783f1451c0b86f3824973a80;hb=1a7598fd6e01515661591a41320a63451cb82d5f;hp=acaa74ef15043c42b2b90d34d8ea5cf56964bc79;hpb=5f0943539e27b3e0d08e70559ea39017e6df330e;p=clo diff --git a/src/index.ts b/src/index.ts index acaa74e..0d94c74 100644 --- a/src/index.ts +++ b/src/index.ts @@ -101,6 +101,7 @@ 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; argv.forEach((val, index) => { @@ -170,28 +171,36 @@ let circumfix = (f : Function, signal? : string) => (x : TokenMatcheePair)=>{ 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 : tkTree[] = [inner]; let new_ast = [ast_middle]; a.value.ast = new_ast; - - console.log("+"+signal+"+"+repr(a)); - - } return a; } -/** fac1 = "(" expr ")" */ -let fac1 = circumfix((x : TokenMatcheePair)=> -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 : TokenMatcheePair) => + 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 : TokenMatcheePair) => thenDo(thenDo(thenDo(tk.toSome(x), tLParen), tInt), tRParen), "fac1"); +let fac1 = (x : TokenMatcheePair) => + { + let n = thenDo(thenDo(toSome(x), single), fac1Appliee); + + console.log("+"+"bocchitherock"+"+"+repr(n)); + + return n + }; +let fac2 = single; let fac = orDo(fac1, fac2); - /** * * term1 = fac (MUL | DIV) fac @@ -231,8 +240,10 @@ let expr = orDo(expr1, expr2); +let tokens = tk.tokenize("12(13)(14)"); +//let tokens = tk.tokenize("(4-(3/4))"); +//tk.tokenize(argv[2]); -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)}); @@ -249,5 +260,5 @@ let beta = expr({ ast : []}); -console.log(repr(beta)); +console.log("RESULT="+repr(beta));