Подскажите, пожалуйста, как задать такой синтаксис?
имеем два макроса:
char_range(a-z)
int_range(100-200)
соответственно для них я создал типы char_range_t и int_range_t
namespace bs = boost::spirit;
struct macros_t {
.....
};
template<class valueT>
struct range_t : public macros_t {
typedef valueT value_type;
range_t(value_type begin_,value_type end_):
begin(begin_),
end(end_)
{}
value_type begin;
value_type end;
...
};
typedef range_t<char> char_range_t;
typedef range_t<int> int_range_t;
последовательность макросов хранится в macros_sequence_t
typedef std::deque<boost::shared_ptr<macros_t> > macros_sequence_t;
необходимо распарсить строку вида:
"char_range(a-z) int_range(1-3) int_range(50-200) char_range(a-z)"
в результате я должен получить массив macros_sequence_t, в котором 4-е элемента
подскажите плз как это сделать?
Как я пытался сделать:
bs::rule<> char_range_r = bs::lexeme_d[
"char_range(" >> bs::anychar_p[/*??????*/] >> "-" >> bs::anychar_p[/*?????*/] >> ")"
];
bs::rule<> int_range_r = bs::lexeme_d[
"int_range(" >> bs::uint_p[/*??????*/] >> "-" >> bs::uint_p[/*?????*/] >> ")"
];
bs::rule<> main_r = char_range_r[/*??????*/] | int_range_r[/*??????*/];
не пойму в каком месте надо добавлять элемент в macros_sequence_t
заранее спасибо