У меня есть лексема, как показано ниже, для слов, состоящих из букв и цифр.
атрибуты = лексема [+ (boost :: spirit :: qi :: alpha | boost :: spirit :: qi :: digit)];
Я хочу иметь правило грамматики, которое пропускает любые другие символы, которые не подходят для этого правила, и просто помещает их в вектор.
Например: ввод: STR1 + STR2% STR3 () STR4 = STR5 + STR6
output: (STR1, STR2, STR3, STR4, STR6)
Я пробовал ниже грамматику, но она пропускает все после взятия первого слова в строке синтаксического анализа. Как я могу изменить его на синтаксический анализ, как я описал?
typedef std::vector<std::wstring> Attributes;
template <typename It, typename Skipper=boost::spirit::qi::space_type>
struct AttributeParser : boost::spirit::qi::grammar<It, Attributes(), Skipper>
{
AttributeParser() : AttributeParser::base_type(expression)
{
expression =
*( attributes [phx::push_back(qi::_val, qi::_1)])
>> qi::omit[*qi:char_]
;
attributes = qi::lexeme[+(boost::spirit::qi::alpha|qi::boost::spirit::qi::digit)];
BOOST_SPIRIT_DEBUG_NODE(expression);
BOOST_SPIRIT_DEBUG_NODE(attributes);
}
private:
boost::spirit::qi::rule<It, std::wstring() , Skipper> attributes;
boost::spirit::qi::rule<It, Attributes() , Skipper> expression;
};