MathParser.h
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:2k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. #ifndef __STKLIB_MATHPARSER_H__
  2. #define __STKLIB_MATHPARSER_H__
  3. //#include "psms.h"
  4. #define  MP_ParserStackSize 100
  5. #define  MP_MaxVarNameLen 64
  6. #define  MP_MaxFuncNameLen 5
  7. #define  MP_ExpLimit 11356
  8. #define  MP_SQRLIMIT 1E246
  9. #define  MP_MaxExpLen 4
  10. #define  MP_TotalErrors 8
  11. #define  MP_ErrSuccess 0
  12. #define  MP_ErrParserStack 1
  13. #define  MP_ErrBadRange 2
  14. #define  MP_ErrExpression 3
  15. #define  MP_ErrOperator 4
  16. #define  MP_ErrOpenParen 5
  17. #define  MP_ErrOpCloseParen 6
  18. #define  MP_ErrInvalidNum 7
  19. #define  MP_ErrMath 8
  20. //type  MP_ErrorRange = 0..MP_TotalErrors;
  21. typedef enum 
  22. {
  23. PLUS, MINUS, TIMES, DIVIDE, EXPO, OPAREN, CPAREN, NUM,
  24. FUNC, EOL, BAD, ERR, MODU
  25. }TokenTypes;
  26. typedef double MPExtended;
  27. typedef struct STKLIB_API token_rec_t
  28. {
  29. WORD State;//BYTE State;
  30. MPExtended Value;
  31. CSPString FuncName;//[MaxFuncNameLen];
  32. }TokenRec;
  33. typedef struct{
  34. MPExtended Value;
  35. char VarName[MP_MaxVarNameLen];
  36. }VARSTRU;
  37. /***
  38. 表达式分析类,可以有变量
  39. */
  40. class STKLIB_API CMathParser
  41. {
  42. public:
  43. CMathParser( );
  44. CMathParser( LPCTSTR s, int maxVarCount = 10 );
  45. ~CMathParser();
  46. void Clear( );
  47. void ClearVarMap( );
  48. void SetParserString( LPCTSTR s );
  49. void InitVarMap( int maxVarCount = 10 );
  50. void AddVar(MPExtended Value, LPCTSTR lpszVarName);
  51. protected:
  52. CSPString FInput;
  53. WORD Position;
  54. TokenRec CurrToken;
  55. TokenRec Stack[MP_ParserStackSize];
  56. int StackTop;// : 0..MP_ParserStackSize;
  57. WORD TokenLen;// : Word;
  58. TokenTypes TokenType;
  59. CSPMapStringToPtr m_VarMap;
  60. WORD GotoState(WORD Production);
  61. BOOL IsFunc(CSPString S);
  62. BOOL IsVar(MPExtended &Value);
  63. TokenTypes NextToken();
  64. void Push(TokenRec Token);
  65. void Pop(TokenRec &Token);
  66. void Reduce(WORD Reduction);
  67. void Shift(WORD State);
  68. int Round(double value);
  69. BOOL GetVar( LPCTSTR lpszVarName, MPExtended &Value);
  70. // result values
  71. int ErrorCode;
  72. MPExtended ParseValue;
  73. public://    { Public declarations }
  74. void Parse();
  75. BOOL IsError( );
  76. int GetErrorCode( );
  77. MPExtended GetResult( );
  78. };
  79. #endif