Невозможно сделать грамматику из правила в boost :: spirit :: qi - PullRequest
0 голосов
/ 09 января 2012

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

Вот суть моей проблемы:

#include <boost/spirit/home/qi.hpp>
using boost::spirit::qi::ascii::space_type;
using boost::spirit::qi::grammar;
using boost::spirit::qi::phrase_parse;

template<typename P>
bool test_parser(char const* input, P const& p) {
  char const* f(input);
  char const* l(f + strlen(f));
  return parse(f, l, p) && f == l;
}

struct my_grammar : grammar<char const*, space_type> {
  my_grammar() : base_type(r) {
    r = boost::spirit::qi::int_;
  }
  rule<char const*, space_type> r;
} g;
bool b = test_phrase_parser("5", g);

И это было то, что компилятор говорит:

ошибка: нет соответствующей функции для вызова 'test_phrase_parser (const char [6], ph_files_parsing :: process_parsing :: test_method () ::my_grammar &) '

примечание: кандидат:

примечание: шаблон bool test_phrase_parser (const char *, const P &)

Все работает нормально, если я заменяю

bool b = test_phrase_parser("5", g);

от

bool b = test_phrase_parser("5", boost::spirit::qi::int_);

Большое спасибо всем, кто может помочь.

(Boost версия 1.48)

1 Ответ

1 голос
/ 10 января 2012

Ваш вопрос оказывается часто задаваемым (внизу).

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

 phrase_parse()

вместо просто parse ().Например,

return phrase_parse(f, l, p, boost::spirit::ascii::space) && f == l;
...