- 追加された行はこの色です。
- 削除された行はこの色です。
* 式 [#dc9e1708]
#contents
** 演算子優先順位 [#a79fdee2]
- 上にあるほど優先が高い。
- ほぼCと同じ。
- 諸事情により一部の演算子は全角文字で記述してあります
|カテゴリ|C演算子|オリジナル|h
|subscript|[ ]||
|postfix|++ --||
|unary_prefix|++ -- + - ! ~ ( )||
|arithmetic_multiplicative|* / %||
|arithmetic_additive|+ -||
|shift|>> <<||
|comparison_relational|< <= > >=||
|comparison_equality|== !=||
|bitwise_and|&||
|bitwise_xor|^||
|bitwise_or||||
|boolean_and|&&||
|boolean_or|||||
|conditional|? :||
|assignment|= += -= *= /= %= >>= <<= &= |= ^=||
|sequence|,||
** ExpressionのEBNF [#abe280b9]
#code(){{
UnaryOperator:
"&"
| "*"
| "++"
| "--"
| "+"
| "-"
| "!"
| "~"
| "@"
PrefixOperator:
"++"
| "--"
NewExpression:
"new" TypePath FunctionCallExpression
DeleteExpression:
"delete" UnaryExpression
PrimaryExpression:
IdentPath
Identifier # ScopeRootIdentExpression
| "." Identifier # NamespaceRootIdentExpression
| ConstantLiteral
| "(" Expression ")"
IndexExpression:
"[" Expression "]"
FunctionCallExpression:
"(" SequenceExpression ")"
PostfixOperator:
"++"
| "--"
| IndexExpression
| FunctionCallExpression
| "." Identifier # ChildIdentExpression
PostfixExpression:
PrimaryExpression (PostfixOperator)*
UnaryExpression:
UnaryOperator CastExpression
| (PrefixOperator)* PostfixExpression
CastExpression:
( "cast" "(" IdentPath ")" )* UnaryExpression
"cast" "(" TypePath ")" UnaryExpression
UnaryExpression:
(UnaryOperator)* (CastExpression | NewExpression | DeleteExpression | PostfixExpression)
MultiplicativeOperator:
"*"
| "/"
| "%"
MultiplicativeExpression:
CastExpression (MultiplicativeOperator CastExpression)
CastExpression (MultiplicativeOperator CastExpression)*
AdditiveOperator:
"+"
| "-"
AdditiveExpression:
MultiplicativeExpression (AdditiveOperator MultiplicativeExpression)*
ShiftOperator:
">>"
| "<<"
ShiftExpression:
AdditiveExpression (ShiftOperator AdditiveExpression)*
RelationalOperator:
">"
| "<"
| "<="
| ">="
RelationalExpression:
ShiftExpression (RelationalOperator ShiftExpression)*
EqualityOperator:
"=="
| "!="
EqualityExpression:
RelationalExpression (EqulityOperator RelationalExpression)*
IdentityOperator:
"is"
| "!" "is"
IdentityExpression:
EqualityExpression (IdentityOperator EqualityExpression )*
BitwiseAndOperator:
"&"
BitwiseAndExpression:
EqualityExpression (BitwiseAndOperator EqualityExpression )*
IdentityExpression (BitwiseAndOperator IdentityExpression )*
BitwiseXorOperator:
"^"
BitwiseXorExpression:
BitwiseAndExpression (BitwiseXorOperator BitwiseAndExpression)*
BitwiseOrOperator:
"|"
BitwiseOrExpression:
BitwiseXorExpression (BitwiseOrOperator BitwiseXorExpression)*
LogicalAndOperator:
"&&"
LogicalAndExpression:
BitwiseOrExpression (LogicalAndOperator BitwiseOrExpression)*
LogicalOrOperator:
"||"
LogicalOrExpression:
LogicalAndExpression (LogicalOrOperator LogicalAndExpression)*
ConditionalExpression:
LogicalOrExpression ("?" Expression ":" ConditionalExpression)*
LogicalOrExpression ("?" ConditionalExpression ":" ConditionalExpression)*
AssignmentOperator:
"="
| "+="
| "-="
| "*="
| "/="
| "%="
| ">>="
| "<<="
| "&="
| "|="
| "^="
AssignmentExpression:
(VariableReference AssignmentOperator)* ConditionalExpression
(ConditionalExpression AssignmentOperator)* ConditionalExpression
Expression:
AssignmentExpression
SequenceOperator:
","
SequenceExpression:
AssignmentExpression (SequenceOperator AssignmentExpression)*
Expression (SequenceOperator Expression)*
Expression:
SequenceExpression
}}