Если унаследованные атрибуты используются в семантических действиях, мы можем использовать директиву x3::with
.
Что, если мы хотим использовать атрибуты как часть парсера? Например, простой синтаксический анализатор сопоставляет 1 или более символов алфавита, кроме символа из набора параметров char.
qi::rule<std::string::const_iterator, qi::unused_type(char const*)> rule =
+(qi::alpha - qi::char_(qi::_r1));
Или набор символов параметра можно использовать как ленивый синтаксический анализатор.
qi::rule<std::string::const_iterator, qi::unused_type(char const*)> rule =
+(qi::alpha - qi::lazy(qi::_r1));
Директива x3::with помещает это локальное значение в контекст. Я не уверен, что мы могли бы использовать этот контекст вне семантического действия и в конечном итоге сгенерировать синтаксический анализатор.