* 式 [#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" IdentPath FunctionCallExpression

PrimaryExpression:
  IdentPath
  | NewExpression
  | ConstantLiteral
  | "(" Expression ")"

IndexExpression:
  "[" Expression "]"

FunctionCallExpression:
  "(" SequenceExpression ")"

PostfixOperator:
  "++"
  | "--"
  | IndexExpression
  | FunctionCallExpression

PostfixExpression:
  PrimaryExpression (PostfixOperator)*

UnaryExpression:
  UnaryOperator CastExpression
  | (PrefixOperator)* PostfixExpression

CastExpression:
  ( "cast" "(" IdentPath ")" )* UnaryExpression

MultiplicativeOperator:
  "*"
  | "/"
  | "%"

MultiplicativeExpression:
  CastExpression (MultiplicativeOperator CastExpression)*

AdditiveOperator:
  "+"
  | "-"

AdditiveExpression:
  MultiplicativeExpression (AdditiveOperator MultiplicativeExpression)*

ShiftOperator:
  ">>"
  | "<<"

ShiftExpression:
  AdditiveExpression (ShiftOperator AdditiveExpression)*

RelationalOperator:
  ">"
  | "<"
  | "<="
  | ">="

RelationalExpression:
  ShiftExpression (RelationalOperator ShiftExpression)*

EqualityOperator:
  "=="
  | "!="

EqualityExpression:
  RelationalExpression (EqulityOperator RelationalExpression)*

BitwiseAndOperator:
  "&"

BitwiseAndExpression:
  EqualityExpression (BitwiseAndOperator EqualityExpression )* 

BitwiseXorOperator:
  "^"

BitwiseXorExpression:
  BitwiseAndExpression (BitwiseXorOperator BitwiseAndExpression)*
  

BitwiseOrOperator:
  "|"

BitwiseOrExpression:
  BitwiseXorExpression (BitwiseOrOperator BitwiseXorExpression)*
  

LogicalAndOperator:
  "&&"

LogicalAndExpression:
  BitwiseOrExpression (LogicalAndOperator BitwiseOrExpression)*
    
LogicalOrOperator:
  "||"

LogicalOrExpression:
  LogicalAndExpression (LogicalOrOperator LogicalAndExpression)*
  
ConditionalExpression:
  LogicalOrExpression ("?" ConditionalExpression ":" ConditionalExpression)*

AssignmentOperator:
  "="
  | "+="
  | "-="
  | "*="
  | "/="
  | "%="
  | ">>="
  | "<<="
  | "&="
  | "|="
  | "^="

AssignmentExpression:
  (VariableReference AssignmentOperator)* ConditionalExpression

Expression:
  AssignmentExpression

SequenceOperator:
  ","

SequenceExpression:
  AssignmentExpression (SequenceOperator AssignmentExpression)*

}}

    ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS