获取迭代次数?

时间:2014-09-15 15:56:58

标签: c++ boost-spirit-qi boost-phoenix

我想知道是否有办法计算特定语法的迭代次数。有效地计算函数的参数数量。

这是使用boost精神库来解析我自己的语法,我试图了解解析器使用列表运算符%找到的参数数量。

// _1 is string of function, is there a "_1" equivalent to get number of exprs
function_call = (function_name > '(' > expr % ',' > ')')[add_call(_1, _? /* todo */)]; 
expr = function_call | variable;

1 个答案:

答案 0 :(得分:1)

您可以在规则中使用局部变量来跟踪子表达式的数量。

首先,您需要在function_call的定义中指定局部变量:

qi::rule< Iterator, Attribute, SpaceType, qi::locals<int> > function_call;
                                          ^

每次匹配子表达式时,都会增加这样的局部变量:

function_call = (function_name > '(' > expr[qi::_a++] % ',' > ')')[add_call(_1, _a)]; 
                                            ^                                   ^

Here你会发现一个带有逗号分隔的整数列表的现场演示。