Boost.Spirit重叠动作/重用终端令牌

时间:2011-10-25 19:10:33

标签: c++ boost boost-spirit

使用Boost.Spirit,是否可以将终端令牌传递给多个动作,如果是,那么语法是什么?

例如,假设我有两条规则: 规则1消耗“AB”并且具有相关的动作“void f(<属性类型A>,<属性类型B>)”和规则2消耗“BC”并具有相关动作“void g( < B的属性类型>,< C的属性类型>)“。

给定输入流“A1 B1 C1”,我想要调用f(A1,B1)和g(B1,C1)。

编辑:更多研究建议使用And-Predicate可能允许这样做。

1 个答案:

答案 0 :(得分:2)

使用局部变量:

qi::rule<Iterator, qi::locals<B> > r = 
    (a >> b)[lf(_1, _2), _a  = _2] >> c[lg(_a, _1)];

我在这里假设lf()和lg()是惰性函数(即底层f()和g()的包装器)。有关本地人的更多信息,请参阅here。缺点是你复制了b的属性。