Pregunta

Soy nuevo en Boost.Spirit y Boost.Test y me gustaría saber cómo verificas la corrección de tus gramáticas. A continuación se muestra una versión simplificada de cómo lo hago en este momento y estoy bastante seguro de que hay una mejor manera:

Cada caso de prueba tiene un par de dos cadenas que contienen el texto a analizar y el resultado esperado delimitado por punto y coma.

Las funciones de análisis realiza el análisis real y devuelve una cadena que debería ser igual al resultado esperado.

 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()
¿Fue útil?

Solución

En general, su enfoque me parece bien. Probablemente agruparía la clase de pruebas en función con nombres descriptivos, p. TestInvalidGrammar, TestErrorHandling, TestNestedGrammar, etc. y tienen los llamados desde el principal.

Estoy seguro de que ha leído la documentación, pero eche un vistazo a ejemplos si ayuda.

Otros consejos

Aquí puede ver cómo ellos (los autores del espíritu de impulso) prueban sus propios analizadores: http://svn.boost.org/svn/boost/trunk/libs/spirit/test/qi/grammar.cpp . Para cada parte de qi puede encontrar un archivo C ++ aquí: http : //svn.boost.org/svn/boost/trunk/libs/spirit/test/qi/ .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top