2014-09-15 7 views
0

특정 문법에 대해 반복 횟수를 세는 방법이 있는지 궁금합니다. 함수에 대해 얼마나 많은 매개 변수가 있는지를 효과적으로 계산합니다.반복 횟수 가져 오기?

이것은 내 자신의 구문을 구문 분석하는 데 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; 
+0

varargs를 찾으십니까? 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을 ' 쉼표로 구분 된 정수 목록이있는 라이브 데모를 찾습니다.