版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、图2le1.cpp中的图2le1.cpp中的Calc()value_type vVarVal = 1, 2 ; / Values of the parser variables parser.DefineVar(_T(a),&vVarVal0); /AssignVariablenamesandbindthemtothe C+parser.DefineVar(_T(b), &vVarVal1);/定义变量 parser.DefineStrConst(_T(strBuf), _T(oworld);/定义字符常量/Adduserdefinedunaryoperatrs定义一元运算符 tfixOprt
2、(_T(M), Mega); tfixOprt(_T(m), Milli); parser.DefineInfixOprt(_T(!), Not);parser.DefineFun(_T(strfun0StrFun0,false第1节muParser公式库一muParser的le的窗1muparser_T( o)是一个宏,Unicode_T( o)是一个宏,UnicodeWindows使用两种字符集ANSIUNICODE,前者就是通常使用的单字节方况。而后者是双字节方式,方便处理双字节字符。WindowsNT的所有与字符有关的函数都提供两种方式的版本,而Windows 9x 只支持ANSI 方
3、式。如果你编译一个程序为ANSI方式,_T在图 1 中输入:a+b,系统 会自动计算出ans = 3,表示表达式a+b 的函数值;假如输入系统不存在的变量a1,系统会自动创建,并会分配其初始值为对a1二1.cpp源码_T解parser.DefineFun(_T(strfun2),StrFun2,false); , false);parser.DefineFun(_T(rnd), Rnd, false);/Addanunoptimizeablefunction parser.DefineFun(_T(throw), ThrowAnException);parser.DefineOprt(_T(a
4、dd),Add,parser.DefineOprt(_T(mul),Mul,/ These are service and debug functions parser.DefineFun(_T(debug), Debug); parser.DefineFun(_T(selftest),SelfTest); parser.DefineFun(_T(help), Help); oUNICODE方式保存。_T和的区别在于,_LUNICODEo 在ansi的环境下,它是ansi的,如果在unicode oUNICODE方式保存。_T和的区别在于,_LUNICODEo 在ansi的环境下,它是ansi
5、的,如果在unicode双字节字符串,既unicode 编码。这样做的好处,不管是ansi 环境,还是 unicode 环境,都适用。在vc+中的字符串_T(ABC)和一个普通的字符串 “ABC”的什么区别。_T(ABC)unicodeLABC,每个字符为 16 位,宽字符字符串ifnot 它就是ascii的ABC8ABCascii字符串#ifdef#define_T(ABC)#define_T(ABC) 三 图3 图3 #ifdef / parser.EnableDebugDump(1,0); / Define the variable factory parser.SetVarFactor
6、y(AddVariable,&parser);string_type sLine; std:getline(mu:console_in(),sLine);switch(CheckKeywords(sLine.c_str(),case 0: case 1: case-1: if(!sLine.length() mu:console()/ There are multiple ways toretrievethe/1.)Ifyouknowthereisonlyasinglereturnvalueorincaseyouonlyneed the lastresult of anconsisting o
7、fcomma separatedssimply mu:console()_T(ans=) parser.Eval()1)mu:console() _T(Multiple returnvaluesdetected!/thisis the hard way ifyou needto retrieve multiple /value_type *v = parser.Eval(nNum); mu:console() std:setprecifor (i=0; inNum; +i)mu:console() vi leUsing muparser is pretty straightforward as
8、 you can seehe following exle.leUsing muparser is pretty straightforward as you can seehe following exle.The le defines a parser variables (a) and adds a user defined functions named MyFunc. When using the parser make suret you dont fet to catchexceptions of type Parser:exception_type.#include #incl
9、ude / Function callback doubleMySqr(doublea_fVal)return / mainargc, char* usingnamespace doublefVal=1; p.DefineVar(a, &fVal); p.DefineFun(MySqr, MySqr); for(std:size_ta=0;a100; fVal=a; /Changevalueofvariablea std:cout p.Eval() std:endl;catch(Parser:exception_type std:cout e.GetMsg() return 4 分类: 2mu
10、Parser 当前版本分类: 2muParser 当前版本编译成共享库,可以使用其它语言调用,下面主要介绍C接口方式使用该库,本文大部分例子都是muParser库中自带的,也包括本人使用过程中的一点点心得。一、初始化公式#includemuParserHandle_thParsermupCreate();/二、设置muChar_t , 这里 三、计算muFloat_tfVal =fVal= 计算公式中的数值类都是以浮点处理的,其实就是double四公式对mupDefineStrConst(hParser,strBuf,Hallo 如:a=strBufstrBuf的值赋给变量a,当然它要求amu
11、pDefineStrConst(hParser,strBuf,Hallo 如:a=strBufstrBuf的值赋给变量a,当然它要求amupDefineConst(hParserconst11表示定义一个名为const11muFloat_tmupDefineVar(hParser,a,或改变变量a的值,注意如果你要全局使用自定的变量a不能将变量var六.typedefmuFloat_ttypedefmuFloat_t(*muFun2_t)(muFloat_t,typedefmuFloat_t(*muFun3_t)(muFloat_t,muFloat_t,typedefmuFloat_t(*mu
12、Fun4_t)(muFloat_t,muFloat_t,muFloat_t,typedefmuFloat_t(*muFun5_t)(muFloat_t,muFloat_t,muFloat_t,muFloat_t,typedefmuFloat_t(*muMultFun_t)(constmuFloat_t*,typedefmuFloat_t(*muStrFun1_t)(consttypedefmuFloat_t(*muStrFun2_t)(constmuChar_t*,typedefmuFloat_t(*muStrFun3_t)(constmuChar_t*,muFloat_t,分为三大类,即固定
13、数值参数的函数(1234typedefmuFloat_t(*muStrFun3_t)(constmuChar_t*,muFloat_t,分为三大类,即固定数值参数的函数(12345个数值参数),API_EXPORT(void)mupDefineFun1(muParserHandle_ta_hParser,const*a_szName,muFun1_ta_pFun,muBool_tAPI_EXPORT(void)mupDefineFun2(muParserHandle_ta_hParser,const*a_szName,muFun2_ta_pFun,muBool_tAPI_EXPORT(void
14、)mupDefineFun3(muParserHandle_ta_hParser,const*a_szName,muFun3_ta_pFun,muBool_tAPI_EXPORT(void)mupDefineFun4(muParserHandle_ta_hParser,const*a_szName,muFun4_ta_pFun,muBool_tAPI_EXPORT(void)mupDefineFun5(muParserHandle_ta_hParser,const*a_szName,muFun5_ta_pFun,muBool_ter(muFloat_treturnmuFloat_tAdd(mu
15、Float_ta,muFloatreturner0);/ mupDefineFun2(hParser,“add”,Add,API_EXPORT(void)mupDefineStrFun1(muParserHandle_ta_hParser,er0);/ mupDefineFun2(hParser,“add”,Add,API_EXPORT(void)mupDefineStrFun1(muParserHandle_ta_hParser,const*a_szName,muStrFun1_tAPI_EXPORT(void)mupDefineStrFun2(muParserHandle_ta_hPars
16、er,const*a_szName,muStrFun2_tAPI_EXPORT(void)mupDefineStrFun3(muParserHandle_ta_hParser,const*a_szName,muStrFun3_tmuFloat_thex(constmuChar_t*len=ret,tmp,if(len=returnfor(i = 0;i =0&stri=a&stri=A&tmp=stri-returnret=(ret=A&tmp=stri-returnret=(ret4)|returnmupDefineStrFun1(hParser,“hex”,: API_EXPORT(voi
17、d)mupDefineMultFun(muParserHandle_tconstmuChar_t*muMultFun_tmuBool_tdoubleSum(constdoubledoublefor(i=0; i fRes += returnmupDefineMultFun(hParser,“sum”,sum,七、定义运算操作符(非常有新意的功能完全可以实现C中的按位运算(&|for(i=0; i fRes += returnmupDefineMultFun(hParser,“sum”,sum,七、定义运算操作符(非常有新意的功能完全可以实现C中的按位运算(&|,自加减运算itAnd(doubl
18、ea,)returnitOr(doublea,)returnitXor(doublea,)returnitNot(doublereturndoubleShll(doublea, returnitNot(doublereturndoubleShll(doublea, )returndoubleShlr(doublea,)returnmupDefineOprt(hParser,&,BitAnd,2,mupDefineOprt(hParser,|,BitOr,2,mupDefineOprt(hParser,bxor,BitXor,2,mupDefineInfixOprt(hParser,BitNot
19、,mupDefineOprt(hParser,Shlr,3, 还有一些BUG量之间添加空格可以暂时解决这个问题,如(a&b8)bxor(a|b),Shlr,3, 还有一些BUG量之间添加空格可以暂时解决这个问题,如(a&b8)bxor(a|b)ValidOprtChars(),strTok,strTok=,funmap_type:const_iteratoritem=m_pOprtDef-iEnd=ExtractToken(m_pParser-ValidOprtChars(),strTok,if )returnfunmap_type:const_iteratoritem=m_pOprtDef-
20、 returna_Tok.Set(item-second,if(m_iSynFlags&/ Anoperatorwasfoundbutisnot expectedtooccur/ itionoftheformula,maybeitisan /operator,not abinaryoperator.Bothoperator/canshareheirif(IsInfixOpTok(a_Tok)return/ nope, noinfix , =m_iSynFlags=noBC|noOPT MA |TOP |noEND|/ nope, noinfix , =m_iSynFlags=noBC|noOPT MA |TOP |noEND|noBC|re
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 引产患者出院健康教育
- 粤教沪科版九年级物理上册第十一章机械功与机械能11-3如何提高机械效率第2课时测算滑轮组的机械效率教学课件
- plct字路口课程设计
- 东南西北课程设计
- 人教版九年级物理第二十章电与磁第1节磁现象磁场第2课时磁场教学课件
- 中东铁路研学课程设计
- 法制讲坛广播稿范文(3篇)
- 减压训练营对缓解小学生心理压力的干预研究
- 银行风险管理心得体会【7篇】
- Module10Unit1Youshouldtidyyourtoys(课件)(一起)英语五年级上册
- DBJT13-336-2020 城市轨道交通运营期结构安全监测技术规程
- 《教师专业发展》课件
- 农业气象灾害
- R-CNN系列学习资料课件
- ECG心电图的解读课件
- 《中国历史》第三册
- 物业管理服务接管方案
- 家长会 课件(共44张ppt) 九年级上学期
- 医师定期考核 简易程序 练习及答案
- 冰雪之都冰城哈尔滨旅游宣传风土人情城市介绍PPT图文课件
- 北京科技大学第二批非教学科研岗位招考聘用模拟试卷【共500题附答案解析】
评论
0/150
提交评论