2

継承された属性がセマンティック アクションで使用される場合、x3::withディレクティブを使用できます。

属性をパーサーの一部として使用したい場合はどうすればよいでしょうか? たとえば、単純なパーサーは、文字がパラメーター文字セットからのものである場合を除き、1 つ以上のアルファベット文字と一致します。

qi::rule<std::string::const_iterator, qi::unused_type(char const*)> rule =
    +(qi::alpha - qi::char_(qi::_r1));

または、パラメーター char セットを遅延パーサーとして使用できます。

qi::rule<std::string::const_iterator, qi::unused_type(char const*)> rule =
    +(qi::alpha - qi::lazy(qi::_r1));

x3::with ディレクティブは、このローカル値をコンテキストに配置します。このコンテキストをセマンティック アクションの外で使用して、最終的にパーサーを生成できるかどうかはわかりません。

4

1 に答える 1