我想知道是否有办法计算特定语法的迭代次数。有效地计算函数的参数数量。
这是使用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;
答案 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你会发现一个带有逗号分隔的整数列表的现场演示。