expr_no_commas '=' expr_no_commas
Это найдено в правиле C, но единственная возможная форма, о которой я могу думать, это:
identifier = expr_no_commas
, то есть левая сторона - это одна переменная, любые другие варианты?
Там много выражений C, которые являются присваиваниями неидентификаторам; Вот несколько примеров:
x[1] = 5; *f() = 7; *p++ = 0; a[i].f = a[i].g;
Где вы нашли это "правило"? Синтаксис, представленный в стандарте языка (черновик n1256 и раздел 6.5.16):
<i>assignment-expression</i>: <i>conditional-expression unary-expression assignment-operator assignment-expression</i> <i>assignment-operator</i>: one of <code>= *= /= %= += -= >= &= ^= |=</code>
где унарное выражение приводит к любому числу произведений, которые не являются простыми идентификаторами (как показал Джеремия Уиллкок).