将符号表作为继承属性传递以提升精神规则

时间:2016-03-14 06:39:58

标签: c++ boost-spirit

我有几个符号表,我想在其上禁止部分匹配。

阅读一些问题,我认为可以使用distinct directive完成。

但是,每次在语法中引用符号表时添加distinct(char_("a-zAZ09_"))[no_case[my_symb_1]];都会降低可读性。所以我尝试制定一个接受符号表并返回其匹配值的规则:

qi::rule<Iterator, Operation(const qi::symbols<char, Operation>&)> no_partial_match;

no_partial_match %= distinct(char_("a-zAZ09_"))[no_case[lazy(_r1)]];

稍后在语法中使用它:

some_rule = no_partial_match(my_symb_1) >> int_;

但它失败了:

    const boost::spirit::qi::symbols<char,Operation,boost::spirit::qi::tst<Char,T>,boost::spirit::qi::tst_pass_through>::adder
 &boost::spirit::qi::symbols<Char,T,boost::spirit::qi::tst<Char,T>,boost::spirit::qi::tst_pass_through>::adder::operator
 ()(const Iterator &,const Iterator &,const T &) const': expects 3 arguments - 1 provided

如何实现这一目标?

PS:我知道评论here中提供的通用解决方案,但我正在为这个特定的符号表签名寻找一种更简单的方法,而不是通用的方法。

1 个答案:

答案 0 :(得分:1)

知道了,必须将符号表包装在InvoiceableDate CompanyID Single client from this company? 4/30/2012 4:00 30003134 False 4/30/2012 4:00 30003134 False 4/30/2012 4:00 1000009602 True 4/30/2012 4:00 1075000 True 4/30/2012 4:00 30003134 False 4/30/2012 4:00 30003134 False

中 像这样

phx::ref(...)