无法根据 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&)”
注意:候选人是:
注意:模板 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)
I am trying to use the Spirit library for the first time. I am enjoying it so far but I find myself unable to build a grammar from predefined rules, even when trying examples heavily inspired by the documentation!
Here is the heart of my problem :
#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);
And this is was the compiler says:
error: no matching function for call to ‘test_phrase_parser(const char [6], ph_files_parsing::process_parsing::test_method()::my_grammar&)’
note: candidate is:
note: template bool test_phrase_parser(const char*, const P&)
It all works fine if I replace
bool b = test_phrase_parser("5", g);
by
bool b = test_phrase_parser("5", boost::spirit::qi::int_);
Many thanks in advance to anyone who can help.
(Boost version is 1.48)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的问题原来是常见问题(在底部)。
由于语法有一个跳过解析器,因此必须
使用 parse() 来调用它。例如,
Your question turns out to be frequently-asked (at the bottom).
Since the grammar has a skip-parser, it must be invoked with
instead of just parse(). For example,