Таким образом, цель состоит в том, чтобы не допускать символов от 80h до FFh во входной строке. У меня сложилось впечатление, что
using ascii::char_;
позаботится об этом. Но, как вы можете видеть в примере кода, он с радостью напечатает Parsing Successed.
В следующем сообщении списка рассылки Spirit Джоэл предложил разрешить синтаксический анализ этих символов, отличных от ascii, не выполняться. Но я не уверен, продолжал ли он это делать. [Spirit-general] кодировка ascii утверждает неверный ввод.. .
Вот мой пример кода:
#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?
char_(charset)
вариант работает. - person llonesmiz   schedule 07.07.2019