4.8. Expressions¶
-
¶AtomicExpression
<-identifier
/constant
/'true'
/'false'
/string-literal
/'('
Expression
')'
-
¶ObjectExpression
<-AtomicExpression
ObjectSuffix
*
/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
<-FactorExpression
TermSuffix
?
-
¶TermSuffix
<-(
'*'
FactorExpression
)
+
/(
'/'
FactorExpression
)
+
/(
'%'
FactorExpression
)
+
-
¶ArithmeticExpression
<-TermExpression
ArithmeticSuffix
?
-
¶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