我想知道是否有一种方法可以计算特定语法发生的迭代次数。有效地计算函数的参数数量。
这是使用 boost spirit 库来解析我自己的语法,我正在尝试获取解析器如何使用列表运算符 % 找到的参数数量。
// _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;
最佳答案
您可以在规则中使用局部变量来跟踪子表达式的数量。
首先,您需要在function_call
的定义中指定局部变量:
qi::rule< Iterator, Attribute, SpaceType, qi::locals<int> > function_call;
^
然后在每次匹配子表达式时递增这样的局部变量:
function_call = (function_name > '(' > expr[qi::_a++] % ',' > ')')[add_call(_1, _a)];
^ ^
Here您会找到一个现场演示,其中包含以逗号分隔的整数列表。
关于c++ - 获取迭代次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25852118/