使用Boost.Spirit实现四则运算字符串的解析
2009-02-07 17:58
465 查看
摘录自http://www.cpp-prog.com/2009/0121/55_4.html
使用Spirit中的绝大部分都不需要编译,包括下面这个代码,只要包含头文件即可。
使用Spirit中的绝大部分都不需要编译,包括下面这个代码,只要包含头文件即可。
#include <iostream> #include <vector> #include <boost/spirit.hpp> #include <boost/spirit/phoenix.hpp> using namespace std; using namespace boost::spirit; using namespace phoenix; int main() { //为rule准备一个val变量,类型为double //准确地说:是一个phoenix类(这里的member1),它和其它phoenix类组成lambda表达式,在lambda中可以把它看成是一个double。 struct calc_closure : boost::spirit::closure<calc_closure, double> { member1 val; }; //定义ContextT策略为calc_closure::context_t rule<phrase_scanner_t, calc_closure::context_t> factor, term, exp; //直接使用phoenix的lambda表达式作为Actor factor = real_p[factor.val = arg1] | ('(' >> exp[factor.val = arg1] >> ')'); term = factor[term.val = arg1] >> *(('*' >> factor[term.val *= arg1]) | ('/' >> factor[term.val /= arg1])); exp = term[exp.val = arg1] >> *(('+' >> term[exp.val += arg1]) | ('-' >> term[exp.val -= arg1])); const char *szExp = "1 + (2 * (3 / (4 + 5)))"; double result; parse_info<> r = parse( szExp , exp[assign_a(result)], space_p); cout << szExp; if(r.full) { //成功,得到结果 cout << " = " << result << endl; } else { //失败,显示错误位置 cout << endl << string(r.stop - szExp, ' ') << '^' << endl; } return 0; }
相关文章推荐
- java实现字符串四则运算公式解析工具类的方法
- boost::spirit验证字符串是否符合四则运算规则
- java实现字符串四则运算公式解析工具类
- PHP 实现后缀表达式(接受四则运算字符串,输出计算结果,附代码)
- JAVA实现字符串四则运算
- 使用栈实现计算四则运算
- 剑指offer 47----实现一个Add函数,让两个数相加,但是不能使用+、-、*、/等四则运算符。ps:也不能用++、--
- 实现一个Add函数,让两个数相加,但是不能使用+、-、*、/等四则运算符。ps:也不能用++、--等等
- 字符串四则运算表达式的求解(中缀表达式实现,模拟笔算的方法)
- boost-使用format和lexical_cast实现数字和字符串之间的转换
- Java实现四则运算的解析
- C# 解析简单的四则运算字符串,
- boost spirit 解析字符串 (一)
- 大数项目:用字符串表示超过内存表示范围的大数据并实现四则运算
- 大数字符串的四则运算之加法----Java代码实现
- 面试题45:字符串四则运算的实现
- 实现一个add()函数-两数相加(不能使用四则运算以及++--)
- 算法--两种方法实现一个Add函数,让两个整数相加,但是不能使用+、-、*、/等四则运算符。
- 大数的运算实现(C++、字符串)、Git使用示例
- Boost实现将字符串按格式解析到数组的功能