+/**
+ * rearrangeTree : for applyToken subtree from right-combination to
+ * left-combination
+ * @input x a ast
+ * @return another ast
+ */
+function rearrangeTree(x: any) : any {
+
+ if (x !== undefined){
+ for (var i=1;i<x.length;i++){
+ rearrangeTree(x[i]);
+ }
+ console.log("@@"+repr(x[0]));
+
+ if (x[0] == applyToken){
+ if (Array.isArray(x[2]) && x[2][0] == applyToken){
+ let rl = rearrangeTree(x[2][1]);
+ let rr = rearrangeTree(x[2][2]);
+ let l = rearrangeTree(x[1]);
+ x[0] = applyToken;
+ x[1] = [applyToken, l, rl];
+ x[2] = rr;
+ console.log("@@=="+repr(x));
+
+ return x;
+ }
+ else{
+ x[0] = applyToken;
+ x[1] = rearrangeTree(x[1]);
+ x[2] = rearrangeTree(x[2]);
+ console.log("@@=="+repr(x));
+
+
+ return x;
+ }
+ }
+
+ return x;
+ }
+ }
+
+
+