Я пытаюсь проанализировать этот тип строки
1.2e3ex
1.2e3 ex
И настроил
x3::float_ >> "ex"
К сожалению, это не удается проанализировать
1ex
Полный пример кода:
#include <iostream>
#include <boost/spirit/home/x3.hpp>
namespace x3 = boost::spirit::x3;
const auto parser = x3::float_ >> "em";
int main()
{
std::string input = "1em";
auto first = input.begin();
auto last = input.end();
float value{};
bool result = x3::phrase_parse(first, last, parser, x3::blank, value);
if(result)
{
if(first == last)
std::cout << "parse succesful: " << value << '\n';
else
std::cout << "incomplete parse: " << value << '\n';
}
else
std::cout << "parse unsuccesful\n";
}
Доступен в прямом эфире на Coliru .
Кажется, мне нужно прыгнуть через несколько обручей,
struct non_scientific_float_policy : x3::real_policies<float>
{
template <typename Iterator>
static bool parse_exp(Iterator& first, Iterator const& last)
{
return false;
}
};
const auto non_scientific_float = x3::real_parser<float, non_scientific_float_policy>{};
и предоставляют альтернативу :
const auto parser = non_scientific_float >> "em" | x3::float_ >> "em";
Нет другого пути?