【发布时间】:2013-05-22 16:39:56
【问题描述】:
我无法使用语法,所以我对其进行了简化,直到它只解析一个整数。仍然无法让它工作。就是如下语法:
template<typename Iterator>
struct rangeGrammar : qi::grammar<Iterator, int()>
{
rangeGrammar() :
rangeGrammar::base_type(number)
{
using qi::int_;
using qi::_1;
using qi::_val;
number = int_[_val = _1];
}
qi::rule<Iterator, int()> number;
};
它应该只解析一个整数(我知道我可以告诉解析函数使用 int_ 作为语法,但我不知道这个例子有什么问题)。
我的解析函数是:
/* n is a std::string provided by the user */
rangeGrammar<std::string::const_iterator> grammar;
int num = 0;
qi::phrase_parse(n.start(), n.end(), grammar, num);
std::cout << "Number: " << num << std::endl;
我收到以下编译器错误:
/boost/spirit/home/qi/reference.hpp: 在成员函数'bool boost::spirit::qi::reference::parse(Iterator&, const Iterator&, Context&, const Skipper&, Attribute&) const [with Iterator = __gnu_cxx::__normal_iterator >, Context = boost::spirit::context, boost::spirit::locals >, Skipper = boost::spirit::unused_type, Attribute = int, Subject = const boost::spirit ::qi::rule<:__normal_iterator>, int(), boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type>]': /boost/spirit/home/qi/parse.hpp:89:82: 从 'bool boost::spirit::qi::parse(Iterator&, Iterator, const Expr&, Attr&) 实例化 [with Iterator = __gnu_cxx::__normal_iterator > , expr = rangeGrammar<:__normal_iterator>>, Attr = int]' ../parameter_parser.h:95:46: 从这里实例化 boost/spirit/home/qi/reference.hpp:43:71: 错误: 没有匹配函数调用'boost::spirit::qi::rule<:__normal_iterator>, int(), boost::spirit ::unused_type, boost::spirit::unused_type, boost::spirit::unused_type>::parse(__gnu_cxx::__normal_iterator >&, const __gnu_cxx::__normal_iterator >&, boost::spirit::context, boost:: Spirit::locals >&, const boost::spirit::unused_type&, int&) const' cc1plus:警告被视为错误 /boost/spirit/home/qi/reference.hpp:44:9:错误:控制到达非空函数的结尾 * 退出状态 1 *
无法弄清楚问题所在。任何帮助将不胜感激。
【问题讨论】:
-
大声笑@“简单的 Boost::spirit 语法”
-
如您所见,没有简单的 Boost Spirit 语法。请改用 ANTLR。
-
前几天,我在 IRC 上与 boost“团队”的一位好心人交谈,并询问为什么 Spirit 的文档覆盖率如此之低。他惊呼它实际上有很好的记录...... +1 使用 ANTLR。
-
@Kivin 您对 Spirit 文档有何不满?它有据可查。作为 eDSL,它并不简单,诊断也不简单。如果它不适合你,那就不适合你。但我非常怀疑文档是否会成为决定性因素?
标签: c++ boost-spirit-qi