提振.重叠动作/重复使用终端令牌

Boost.Spirit Overlapping actions / reusing terminal tokens

本文关键字:终端 令牌 重叠 提振      更新时间:2023-10-16

使用Boost。Spirit,是否有可能将一个终端令牌传递给多个操作,如果可以,该语法是什么?

例如,假设我有两条规则:规则1消费"A B"并有一个关联动作"void f()",规则2消费"B C"并有一个关联动作"void g()"。

给定输入流"A1 B1 C1",我希望调用f(A1,B1)和g(B1,C1)。

编辑:一些更多的研究表明,使用And-Predicate可能会允许这一点。

使用局部变量

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

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