Boost :: spirit :: qi, определяющий калькулятор для нулевых значений
я пытаюсь написать синтаксический анализатор для математических выражений, где именованные переменные являются нулевыми вboost::spirit
(версия 1_51_0), к которой ям совершенно новый. Я определяюtypedef boost::function Value
и мои правила будут объявлены так:qi::rule expression, term, others, ...;
Я определяю бинарные операторы на nullaries с помощью этого макроса
#define BINARY_FUNCTOR(name, op) \
struct name \
{ \
name(Value x, Value y): x_(x), y_(y) {} \
double operator()() { return x_() op y_(); } \
Value x_, y_; \
};
и имеют ,ADD
SUB
и т. д. Из приведенных мной примеровЯ видел, яя ожидал, что правила будут определены следующим образом:
expression = term
>> *( (lit('+') >> term[ADD(_val, _1)])
| (lit('-') >> term[SUB(_val, _1)])
);
но это некажется, правильный синтаксис, так как я получаю сообщение об ошибке
boost/spirit/home/support/action_dispatch.hpp:162: error: no match for call to ‘(const::SUB) (boost::function&, boost::spirit::context&, bool&)’
SRParser.cpp:38: note: candidates are: double::SUB::operator()()
который выглядит для меня как_1
ISN»т, что я ожидаю, а именноValue
связано со следующим сроком. Какие'правильный синтаксис для определения правила, как это?