12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- /*
- * Expression类是解析表达式的类
- * 表达式支持 + - * / ^(pow) -(neg)运算符
- * 表达式支持 ( ) 控制优先级
- * 表达式中的实数只能为实数加小数点,不支持科学计数法表示(不会错误提示,但得不到正确表达式)
- * SetExprStr失败后会破坏原来的表达式
- * 支持26个字母(不区分大小写)表示变量
- * 使用SetVar设置变量值
- * 默认变量值为 1
- * GetResult时,若表达式求解不合法,返回非0
- * GetExprErrorStr 获取表达式错误代码的表示字符串
- * GetResultErrorStr 获取求解错误代码的表示字符串
- */
- namespace expInterpreter {
- enum AtomType{ATOM_ERROR = 0, ATOM_SYMBOL, ATOM_CONSTANT, ATOM_VARIABLE, ATOM_END};
- // 表示语法单位的结构体
- typedef struct
- {
- AtomType type;
- union
- {
- char symbol;
- double constant;
- char variable;
- } value;
- } Atom;
- // 从给定的字符串读入一个语法单位,从start开始,返回单位结束,为空时返回-1
- int read_atom(Atom *atom, const char *exprStr, int start);
- // 表达式
- class Expression
- {
- private:
- const static int poland_MAX;
- Atom *poland;
- int poland_N;
- double *var;
- public:
- Expression();
- ~Expression();
-
- const char *GetExprErrorStr(int err); // 根据错误码返回对应的错误提示
- const char *GetResultErrorStr(int err); // 根据错误码返回对应的错误提示
- int SetExprStr(const char *exprStr); // 设置表达式,在内部生成逆波兰式表达式,成功返回0,失败返回非零错误码
- void SetVar(char x, double value); // 设置变量x值为value
- int GetResult(double *result); // 根据设置的变量和上一次设置的表达式获取表达式的值放入result,成功返回0,错误返回非零
- const Atom *GetPoland();
- };
- }
|