ฉันกำลังพยายามแยกวิเคราะห์นิพจน์เพิ่มเติมในรูปแบบ "A+C" หรือ "A" เพียงอย่างเดียว หลังจากการทดสอบไม่กี่ครั้ง ฉันก็พบว่าปัญหาอยู่ที่การใช้ parser เผื่อเลือก ดังนั้นขอยกตัวอย่าง:
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);
แนวคิดคือการแยกวิเคราะห์ 'A' หรือ "ABC" แต่ถ้าค่า s1 เป็น "AB" โดยไม่มี 'C' ค่าของ a จะเป็นจริง ฉันเชื่อว่าแม้ว่าฉันจะใส่วงเล็บไว้หลังโอเปอเรเตอร์ '-' แล้วฉันก็ใช้โอเปอเรเตอร์ ">>" แต่ส่วน 'C' ก็ถือว่าเป็นทางเลือก ไม่ใช่ B>>C โดยรวม มีความคิดอะไรบ้าง?