⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mathparser.h

📁 自定义的报表
💻 H
字号:
//---------------------------------------------------------------------------

#ifndef MathParserH
#define MathParserH
//---------------------------------------------------------------------------
#define  ParserStackSize        100
#define  MaxFuncNameLen         5
#define  ExpLimit               11356
#define  SQRLIMIT               1E246
#define  MaxVarName             30
#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 WORD POSITION;
typedef struct
{
	  BYTE State;
	  Extended Value;
	  AnsiString FuncName;
}TokenRec;

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

class  TMathParser
{
public:
        TMathParser(AnsiString s);
        ~TMathParser();
        void AddVar(Extended Value, AnsiString  VarName);
        BOOL __fastcall EditVar(AnsiString VarName, Extended Value);

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

        WORD GotoState(WORD Production);
        BOOL IsFunc(AnsiString 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(AnsiString VarName, Extended &Value);
public:
        WORD Position;
        BOOL ParseError;
        Extended ParseValue;
        void  Parse();
private:
        BOOL __fastcall CharIn(char ch, char StartCh, char EndCh);
        BOOL __fastcall CharIn(char ch, AnsiString Str);
};

#endif

⌨️ 快捷键说明

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