Мне трудно понять, почему следующий синтаксический анализатор не может проанализировать test
. После вызова qi::phrase_parse
, result
истинно, it2
указывает на конец строки, но mynr
по-прежнему 0:
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" действительно потребляет "#define"
(*qi::alnum)
может потреблятьSOMEMACRO
qi::double_
может потреблять8.0
По отдельности каждый парсер работает нормально, но вместе взятые в приведенной выше форме работают странно. Дальнейшие небольшие тесты, казалось, показали мне (*qi::alnum)
, когда я использую его так, как я использую, кажется, что он потребляет больше, чем просто SOMEMACRO
, но и остальная часть строки тоже.