두 줄로 된 기호가 있는지 확인해야합니다. 예를 들어 "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 출력은 비교하지 않아야합니다.