CNumber CCalculator::Eval(char* szText) { CCalcExpression* pcExpression; CNumber cAnswer; BOOL bResult; CChars sz; mcParser.Init(szText); bResult = Expression(&pcExpression); mcParser.Kill(); if (bResult) { cAnswer = pcExpression->Evaluate(); SafeKill(pcExpression); } else { sz.Init("Cannot evaluate expression ["); sz.Append(szText); sz.Append("]\n"); gcUserError.Set(sz.Text()); sz.Kill(); cAnswer.Zero(); } return cAnswer; }
BOOL CCalculator::Identifier(CCalcConstExpression** ppcConst) { TRISTATE tResult; CNumber cNumber; int iLength; char* sz; tResult = mcParser.GetIdentifier(NULL, &iLength); if (tResult == TRITRUE) { sz = (char*)malloc(iLength+1); mcParser.GetIdentifier(sz); free(sz); *ppcConst = NewMalloc<CCalcConstExpression>(); (*ppcConst)->SetValue(cNumber.Zero()); return TRUE; } else { return FALSE; } }