设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 编程开发 >> Visual C++ >> 表达式求值(上)
精品推荐
Visual C++点击TOP10
·用WINSOCK实现聊天室的VC++程序设计
·利用mfc编写activex控件
·用vc实现生产者消费者问题
·DirectX8.0
·C/C++ 大量经典编程书籍下载
·VC快捷键大全
·CreateFileMapping的MSDN翻译和使用心得
·Windows环境下的麦克风录音系统
·挂钩Windows API
·如何开发OPC Server
编程开发点击TOP10
·数字小键盘指法练习
·用C语言编通讯录程序(初学者级别的)
·ASP.NET 程序中常用的三十三种代码
·我写的Java学生成绩管理系统源代码
·CHK文件恢复工具
·java笔试题
·Modem 常用AT指令集
·异常java.sql.SQLException: Io exception:The Network Adapter could not establish connection
·单片机模拟I2C总线及24C02(I2C EEPROM)读写实例(源代码)
·C++经典电子书下载
精选专题

表达式求值(上)

作者: 来源:网络文章 时间:2005-12-13 17:20:18

表达式求值(上)(1) /*  功能:计算包含变量及函数的表达式
     2>变量之间允许有表达式约束 
使用说明:
 1>用户使用的函数为bool CEXPression::CalExp()
 double m_dResult; file://计算得数
 char* m_strExp;  file://表达式字符串
 CVarList  m_VarList; file://变量表
 bool  m_bDegUnit;  // 缺省采用角度单位
 CVar var1
 出错返回false,      
     2>用户使用该函数前负责初始化变量表
 例如:用户有变量a=10,b=2,c=20.其中c=a*b;
 则用户做如下工作:
 CVar *pVar;
 pVar=new CVar;
 pVar->m_dValue=10;
 pVar->m_strName="a";
 CExpression exp1;
 exp1.m_VarList.AddVar(pVar);
 pVar=new CVar;
 pVar->m_dValue=20;
 pVar->m_strName="b";
 exp1.m_VarList.AddVar(pVar);
 pVar=new CVar;
 pVar->m_dValue=0;
 pVar->m_strName="c";
 pVar->m_strSlave="a*b";
 exp1.m_VarList.AddVar(pVar);
 exp1.m_strExp="a*b+c";
 exp1.CalExp();
 计算出表达式的左值.*
     3>被其他变量约束的变量在变量表中的位置应放在相关变量之后.      */
 

// Expression.h: interface for the CExpression class.XML:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

//

//////////////////////////////////////////////////////////////////////

 

#if !defined(AFX_EXPRESSION_H__2578E33F_FF86_4384_A7CE_A401BAC5A010__INCLUDED_)

#define AFX_EXPRESSION_H__2578E33F_FF86_4384_A7CE_A401BAC5A010__INCLUDED_

 

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

 

#include <list>

#include <string>

 

using namespace std;

#define DELIMITER  1       //分隔符

#define VARIABLE   2       //变量

#define NUMBER          3     //数值

#define FUNCTION   4     //函数

#define PI 3.1415926535898

class CVar  //用来存放变量及变量值的表结构

{

public:

       char  m_cFlag;                      // 等于0为临时变量,否则等于1

       string  m_strName;    //变量名     如变量a

       string  m_strSlave;    //约束表达式,a=b+2

       double m_dValue;       //变量值       10,a=10

public:

       CVar();

       virtual ~CVar();

       void InitVar();

      

};

class CVarList 

{

public:

       list<CVar*> m_VarList;

       CVarList();

       virtual ~CVarList();

      

       bool AddVar(CVar* pVar);

      

};

class CExpression 

{

public:

       double m_dResult;

       char* m_strExp;

       CVarList  m_VarList;

       bool  m_bDegUnit;         // 缺省采用角度单位

protected:

       int m_iErrFlag;          //标记表达式计算是否出错0:正常,1:表达式空2:非法变量或函数3:括号不匹配

       int m_iFunFlag;         //标记当前正在进行函数参数计算.

       int m_iMatchFlag;       //标记括号是否匹配

      

       char m_cTokenType;                //标记符号的类型,如分格符,变量等

       char m_strToken[80];

      

public:

       void Message(const char * strMsg);

       CExpression();

       virtual ~CExpression();

      

       bool CalExp();

       bool  UpdateSlaveVar();       

      

protected:

       bool GetToken();

       void Error();

       bool IsDelim(char c);

       bool IsFunc(const char *fname);

       bool IsWhite(char c);

       bool IsInStr(char ch,char *s);

       bool Level1(double *result);

       bool Level2(double *result);

       bool Level3(double *result);

       bool Level4(double *result);

       bool Level5(double *result);

       bool Level6(double *result);

       bool Level7(double *result);

       bool GetFunIndex(const char *name,int *index);

       void PutBack();

       void Unary(char o,double *r);

       bool Arith(char o, double *r, double *h);

       bool Primitive(double *result);

       bool GetVarValue( const char * n, double * result );

       bool GetVarIndex( const char * name, int * index );

};

#endif // !defined(AFX_EXPRESSION_H__2578E33F_FF86_4384_A7CE_A401BAC5A010__INCLUDED_)

 

共2页 9 7 [1] [28 :>

表达式求值(上) 相关文章:
表达式求值(上) 相关软件:
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
转载请注明来源:http://www.xgdown.com