2012-12-18 1 views
2

두 줄로 된 기호가 있는지 확인해야합니다. 예를 들어 "1 + 1 * 2"는 괜찮지 만 "1 ** 2 + 3"또는 "--1 + 4 * 3"은 없어야합니다. 정신 계산의 일부를 예로 들어 보겠습니다.정신으로 두배로 된 기호 확인 :: qi

 expression = 
      term[_val=_1] 
      >> *( ('+' >> term[_val+=_1]) 
        | ('-' >> term[_val-=_1]) 
       ); 

     term = 
      factor[_val=_1] 
      >> *( ('*' >> factor[_val*=_1]) 
       | ('/' >> factor[_val/=_1]) 
       ); 

     factor = 
      double_[_val=_1] 
      | '(' >> expression[_val=_1] >> ')' 
      | ('-' >> factor[_val=_1]) 
      | ('+' >> factor[_val=_1]); 

phrase_parse는 "1 +++ 1"또는 "1 ** - 1"과 같은 표현식에서 true를 반환합니다. 나는 이런 반복을 사용하려고했다 :

 term = 
      factor[_val=_1] 
      >> *( (repeat(0)[char_('*')] >> factor[_val*=_1]) 
       | ('/' >> factor[_val/=_1]) 
       ); 

그러나 그것은 도움이되지 않는다. 내가 그리워? 감사합니다. .

편집 : 답변을 찾았습니다. phrase_parse 다음에 문자열 itrators를 비교해야하지만 phrase_parse 출력은 비교하지 않아야합니다.

답변

0

답변을 찾았습니다. phrase_parse 다음에 문자열 itrators를 비교해야하지만 phrase_parse 출력은 비교하지 않아야합니다.

0

이 경우 'factor는 재귀 적으로 +를 받아들이므로'1 +++++ 1 '이 올바르게 구문 분석됩니다 (단항 +/-가 될 수 있음).

분할이 최대

factor = ('-' >> value[_val=-_1]) 
     | ('+' >> value[_val= _1]) 
     | value [_val = _1]; 
    value = double_ | '(' >> expression >> ')'