无法使用boost :: spirit :: qi中的规则制作语法

时间:2012-01-09 02:44:18

标签: c++ boost boost-spirit boost-spirit-qi

我第一次尝试使用Spirit库。到目前为止,我很享受它,但我发现自己无法用预定义的规则构建语法,即使在尝试受文档大量启发的例子时也是如此!

这是我问题的核心:

#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&amp;)'

     

注意:候选人是:

     

注意:模板bool test_phrase_parser(const char *,const P&amp;)

如果我替换

,一切正常
bool b = test_phrase_parser("5", g);

通过

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

非常感谢能够提供帮助的任何人。

(Boost版本是1.48)

1 个答案:

答案 0 :(得分:1)

您的问题原来是frequently-asked(位于底部)。

由于语法具有跳过解析器,因此必须使用

调用它
 phrase_parse()

而不仅仅是解析()。例如,

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