版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国物流仓储配送行业市场现状分析及投资发展评估规划分析研究报告
- 2026冷链物流设施建设布局优化运输时效成本效益评估分析报告
- 2027届广东省惠州市惠东县平山街道数学四上期末统考模拟试题含解析
- 跨国租赁中跨国承租人算力使用权边界-基于国际数字资产租赁协会算力To ken租赁使用权法律边界指南规范分析
- 2027届安徽省淮南市八公山区六年级数学第一学期期末考试模拟试题含解析
- 辽宁省盘锦市大洼县2027届数学六年级第一学期期末联考模拟试题含解析
- 2027届凉山彝族自治州冕宁县三年级数学第一学期期末质量检测试题含解析
- 药物研发中试阶段环境影响评价报告
- 新型储能项目调试工程施工组织设计
- 数字电子技术基础与技能培训教材
- 2026年电子商务运营推广策略方案
- JBT 14828-2025 土方机械行业绿色工厂评价导则标准立项发展报告
- 2026年金融机构反洗钱和反恐怖融资监督管理办法竞赛考试题(新版题库)
- 2026-2030中国二乙烯苯行业发展态势及前景分析预测研究报告
- (2026年度)领导干部任前应知应会党内法规和法律知识考试题库及答案
- 2025年文物保护工程从业资格考试(责任工程师古建筑)复习题及答案
- 2026年南外今年入学测试题及答案
- 2026人教版六年级语文上册必背内容
- 近5年高考英语真题高频词汇短语800词(全国卷新高考可直接打印版)
- 2026全球柔性电子技术突破与商业化应用前景分析报告
- 2026年产教融合实训基地建设方案
评论
0/150
提交评论