Вопрос

Я новичок в Boost.Spirit и Boost.Тестируйте, и я хотел бы знать, как вы проверяете правильность ваших грамматик.Ниже приведена упрощенная версия того, как я делаю это на данный момент, и я почти уверен, что есть лучший способ:

Каждый тестовый пример содержит пару из двух строк, содержащих текст для анализа и ожидаемый результат, разделенный точкой с запятой.

Функции синтаксического анализа выполняют фактический синтаксический анализ и возвращают строку, которая должна быть равна ожидаемому результату.

 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()
Это было полезно?

Решение

В целом, ваш подход кажется мне прекрасным.Я бы, вероятно, сгруппировал класс тестов в функцию с описательными именами, напримерTestInvalidGrammar, TestErrorHandling, TestNestedGrammar и т.д.и попросите тех, кто вызван из главного.

Я уверен, что вы читали документацию, но взгляните на примеры если это поможет.

Другие советы

Здесь вы можете увидеть, как они (авторы boost spirit) тестируют свои собственные парсеры: http://svn.boost.org/svn/boost/trunk/libs/spirit/test/qi/grammar.cpp .Для каждой части qi вы можете найти файл C ++ здесь: http://svn.boost.org/svn/boost/trunk/libs/spirit/test/qi/.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top