私はこの標準に従っているCコンパイラを書いており、次のようなステートメントを解析した場合:
int i;
(i) = 1;
私のコンパイラ(i)
は、それが右辺値であり、割り当て可能であってはならないことを指摘するエラーを報告します。
コードとルールを確認したところ、次のことがわかりました:代入式のセマンティクス:
代入演算子は、左オペランドとして変更可能な左辺値を持つものとします。
割り当て式は、割り当て後に左のオペランドの値を持っていますが、左辺値ではありません。
私の場合は、2つの代入式があります
(i) = 1
し、i
括弧インチ したがって、これは(i)
右辺値である必要があります。
だから私の質問です:(i) = 1
このC標準では
違法ですか?
i
括弧内は代入式ではありません。割り当て式は、「割り当てに含まれる式」など、(i)
適格なものを意味しません。割り当て式は割り当てです。
i
は割り当て式です。AST ツリーはEXPRESSION-> ASSIGNMENT_EXPRESSION-> CONDITIONAL_EXPRESSION-> LOGICAL_OR_EXPRESSION-> CAST_EXPRESSION-> UNARY_EXPRESSION-> POSTFIX_EXPRESSION-> PRIMARY_EXPRESSION-> IDENTIFIER
assignment-expression
非終端の文法は代入式と同じではありません。おおまかに言うassignment-expression
と、代入式または優先順位の高いものです。