boost::spirit验证字符串是否符合四则运算规则
1 |
|
解析四则运算表达式,要把EBNF规则写出来:
//实数或者是括号包围的子表达式
real_p | (‘(‘ >> exp >> ‘)’); // 因子 = 实数 | ‘(‘ , 表达式 , ‘)’;
//因子因子或因子/因子,可连续乘除也可只是一个因子
乘除计算 = 因子,{(‘‘,因子)|(‘/‘,因子)};
//加减计算,与上面类似
表达式 = 乘除计算,{(‘+’,乘除计算)|(‘-‘,乘除计算)}; 这个定义已经隐含了优先级:
要计算表达式(加减计算),必然要先计算乘除计算;
要计算乘除计算,就要先计算因子;
要计算因子,要么得到一个数字,要么就要计算括号内的子表达式。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 火苗999℃的博客!