私はBoostSpiritパーサーを使用していますが、パーサーが解析しているため、セマンティックアクションはクラスParserActionsのインスタンスに反映されます。
パーサーのコードは次のとおりです(関連部分)
struct urdf_grammar : public grammar<urdf_grammar> {
template <typename ScannerT>
struct definition {
definition(urdf_grammar const& self) {
prog = (alpha_p >> *alnum_p)[&(self.actions.do_prog)];
}
rule<ScannerT> prog;
rule<ScannerT> const&
start() const {
return prog;
}
};
const ParserActions & actions;
explicit urdf_grammar(const ParserActions & actions = ParserActions()) : actions(actions) {
}
};