4.8. Expressions¶
-
AtomicExpression <-¶identifier/constant/'true'/'false'/string-literal/'('Expression')'
-
ObjectExpression <-¶AtomicExpressionObjectSuffix*/ArrayLiteral/StructLiteral -
ObjectSuffix <-¶ArrayIndexSuffix/FunctionCallSuffix/StructElementSuffix/StructPointerElementSuffix
-
ArrayIndexSuffix <-¶'['Expression']'
-
FunctionCallSuffix <-¶'('CommasExpressionList?')' -
CommasExpressionList <-¶Expression(','Expression)*','?
-
StructElementSuffix <-¶'.'identifier
-
StructPointerElementSuffix <-¶'->'identifier
-
ArrayLiteral <-¶'{'CommasExpressionList'}'
-
StructLiteral <-¶'{'StructLiteralElement(','StructLiteralElement)*','?'}' -
StructLiteralElement <-¶'.'identifier'='Expression
-
FactorExpression <-¶CastExpression/AddressOfExpression/DerefExpression/PositiveExpression/NegativeExpression/BitwiseNotExpression/LogicalNotExpression/SizeofExpression/ObjectExpression
-
CastExpression <-¶'('Type')'ObjectExpression
-
AddressOfExpression <-¶'&'ObjectExpression
-
DerefExpression <-¶'*'ObjectExpression
-
PositiveExpression <-¶'+'ObjectExpression
-
NegativeExpression <-¶'-'ObjectExpression
-
BitwiseNotExpression <-¶'~'ObjectExpression
-
LogicalNotExpression <-¶'!'ObjectExpression
-
SizeofExpression <-¶'sizeof'ObjectExpression/'sizeof'Type
-
TermExpression <-¶FactorExpressionTermSuffix? -
TermSuffix <-¶('*'FactorExpression)+/('/'FactorExpression)+/('%'FactorExpression)+
-
ArithmeticExpression <-¶TermExpressionArithmeticSuffix? -
ArithmeticSuffix <-¶('+'TermExpression)+/('-'TermExpression)+
-
BitwiseOpExpression <-¶ShiftExpression/XorExpression/BitwiseAndExpression/BitwiseOrExpression/ArithmeticExpression
-
ShiftExpression <-¶ArithmeticExpression'<<'ArithmeticExpression/ArithmeticExpression'>>'ArithmeticExpression
-
XorExpression <-¶ArithmeticExpression'^'ArithmeticExpression
-
BitwiseAndExpression <-¶ArithmeticExpression('&'ArithmeticExpression)+
-
BitwiseOrExpression <-¶ArithmeticExpression('|'ArithmeticExpression)+
-
ComparisonExpression <-¶EqualExpression/NotEqualExpression/LessEqExpression/GreaterEqExpression/LessThanExpression/GreaterThanExpression/BitwiseOpExpression
-
EqualExpression <-¶BitwiseOpExpression'=='BitwiseOpExpression
-
NotEqualExpression <-¶BitwiseOpExpression'!='BitwiseOpExpression
-
LessEqExpression <-¶BitwiseOpExpression'<='BitwiseOpExpression
-
GreaterEqExpression <-¶BitwiseOpExpression'>='BitwiseOpExpression
-
LessThanExpression <-¶BitwiseOpExpression'<'BitwiseOpExpression
-
GreaterThanExpression <-¶BitwiseOpExpression'>'BitwiseOpExpression
-
LogicalOpExpression <-¶LogicalAndExpression/LogicalOrExpression/ComparisonExpression
-
LogicalAndExpression <-¶ComparisonExpression('&&'ComparisonExpression)+
-
LogicalOrExpression <-¶ComparisonExpression('||'ComparisonExpression)+
-
Expression <-¶LogicalOpExpression
Todo
literally all the expression definitions
Todo
figure out if this hierarchy can be tidied up