gpt4 book ai didi

c++ - boost::spirit 中的运算符优先级?

转载 作者:可可西里 更新时间:2023-11-01 17:52:39 26 4
gpt4 key购买 nike

我使用 spirit mini_c 样本做了一些测试。不幸的是,它没有像预期的那样保持运算符优先级:

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

计算为 0。

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

返回 1

我试图移动“||”的定义和“&&”到构造函数的最顶端

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

但这并没有改变任何东西。这怎么能解决。我正在使用 boost 1.3.38。

最佳答案

已确认,这是 mini_c 示例中与运算符优先级相关的错误。我提交了对 SVN 的修复,它将在 Boost V1.45 中可用。这是我在头文件 mini_cb.hpp 中所做的更改:

旧代码:

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)])
)
;

关于c++ - boost::spirit 中的运算符优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3591146/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com