boost::spirit, как задать синтаксис, вопрос новичка
От: Adriano  
Дата: 19.05.08 19:39
Оценка:
Подскажите, пожалуйста, как задать такой синтаксис?
имеем два макроса:
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

заранее спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.