다음 파서가 test
을 구문 분석하지 못하는 이유를 이해하는 데 어려움이 있습니다. qi::phrase_parse
에 대한 호출 후 는 result
는 it2
포인트 문자열의 끝에서 사실이지만, mynr
는 여전히 0 :Boost.Spirit 파서가 일치하지 않습니다
std::string test = "#define SOMEMACRO 8.0";
auto it2 = test.begin();
auto endIt2 = test.end();
double mynr = 0;
bool result =
qi::phrase_parse(
it2,
endIt2,
("#define" >> (*qi::alnum) >> qi::double_[ref(mynr) = qi::_1]),
qi::space);
내가 의심하고는 qi::alnum
과 공간을 건너 뛰는 함께 할 수있는 뭔가가.
개별 구성 요소로 사례를 축소하려고했습니다. 나는 별도로 세 파서를 확인하고 발견 :
이- "#DEFINE는"실제로
(*qi::alnum)
이SOMEMACRO
qi::double_
소비 할 수있는 소비 할 수있다 "#DEFINE를"소비8.0
별도로, 각 구문 분석기는 이상하게 작동하지만 이상하게 작동합니다. 더 작은 시험은 내가 (*qi::alnum)
을 사용할 때 사용하는 것처럼 보였습니다. 단지 SOMEMACRO
이상을 소비하는 것으로 보이지만 나머지 문자열 또한 사용합니다.
나는 그것을 시도를 구문 분석 할 수있어 대신 8.0를 가진 때 실제로 전체 문자열을 소비 않습니다. 그러나 나는 그것이 기대하고있는 것처럼 그것을 파싱한다고 생각하지 않는다. 내 조사 결과를 바탕으로 내 질문을 업데이트했습니다. –
시맨틱 액션은 다음과 같아야합니다 :'[boost :: phoenix :: ref (mynr) = boost :: spirit :: _ 1]'. –
덕분에 여전히 그래도 작동하지 않습니다. 'mynr'은 여전히 0 –