/**
     * 弹出(组装好的)操作符
     *
     * @return 操作符
     */
    Operator popOperator() {
      if (operatorStack.isEmpty())
        throw I18nExceptionFactory.createIllegalStateException(
            "ExpressionReducer.miss.left.parenthesis");

      Operator operator = (Operator) operatorStack.pop();
      // 从参数栈弹出所需参数组装操作表达式
      if (operator instanceof BinaryOperator) {
        BinaryOperator binaryOperator = (BinaryOperator) operator;
        if (parameterStack.isEmpty())
          throw I18nExceptionFactory.createIllegalStateException(
              "ExpressionReducer.operator.miss.parameter");
        Expression rightParameter = (Expression) parameterStack.pop(); // 调整参数顺序
        if (parameterStack.isEmpty())
          throw I18nExceptionFactory.createIllegalStateException(
              "ExpressionReducer.operator.miss.parameter");
        Expression leftParameter = (Expression) parameterStack.pop();
        parameterStack.push(
            populateBinaryOperator(
                (BinaryOperatorImpl) binaryOperator,
                leftParameter,
                rightParameter)); // 将组装好的表达式作为参数压入
      } else if (operator instanceof UnaryOperator) {
        UnaryOperator unaryOperator = (UnaryOperator) operator;
        if (parameterStack.isEmpty())
          throw I18nExceptionFactory.createIllegalStateException(
              "ExpressionReducer.operator.miss.parameter");
        Expression parameter = (Expression) parameterStack.pop();
        parameterStack.push(
            populateUnaryOperator((UnaryOperatorImpl) unaryOperator, parameter)); // 将组装好的表达式作为参数压入
      }
      return operator;
    }
 public void setUnaryOperatorHandlers(List unaryOperatorHandlers) {
   if (unaryOperatorHandlers == null)
     throw I18nExceptionFactory.createIllegalArgumentException(
         "UnaryOperatorHandlerChain.handler.required");
   for (Iterator iterator = unaryOperatorHandlers.iterator(); iterator.hasNext(); ) {
     Object handler = iterator.next();
     if (handler == null)
       throw I18nExceptionFactory.createIllegalArgumentException(
           "UnaryOperatorHandlerChain.handler.required");
     if (!(handler instanceof UnaryOperatorHandlerMatcher))
       throw I18nExceptionFactory.createIllegalArgumentException(
           "UnaryOperatorHandlerChain.handler.type.error",
           new Object[] {
             handler.getClass().getName(), UnaryOperatorHandlerMatcher.class.getName()
           });
   }
   this.unaryOperatorHandlers = unaryOperatorHandlers;
 }
 /**
  * 弹出(最后的)结果
  *
  * @return 结果
  */
 Expression popResult() {
   while (!operatorStack.isEmpty()) {
     Operator operator = popOperator(); // 弹出栈中所有操作符
     if (operator == Parenthesis.LEFT_PARENTHESIS)
       throw I18nExceptionFactory.createIllegalStateException(
           "ExpressionReducer.miss.right.parenthesis");
   }
   Expression result = (Expression) parameterStack.pop();
   Assert.assertTrue(
       parameterStack.isEmpty(), "ExpressionReducer.operator.miss.parameter"); // 后验条件
   return result;
 }