解析十六进制和二进制数

时间:2018-05-21 09:15:24

标签: c++ parsing binary hex boost-spirit

我正在使用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  ]
            ;

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  ]
        ;