Таким образом, цель состоит в том, чтобы не допускать символы от 80h до FFh во входной строке.У меня сложилось впечатление, что
using ascii::char_;
позаботится об этом.Но, как вы можете видеть в примере кода, он с радостью распечатает успешный синтаксический анализ.
В следующем сообщении списка рассылки Spirit Джоэл предложил разрешить синтаксический анализ этих символов, отличных от ascii.Но я не уверен, что он поступил так. [Spirit-general] кодировка ascii assert на неверном вводе ...
Вот мой пример кода:
#include <iostream>
#include <boost/spirit/home/x3.hpp>
namespace client::parser
{
namespace x3 = boost::spirit::x3;
namespace ascii = boost::spirit::x3::ascii;
using ascii::char_;
using ascii::space;
using x3::lexeme;
using x3::skip;
const auto quoted_string = lexeme[char_('"') >> *(char_ - '"') >> char_('"')];
const auto entry_point = skip(space) [ quoted_string ];
}
int main()
{
for(std::string const input : { "\"naughty \x80" "bla bla bla\"" }) {
std::string output;
if (parse(input.begin(), input.end(), client::parser::entry_point, output)) {
std::cout << "Parsing succeeded\n";
std::cout << "input: " << input << "\n";
std::cout << "output: " << output << "\n";
} else {
std::cout << "Parsing failed\n";
}
}
}
Как изменить пример, чтобы Spirit был настроен напотерпеть неудачу на этом неверном вводе?
Кроме того, но очень тесно связано, я хотел бы знать, как я должен использовать синтаксический анализатор символов, который определяет кодировку char_set.Вы знаете char_(charset)
из Документы X3: синтаксические анализаторы разрабатывают ветку .
В документации так не хватает, чтобы описать основные функции.Почему люди из высшего руководства не могут заставить авторов библиотек приходить с документацией хотя бы на уровне cppreference.com?