Я хотел бы оценить логическое выражение, такое как a = b & s ‹9 или просто a = b, только с оператором сравнения (без логического оператора, такого как |, & и!). У нас может быть следующий AST:
=
/ \
/ \
a b
or
&
/ \
/ \
= <
/ \ /\
/ \ / \
a b s 9
Узлы листьев - это значения. Родителем узлов выхода всегда является оператор сравнения, например =,! =, ‹,>,> =,‹ =. Родителем узлов сравнения являются логические операторы |, & и!. Я хотел бы получить доступ к узлам значений (листьям) из их родительского узла, а затем передать эти значения другой функции (которая будет реализована позже). Шаг синтаксического анализа в порядке.
Как получить доступ к узлам значений (листьям) из их родительского узла. Я использую примеры по адресу: Как вычислить логическое выражение в Spirit < / а>
и синтаксический анализатор логических выражений (грамматики) в c ++ Это код оценки взят из этих ссылок:
struct eval : boost::static_visitor<bool> { eval() {} // bool operator()(const var& v) const { std::cout<<"feuille:\n"<<v<<std::endl; return true; } bool operator()(const binop<op_and>& b) const { recurse(b.oper1) && recurse(b.oper2); } bool operator()(const binop<op_or>& b) const { recurse(b.oper1) || recurse(b.oper2); } bool operator()(const unop<op_not>& u) const { return !recurse(u.oper1); } //------------adding others operators---------------------------- bool operator()(const binop<op_equal>& u) const { // will be implemented later return true; } bool operator()(const binop<op_not_equal>& u) const { // will be implemented later return true; } bool operator()(const binop<op_less>& u) const { // will be implemented later return true; } bool operator()(const binop<op_less_equal>& u) const { // will be implemented later return true; } bool operator()(const binop<op_greater>& u) const { // will be implemented later return true; } bool operator()(const binop<op_greater_equal>& u) const { // will be implemented later return true; }
Спасибо. Любые предложения приветствуются.