【问题标题】:Unable to make grammar from rule in boost::spirit::qi无法从 boost::spirit::qi 中的规则生成语法
【发布时间】:2012-01-09 02:44:17
【问题描述】:

我是第一次尝试使用 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&)”

注意:候选人是:

注意:模板 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)

【问题讨论】:

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


    【解决方案1】:

    你的问题原来是frequently-asked(在底部)。

    由于语法有一个skip-parser,它必须被调用

     phrase_parse()
    

    而不仅仅是 parse()。例如,

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多