-/** 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);
+/** args = single "," args | single */
+let args1 = (x: TokenMatcheePair)=>{
+ var ret = thenDo(thenDo(thenDo(toSome(x), single), tComma), args);
+ if (ret._tag == "Some"){
+ let retLength = ret.value.ast.length;
+ ret.value.ast = [[ret.value.ast[retLength-3]].concat(ret.value.ast[retLength-1])];
+ console.log("$$"+repr(ret.value.ast));
+ }
+ return ret;
+};
+
+let args2 = single;
+
+let args = orDo(args1, args2);
+
+
+/** callees = "(" args ")" | "(" ")" */
+
+
+let callees1 = circumfix((x : TokenMatcheePair) =>
+ thenDo(thenDo(thenDo(toSome(x), tLParen), args), tRParen), "callees1");
+let callees2 = (x: TokenMatcheePair)=>{
+ let ret = thenDo(thenDo(toSome(x), tLParen), tRParen);
+ if (ret._tag == "Some"){
+ let new_ast : tkTree[] = [[]];
+ ret.value.ast = new_ast;
+ }
+
+ return ret};
+
+let callees = orDo(callees1, callees2);
+
+
+
+/** %apply R combinating token */
+let applyToken = {
+ text: "%apply",
+ type: tk.TokenType.ID,
+ col: 0,
+ ln: 0,
+}
+
+/** facAux = callees facAux | callees */
+let facAux1 = (x: TokenMatcheePair)=>{
+ var ret = thenDo(thenDo(toSome(x), callees), facAux);
+ if (ret._tag == "Some"){
+ console.log("1232345"+repr(tkTreeToSExp(ret.value.ast[ret.value.ast.length-1])));
+ let last1 = ret.value.ast[ret.value.ast.length-1];
+ let last2 = ret.value.ast[ret.value.ast.length-2];