使用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可能允许这样做。
答案 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的属性。