mathparser.h

来自「此算术表达式解析器能够在程序运行时根据输入的变量大小和算术表达式动态解析表达式」· C头文件 代码 · 共 81 行

H
81
字号
#ifndef __MATHPARSER_H__
#define __MATHPARSER_H__
//#include "psms.h"

#define  ParserStackSize  100
#define  MaxFuncNameLen  5
#define  ExpLimit  11356
#define  SQRLIMIT  1E246
#define  MaxExpLen  4
#define  TotalErrors  7
#define  ErrParserStack  1
#define  ErrBadRange  2
#define  ErrExpression  3
#define  ErrOperator  4
#define  ErrOpenParen  5
#define  ErrOpCloseParen  6
#define  ErrInvalidNum  7

//type  ErrorRange = 0..TotalErrors;

typedef enum 
{
	PLUS, MINUS, TIMES, DIVIDE, EXPO, OPAREN, CPAREN, NUM,
	FUNC, EOL, BAD, ERR, MODU
}TokenTypes;

typedef double Extended;

typedef struct
{
	  BYTE State;
	  Extended Value;
	  CString FuncName;//[MaxFuncNameLen];
}TokenRec;

typedef struct{
	Extended Value;	
	char VarName[30];
}VARSTRU;

class  CMathParser
{
 public:
	CMathParser(CString s);
	~CMathParser();
	void AddVar(Extended Value, CString  VarName);

  
  protected:
	  CString  FInput;
	  TokenRec  CurrToken;
      BOOL MathError;
      TokenRec Stack[ParserStackSize];
      int StackTop;// : 0..ParserStackSize;
      int TokenError;// : ErrorRange;
      WORD TokenLen;// : Word;
      TokenTypes TokenType;
	  CPtrList m_VarList;

      WORD GotoState(WORD Production);
      BOOL IsFunc(CString S);
      BOOL IsVar(Extended &Value);

	  TokenTypes NextToken();
      void Push(TokenRec Token);
      void Pop(TokenRec &Token);
      void Reduce(WORD Reduction);
      void Shift(WORD State);
	  int Round(double value);
	
	  BOOL GetVar(CString VarName, Extended &Value);

  public://    { Public declarations }
      WORD Position;
      BOOL ParseError;
      Extended ParseValue;
      void  Parse();
  
};
#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?