Я новичок в Boost.Spirit и Boost.Test, и я хотел бы знать, как вы проверяете правильность ваших грамматик. Ниже приведена упрощенная версия того, как я это делаю в настоящее время, и я уверен, что есть лучший способ:
В каждом тестовом примере есть пара из двух строк, содержащих текст для анализа и ожидаемый результат, разделенный точками с запятой.
Функции разбора выполняют фактический анализ и возвращают строку, которая должна быть равна ожидаемому результату.
std::string parse(std::string const & line) {
std::string name;
int hours;
rule<> top_rule = ... ; // rule assignes values to 'name' and 'hours'
parse_info<> info = parse(line.c_str(), top_rule);
if(info.full) {
std::stringstream sstr;
sstr << name << ";" << hours;
return sstr.str();
}
return "parser failed.";
}
BOOST_AUTO_TEST_SUITE( TestSuite )
BOOST_AUTO_TEST_CASE( TestCase ) {
BOOST_CHECK_EQUAL(parse("Tom worked for 10 hours."), "Tom;10");
}
BOOST_AUTO_TEST_SUITE_END()