%left ID_OPERATOR_LOGICAL_OR
%left ID_OPERATOR_LOGICAL_AND
%left '|'
%left '^'
%left '&'
%left ID_OPERATOR_COMPARE_EQ ID_OPERATOR_COMPARE_NE
%left '>' '<' ID_OPERATOR_COMPARE_LE ID_OPERATOR_COMPARE_GE
%left ID_OPERATOR_LEFT_SHIFT ID_OPERATOR_RIGHT_SHIFT
%left '+' '-'
%left '*' '/' '%'
%left UMINUS
上記は中間オペレータと前置オペレータの優先度を表現している。一番下が優先度が一番高い。
また、中間演算子は全て左再帰になる。
primary_expression : identifier { $$ = new VEAccess(VECode::opAccess, $1); }
| '&' identifier { $$ = new VEAccess(VECode::opAddress, $2); }
| '-' expression %prec UMINUS { $$ = new VEUnaryExpression(VECode::opUnaryMinus, $2); }
| constant
| ID_SIZEOF '(' type_declaration ')' { $$ = new VESizeOf($3); }
| ID_SIZEOF '(' identifier ')' { $$ = new VESizeOf(); }
| '{' expressions '}' { $$ = $2; }
| '(' expression ')' { $$ = $2; }
;
また、単項演算子の'-'に関しては%precにより意味付けをする。
0 件のコメント:
コメントを投稿