boost :: spirit中的运算符优先级? [英] Operator precedence in boost::spirit?

查看:205
本文介绍了boost :: spirit中的运算符优先级?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用精神mini_c示例做了一些测试。不幸的是,它并不如预期那样保持运算符的优先级:

I made some tests using the spirit mini_c sample. Unfortunately it does not keep the operator precedence as expected:

int main()
{
    return 3 > 10 || 3 > 1;
}

计算为0.

return (3 > 10) || (3 > 1);

返回1

||的定义和&到

I tried to move the definition of "||" and "&&" to the very top in the constructor of

template <typename Iterator>
expression<Iterator>::expression(

但不会改变任何内容

推荐答案

确认,这是一个与运算符优先级相关的mini_c示例中的错误。我承诺修复SVN,这将在Boost V1.45。这是我改变了头文件mini_cb.hpp:

Confirmed, that's a bug in the mini_c example related to operator precedence. I committed a fix to SVN, which will be available in Boost V1.45. Here is what I changed in the header file mini_cb.hpp:

旧代码: / p>

old code:

equality_expr =
    relational_expr
    >> *(   ("==" > relational_expr     [op(op_eq)])
        |   ("!=" > relational_expr     [op(op_neq)])
        )
    ;

relational_expr =
    logical_expr
    >> *(   ("<=" > logical_expr        [op(op_lte)])
        |   ('<' > logical_expr         [op(op_lt)])
        |   (">=" > logical_expr        [op(op_gte)])
        |   ('>' > logical_expr         [op(op_gt)])
        )
    ;

logical_expr =
    additive_expr
    >> *(   ("&&" > additive_expr       [op(op_and)])
        |   ("||" > additive_expr       [op(op_or)])
        )
    ;

新代码:

equality_expr =
    logical_expr
    >> *(   ("==" > logical_expr        [op(op_eq)])
        |   ("!=" > logical_expr        [op(op_neq)])
        )
    ;

logical_expr =
    relational_expr
    >> *(   ("&&" > relational_expr     [op(op_and)])
        |   ("||" > relational_expr     [op(op_or)])
        )
    ;

relational_expr =
    additive_expr
    >> *(   ("<=" > additive_expr       [op(op_lte)])
        |   ('<' > additive_expr        [op(op_lt)])
        |   (">=" > additive_expr       [op(op_gte)])
        |   ('>' > additive_expr        [op(op_gt)])
        )
    ;

这篇关于boost :: spirit中的运算符优先级?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆