Expression Grammar

expression equivalence
equivalence implication (<=> implication)*
implication disjunction (=> implication)?
disjunction conjunction (|| conjunction)*
conjunction bit‑or (&& bit‑or)*
bit‑or bit‑xor (| bit‑xor)*
bit‑xor bit‑and (^ bit‑and)*
bit‑and equality (& equality)*
equality relational ((== | !=) relational)*
relational shift ((<= | >= | < | > | is type‑expr | as type‑expr) shift | <empty>)*
shift additive ((<< | >>) additive)*
additive multiplicative ((+ | -) multiplicative)*
multiplicative prefix ((* | / | %) prefix)*
prefix (++ | -- | + | - | ! | ~ | * | &) prefix | postfix
postfix primary (++ | -- | . identifier | -> identifier | [ expression ] | ( argument‑list ))*
primary ( expression ) | literal | basic‑type | template‑id | identifier | this | base | size‑of‑expr | type‑name‑expr | type‑id‑expr | cast‑expr | construct‑expr | new‑expr
size‑of‑expr sizeof ( expression )
type‑name‑expr typename ( expression )
type‑id‑expr typeid ( expression )
cast‑expr cast < type‑expr > ( expression )
construct‑expr construct < type‑expr > ( expression‑list )
new‑expr new type‑expr (( argument‑list ))?
argument‑list expression‑list?
expression‑list expression % ,
invoke‑expr (template‑id | identifier) (. identifier)* ( argument‑list )