【发布时间】:2015-08-03 17:47:12
【问题描述】:
这取自Boost Spirit(一个非常淡化的版本)
template <typename Iterator>
struct calculator : qi::grammar<Iterator, int(), ascii::space_type>
{
calculator() : calculator::base_type(expression)
{
qi::_val_type _val;
qi::_1_type _1;
qi::uint_type uint_;
expression = term >> *('+' >> term)| ('-' >> term);
term = uint_[&term_printer]
qi::rule<Iterator, int(), ascii::space_type> term, expression;
};
}
现在,通常,当你想使用语义动作时,你会写类似
expression = term >> *('+' >> term[&my_printer] | ('-' >> term[&my_other_printer]);
...
现在,假设在解析过程中找到 qi::rule term 的实例时,会调用其他函数 term_printer()。然后,my_printer() 将在 term_printer() 之后输出它应该输出的任何内容。我的问题是,有没有人知道在发现“+”字符时(在这个特定示例中)在 term_printer() 之前调用 my_printer() 的方法?
如果您不熟悉一些背景知识: http://boost-spirit.com/distrib/spirit_1_8_3/libs/spirit/doc/semantic_actions.html
【问题讨论】:
标签: c++ boost-spirit