if (listExpressions.size() > 1) {
Stack<Expression> stack = new Stack<Expression>();
stack.push(listExpressions.remove(0));
while (! listExpressions.isEmpty()) {
Expression exp = stack.pop();
Expression left = stack.empty() ? null : stack.pop();
Expression right = listExpressions.remove(0);
stack.addAll(exp.merge(left, right, precedenceLevel));
}
return mergeExpressions(new ArrayList<Expression>(stack), precedenceLevel - 1);
}
return listExpressions;