2014-09-15 5 views
0

Мне было интересно, есть ли способ подсчитать количество итераций, которые происходят для определенной грамматики. Эффективно подсчитывать, сколько параметров было бы для функции.Получить количество итераций?

Это использование библиотеки 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

Вы ищете варгары? valist, va_start(), va_end(), va_arg()? – Octopus

+0

@Octopus Это для парного синтаксического ци. Попытка получить количество параметров, которое находит парсер. Извините, если я не сделал это достаточно ясно. – user3901459

ответ

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 вы» Вы найдете живую демонстрацию с разделенным запятыми списком целых чисел.