Saya mencoba mengurai ekspresi aditif dalam bentuk "A+C", atau "A" saja. Setelah beberapa tes saya menyadari bahwa masalahnya tampaknya saya menggunakan parser opsional, jadi sebagai contoh:
qi::rule<string::iterator, string()> Test;
Test =
(
qi::string("A")[qi::_val= qi::_1]
>> -(
qi::string("B")[qi::_val += qi::_1]
>> qi::string("C")[qi::_val += qi::_1]
)
)
;
string s1, s2;
s1 = "AB";
bool a= qi::parse(s1.begin(), s1.end(), Test, s2);
Idenya adalah untuk mengurai 'A' atau "ABC", tetapi jika nilai s1 adalah "AB" tanpa 'C', maka nilai a benar. Saya yakin meskipun saya memberi tanda kurung setelah operator '-' dan kemudian saya menggunakan operator ">>", bagian 'C' dianggap opsional, dan bukan B>>C secara keseluruhan. Ada ide?