我正在使用boost spirit来解析一些复杂的表达式,例如“0b111<<(0x111 + 1)* ....”,问题是解析十六进制和bin值,语法分析器在'b之前找到0 '或'x'首先将其作为num,但我想采用“0b1111”。 试图这样做,但没有效果。
............
factor =
num [ qi::_val = qi::_1 ]
| '(' >> expr [ qi::_val = qi::_1 ] >>')'
| '-' >> num [ qi::_val = -qi::_1 ]
| '+' >> num [ qi::_val = qi::_1 ]
| '~' >> num [ qi::_val = ~qi::_1 ]
;
num =
qi::uint_ [ qi::_val = qi::_1 ]
| hexOrBinNum [ qi::_val = qi::_1 ]
;
hexOrBinNum =
"0x" >> qi::int_parser<int, 16>{} [ qi::_val = qi::_1 ]
| "0b" >> qi::int_parser<int, 2>{} [ qi::_val = qi::_1 ]
;
答案 0 :(得分:0)
找到答案,只需更换此行
num =
qi::uint_ [ qi::_val = qi::_1 ]
| hexOrBinNum [ qi::_val = qi::_1 ]
;
到
num =
hexOrBinNum [ qi::_val = qi::_1 ]
| qi::uint_ [ qi::_val = qi::_1 ]
;