/// <summary>
 /// CheckParms( Parser.Token, CValue) - This method makes certain the single argument is non-null.
 ///		Raises an exception if it is.
 /// </summary>
 /// <param name="oToken">Parser.Token object</param>
 /// <param name="arg1">CValue argument</param>
 private void CheckParms(Parser.Token oToken, CValue arg1)
 {
     if (arg1 == null)
     {
         throw new ApplicationException("Argument not supplied near " + oToken.ToString() + " operation.");
     }
 }
 public override bool IsMatch(Parser.Token tkn)
 {
     return(tkn.ToString() == "<=");
 }
        /// <summary>
        /// Paren() : This method evaluates Parenthesis in the equation and
        ///		insures they are handled properly according to the Order of Operations. Because this is last in the chain,
        ///		it also evaluates Variable and Function names.
        /// </summary>
        /// <returns>CValue object that holds an operation.</returns>
        private CValue Paren()
        {
            bool   bFunc  = false;
            CValue oValue = null;

            if (m_currentToken.ToString() == "(")
            {
                PositionNextToken();


                oValue = Relational();

                if (m_currentToken.ToString() == ",")
                {
                    return(oValue);
                }

                if (m_currentToken.ToString() != ")")
                {
                    throw new ApplicationException("Unmatched parenthesis in equation.");
                }
            }
            else
            {
                switch (m_currentToken.TokenType)
                {
                case Parser.CharType.CT_NUMBER:
                    oValue = new CNumber(m_currentToken.ToString());
                    break;

                case Parser.CharType.CT_LETTER:
                {
                    if (m_nextToken.ToString() == "(")
                    {
                        int iIdx = m_slFunctions.IndexOfKey(m_currentToken.ToString());

                        if (iIdx < 0)
                        {
                            throw new ApplicationException("Function not found - " + m_currentToken.ToString());
                        }

                        CFunction oFunc = (CFunction)m_slFunctions.GetByIndex(iIdx);

                        ArrayList alValues = new ArrayList();

                        PositionNextToken();


                        do
                        {
                            PositionNextToken();
                            oValue = AddSub();

                            alValues.Add(oValue);
                        } while (m_currentToken.ToString() != ")" && m_currentToken != "");


                        bFunc = true;

                        oValue = oFunc.CreateInstance(alValues);

                        PositionNextToken();
                    }
                    else
                    {
                        oValue = GetVariableByName(m_currentToken.ToString());
                    }

                    break;
                }
                }
            }


            if (!bFunc)
            {
                PositionNextToken();
            }

            return(oValue);
        }