다음 코드를 실행하면 충돌이 발생합니다. 왜? boost :: spirit :: multi_pass가 술어와 대안으로 충돌합니다.
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/support_multi_pass.hpp>
using namespace boost::spirit;
typedef multi_pass<
std::string::const_iterator,
iterator_policies::default_policy<
iterator_policies::first_owner,
iterator_policies::no_check,
iterator_policies::buffering_input_iterator,
iterator_policies::split_std_deque>>
string_mp_iterator;
int main() {
std::string input = "234";
string_mp_iterator input_begin(input.begin()),
input_end((string_mp_iterator()));
qi::rule<string_mp_iterator, boost::variant<int, double>()> r =
&qi::lit('1') >> qi::int_ | qi::double_;
qi::parse(input_begin, input_end, r);
return 0;
}
내가
multi_pass
반복자를 사용하는 것으로, 술어 및 후속 대안 모두가 필요 보인다 충돌을 재현하고, 입력을 할 수있는 조건을 만족하지합니다.
내가 여기 어떻게 든 multi_pass
을 잘못 사용하고 있다는 느낌이 들지만 문제가 정확히 무엇인지 알 수 없습니다.
2 진수와 정수를 신뢰할 수있는 구문 분석하려고합니까? https://stackoverflow.com/search?q=strict_real_policies – sehe
을 찾으십시오. 이것은 가능한 한 간단하게 유지하려고하는 예제입니다. 그럼에도 불구하고 이것은 다른 곳에서도 유용 할 것입니다. 감사! –
이것이 정의되지 않은 행동의 본질입니다. 결과가 정의되어 있지 않기 때문에 추론 할 수 없습니다. – sehe