资源简介
新版本
修正了上一版本的某些bug,减少了全局变量的使用,
并增加对变量引用的判断,以在格式化公式组时确定变量的引用情况,确定是否释放公式组中的变量,对内存中公式删除时不会再产生野指针
本组建主要用于在程序中解析预先编写的类C脚本,并依据脚本执行,可通过调用外部指针函数读入输入变量执行计算,最终得出计算结果写入输出变量中;用户可通过读取输出变量获取最终的结果。
脚本中可调用函数,函数分为系统函数和自定义函数两种;系统函数可直接调用;自定义函数需在脚本中自行定义
代码片段和文件信息
#include
#include “ext_code_struct.h“
/** if */
CVarStruct * CCodeStruct_IF::proc_code_stuct(bool& bReturnFlag) {
CParamList *pParamList = this->pCParamList;
CVarStruct *pVarStruct = pParamList->get_param()->deal_param();
if ((long) atof(pVarStruct->get_value())) {
pParamList->pNext->get_param()->deal_param();
} else {
CParamList *p = pParamList->pNext->pNext;
while (NULL != p) {
if (NULL != p->pNext) {/* 存在 else if 子句 */
CVarStruct *pVar = p->get_param()->deal_param();
if ((long) atof(pVar->get_value())) {
p->pNext->get_param()->deal_param();
break;
} else if (p->pNext->pNext) {
p = p->pNext->pNext;
}
} else {
p->get_param()->deal_param();
break;
}
}
}
return NULL;
}
/** while */
CVarStruct * CCodeStruct_WHILE::proc_code_stuct(bool& bReturnFlag) {
CParamList *pParamList = this->pCParamList;
while ((long) atof(pParamList->get_param()->deal_param()->get_value()) != 0) {
pParamList->pNext->get_param()->deal_param();
}
return NULL;
}
/** user_def_function */
CVarStruct * CCodeStruct_UFunc::proc_code_stuct(bool& bReturnFlag) {
*pResValue = *(pCUseFunc->process(this));
return this->pResValue;
}
/** 附值语句 */
CVarStruct * CCodeStruct_Asign::proc_code_stuct(bool& bReturnFlag) {
CVarStruct *pVarStruct = this->pCParamList->get_param()->deal_param();
this->pResValue->copy(*pVarStruct);
return this->pResValue;
}
/* 数值计算的codestruct类 */
CVarStruct * CCodeStruct_Cal::proc_code_stuct(bool& bReturnFlag) {
CVarStruct *pPara1 = pCParamList->get_param()->deal_param();
CVarStruct *pPara2 = pCParamList->pNext->get_param()->deal_param();
char *str1 *str2;
double f_num1 f_num2;
if (StringK == pPara1->get_var_kind())
str1 = pPara1->get_value();
else
f_num1 = atof(pPara1->get_value());
if (StringK == pPara2->get_var_kind())
str2 = pPara2->get_value();
else
f_num2 = atof(pPara2->get_value());
switch (this->op) {
case PLUS:
if ((StringK == pPara1->get_var_kind() && StringK == pPara2->get_var_kind())) {//字符串相加
if (NULL != pResValue->get_value())
delete pResValue->get_value();
char * sStr = new char[strlen(str1) + strlen(str2) + 1];
sprintf(sStr “%s%s“ str1 str2);
pResValue->set_value(sStr);
} else if ((StringK == pPara1->get_var_kind() && FloatK == pPara2->get_var_kind())) {
pResValue->set_value(str1 + (int) ceil(f_num2));
} else if ((StringK == pPara2->get_var_kind() && FloatK == pPara1->get_var_kind())) {
pResValue->set_value(str2 + (int) ceil(f_num1));
} else {
pResValue->set_value(f_num1 + f_num2);
}
break;
case MINUS:
pResValue->set_value(f_num1 - f_num2);
break;
case MULTIPLY:
pResValue->set_value(f_num1 * f_num2);
break;
case DIVIDE:
if (fabs(f_num2) < 0.000001)
exit(1);
else
pResValue->set_value(f_num1 / f_num2);
break;
}
return pResValue;
}
/* 比较计算的codestruct类 */
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 870 2008-12-17 17:47 formula c++\Debug\my.cfg
文件 870 2008-12-17 17:47 formula c++\formula\Debug\my.cfg
文件 5778 2008-12-24 14:25 formula c++\formula\ext_code_struct.cpp
文件 2772 2008-10-23 12:13 formula c++\formula\ext_code_struct.h
文件 2948 2008-12-22 15:37 formula c++\formula\factory_code_struct.h
文件 3773 2008-12-24 14:27 formula c++\formula\formula.cpp
文件 2806 2008-12-23 17:44 formula c++\formula\formula.h
文件 1111 2008-12-24 14:26 formula c++\formula\formula_group.cpp
文件 532 2008-12-24 14:25 formula c++\formula\formula_group.h
文件 9794 2008-12-24 14:38 formula c++\formula\formula_public.h
文件 1137 2008-12-23 10:44 formula c++\formula\main.cpp
文件 21238 2008-12-23 17:47 formula c++\formula\parse.cpp
文件 3182 2008-12-22 09:26 formula c++\formula\parse.h
文件 272 2008-06-24 11:29 formula c++\formula\singleton.h
文件 6490 2008-12-24 14:39 formula c++\formula\sys_func_code_struct.h
文件 2884 2008-12-18 11:42 formula c++\formula\user_func.h
文件 4184 2008-08-19 11:09 formula c++\formula\util.cpp
文件 490 2008-08-19 11:09 formula c++\formula\util.h
目录 0 2009-01-12 18:24 formula c++\formula\Debug
目录 0 2009-01-12 18:24 formula c++\Debug
目录 0 2009-01-12 18:24 formula c++\formula
目录 0 2009-01-12 18:24 formula c++
----------- --------- ---------- ----- ----
71131 22
- 上一篇:五子棋小游戏含注释
- 下一篇:C++ QT SMTP 发送邮件(最新,成功的)
相关资源
- 如何在keil中查看程序执行时间
- 操作系统的理发师问题解决文件打包
- VC++6.0实现读取硬盘唯一序列号源码和
- C语言课程设计--商场商品信息管理系
- 宿舍管理系统C语言源代码与可执行文
- p2p的C语言编写,LINUX可执行程序+运行
- c++多线程的创建挂起执行与销毁
- 蚂蚁算法MFC实现执行文件
- 基于c语言的图形图像处理源代码完整
- c++ 获取当前执行位置的调用栈
- 将音视频文件转换为rtsp流(live555 媒
- Ftp客户端连接服务器(源码+可执行文
- C++实战源码-修改可执行文件中的资源
- C++ 列举系统中的可执行文件
- C++ 使用WAITFOR语句延期执行语句
- 大型稀疏矩阵运算库SuiteSparse vs2010通
- C++ 在Visual C++中执行事务
- C++ 使用WHILE语句执行循环语句块
- C++ 使用WebBrowser执行脚本
- 动态执行post请求来的php代码(仅一行
- 课程设计:模拟Linux文件系统(源码
- 课程设计:FTP客户端源代码实现(源码
- 数据库实现的交通管理信息系统
- 基于c++的学生信息管理源代码可执行
评论
共有 条评论