Разбор шестнадцатеричных и двоичных чисел - PullRequest
0 голосов
/ 21 мая 2018

Я использую Boost Spirit для анализа некоторых сложных выражений, таких как "0b111 << (0x111 + 1) * ....", проблема в синтаксическом анализе значений hex и bin, синтаксический анализатор обнаружил 0 перед 'b' илисначала «x» и принимает его как num, но я хочу взять «0b1111».Пытался это сделать, но эффекта нет. </p>

            ............
            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 голосов
/ 21 мая 2018

Нашел ответ, только что заменил эти строки

        num =
        qi::uint_                           [ qi::_val =    qi::_1  ]
        |   hexOrBinNum                     [  qi::_val =   qi::_1  ]
        ;

на

        num =
        hexOrBinNum                       [  qi::_val =   qi::_1  ]
        |   qi::uint_                     [  qi::_val =   qi::_1  ]
        ;
...