кодировка в парсере boost.spirit
От: axio  
Дата: 09.09.10 13:07
Оценка:
Здравствуйте! Подскажите пожалуйста как задать кодировку с поддержкой кириллицы парсеру boost.spirit, чтобы alpha_p воспринимал кирилличиские символы . Или это делается както по другому?

Текст решил хранить в wstring
Инстанцирую парсер
std::wstring __cont = _content.toStdWString ();
parse_info<wchar_t const *> _info = parse(_cont.c_str(), _filter_grammar , nothing_p);


Описание грамматики

class filter_grammar : public grammar<filter_grammar>
{
public:

    static filter_data _filter_data;

protected:

    static std::pair<std::wstring,std::wstring> _replace_arg;
    static std::wstring _remove_arg;
    static std::wstring _duplicate_arg;
    static std::wstring _errorstr;


    static void err();

public:
    template<typename ScannerT>
    class definition {
    public:
        definition( const filter_grammar & self );

        rule<ScannerT> const & start() const ;

    private:
        rule<ScannerT> filters, filter_replace, filter_remove, filter_duplicate,arg;

        typedef definition _self;
    };
};

template<typename ScannerT>
filter_grammar::definition<ScannerT>::definition( const filter_grammar & self )
{
        filters = *(filter_replace|filter_remove|filter_duplicate);
        filter_replace = str_p("replace_word")>>blank_p>>arg[assign_a(_replace_arg.first)]>>blank_p>>arg[assign_a(_replace_arg.second)]>>!(ch_p('\r'))>>ch_p('\n');
        filter_remove  = str_p("remove_word")>>blank_p>>arg[assign_a(_remove_arg)]>>!(ch_p('\r'))>>ch_p('\n');
        filter_duplicate =  str_p("duplicate_word")>>blank_p>>arg[assign_a(_duplicate_arg)][boost::bind(&filter_grammar::add_duplicate_arg)]>>!(ch_p('\r'))>>ch_p('\n');
        arg = lexeme_d[+alpha_p];
}

template<typename ScannerT>
rule<ScannerT> const & filter_grammar::definition<ScannerT>::start() const
{
        return filters;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.