ブースト::スピリットのオペレーターの優先順位?
-
01-10-2019 - |
質問
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に修正を行いました。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)])
)
;
所属していません StackOverflow