private List<XTreeExpr> makeList(XTreeExpr expr){
		List<XTreeExpr> list;
		if(expr instanceof XTreeOperator){
			XTreeOperator o = (XTreeOperator)expr;
			if(o.operators.get(0)==XOperator.COMMA){
				return o.exprs;
			}else if(o.operators.get(0).priority>XOperator.COMMA.priority){
				list = new ArrayList<XTreeExpr>();
				list.add(expr);
			}else{
				list = new ArrayList<XTreeExpr>();
				List<XTreeExpr> l = makeList(o.exprs.get(0));
				XTreeExpr last = l.remove(l.size()-1);
				list.addAll(l);
				List<XTreeExpr> opexpr = new ArrayList<XTreeExpr>();
				List<XOperator> ops = new ArrayList<XOperator>();
				opexpr.add(last);
				for(int i=0; i<o.operators.size(); i++){
					XOperator operator = o.operators.get(i);
					ops.add(operator);
					l = makeList(o.exprs.get(i+1));
					last = l.remove(l.size()-1);
					if(!l.isEmpty()){
						XTreeExpr first = l.remove(0);
						opexpr.add(first);
						list.add(new XTreeOperator(new XTreePosition(opexpr.get(0).position.position.clone(), opexpr.get(0).position.start, opexpr.get(opexpr.size()-1).position.end), opexpr, ops));
						opexpr = new ArrayList<XTreeExpr>();
						ops = new ArrayList<XOperator>();
						list.addAll(l);
					}
					opexpr.add(last);
				}
				if(opexpr.size()>1){
					list.add(new XTreeOperator(new XTreePosition(opexpr.get(0).position.position.clone(), opexpr.get(0).position.start, opexpr.get(opexpr.size()-1).position.end), opexpr, ops));
				}else{
					list.add(opexpr.get(0));
				}
			}
		}else{
			list = new ArrayList<XTreeExpr>();
			list.add(expr);
		}
		return list;
	}