Operator Vorrang in boost :: spirit?
-
01-10-2019 - |
Frage
Ich habe einige Tests den Geist mini_c Probe verwendet wird. Leider hat es nicht den Operator Vorrang behalten, wie erwartet:
int main()
{
return 3 > 10 || 3 > 1;
}
auswertet auf 0
return (3 > 10) || (3 > 1);
Rückgabe 1
Ich habe versucht, die Definition zu bewegen „||“ und „&&“ bis ganz nach oben im Konstruktor von
template <typename Iterator>
expression<Iterator>::expression(
, aber das ändert nichts. Wie kann das behoben werden. Ich bin mit Boost-1.3.38.
Lösung
bestätigt, dass ein Fehler in dem mini_c Beispiel ist zu Operatorpräzedenz verwendet. Ich verpflichten, eine Lösung zu SVN, die Boost-V1.45 zur Verfügung stehen wird. Hier ist, was ich in der Header-Datei mini_cb.hpp geändert:
alter 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)])
)
;
Neuer Code:
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)])
)
;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow