boost::spirit и калькулятор формул
От: Аноним  
Дата: 27.04.10 10:42
Оценка:
Привет всем! Взялся вот изучать boost::spirit, но пока что-то не очень получается.

Есть в библиотеке пример калькулятора формул, самый простой. Пытаюсь его модифицировать, чтобы в произвольном месте в выражении можно было применять идентификатор, значение которого будет браться из переменной с++.
Например:
((12 + 20) / 3.3 * k) / 100, где k переменная, значение которой задается где-то в с++ коде.

Помогите разобраться, пожалуйста
Re: boost::spirit и калькулятор формул
От: Sharpeye Россия  
Дата: 30.04.10 20:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Привет всем! Взялся вот изучать boost::spirit, но пока что-то не очень получается.


А>Есть в библиотеке пример калькулятора формул, самый простой. Пытаюсь его модифицировать, чтобы в произвольном месте в выражении можно было применять идентификатор, значение которого будет браться из переменной с++.

А>Например:
А>((12 + 20) / 3.3 * k) / 100, где k переменная, значение которой задается где-то в с++ коде.

А>Помогите разобраться, пожалуйста


Можно так:
// Заводим мапку
    std::map< std::string, unsigned int > variables;

// Добавляем правило 

qi::rule<Iterator, std::string(), ascii::space_type> id;

id %= qi::lexeme[ qi::alpha >> *qi::alnum ];

// Правим правило

factor = id[_val = boost::phoenix::ref( variables )[ _1 ] ]
    ...

// Добавляем переменные

variables[ "x" ] = 1;
variables[ "y" ] = 2;
variables[ "z" ] = 3;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.