code: protected int AdditiveExpr(int addPos) throws javax.xml.transform.TransformerException
    {
  
      int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
  
      if (-1 == addPos)
        addPos = opPos;
  
      MultiplicativeExpr(-1);
  
      if (null != m_token)
      {
        if (tokenIs('+'))
        {
          nextToken();
          insertOp(addPos, 2, OpCodes.OP_PLUS);
  
          int opPlusLeftHandLen = m_ops.getOp(OpMap.MAPINDEX_LENGTH) - addPos;
  
          addPos = AdditiveExpr(addPos);
          m_ops.setOp(addPos + OpMap.MAPINDEX_LENGTH,
            m_ops.getOp(addPos + opPlusLeftHandLen + 1) + opPlusLeftHandLen);
          addPos += 2;
        }
        else if (tokenIs('-'))
        {
          nextToken();
          insertOp(addPos, 2, OpCodes.OP_MINUS);
  
          int opPlusLeftHandLen = m_ops.getOp(OpMap.MAPINDEX_LENGTH) - addPos;
  
          addPos = AdditiveExpr(addPos);
          m_ops.setOp(addPos + OpMap.MAPINDEX_LENGTH, 
            m_ops.getOp(addPos + opPlusLeftHandLen + 1) + opPlusLeftHandLen);
          addPos += 2;
        }
      }
  
      return addPos;
    }
docs: This has to handle construction of the operations so that they are evaluated
  in pre-fix order.  So, for 9+7-6, instead of |+|9|-|7|6|, this needs to be
  evaluated as |-|+|9|7|6|.
  
  AdditiveExpr  ::=  MultiplicativeExpr
  | AdditiveExpr '+' MultiplicativeExpr
  | AdditiveExpr '-' MultiplicativeExpr
  
  
  @param addPos Position where expression is to be added, or -1 for append.
  
  @return the position at the end of the equality expression.
  
  @throws javax.xml.transform.TransformerException