📄 mathparser.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 + -