Estoy escribiendo un compilador de C que sigue este estándar , y si analizo declaraciones como esta:
int i;
(i) = 1;
mi compilador informará un error que señala que (i)
es un valor r y no debe ser asignable.
Revisé el código y las reglas, y encontré esto: en la semántica de expresiones de asignación:
Un operador de asignación tendrá un valor l modificable como su operando izquierdo.
Una expresión de asignación tiene el valor del operando izquierdo después de la asignación, pero no es un valor l.
En mi caso, hay dos expresiones de asignación:
(i) = 1
y i
entre paréntesis. Entonces (i)
debería ser un valor r.
Entonces mi pregunta es: ¿es
(i) = 1
ilegal en este estándar C?
i
entre paréntesis no es una expresión de asignación. La expresión de asignación no significa "expresión involucrada en una asignación" o cualquier otra cosa (i)
que califique. Las expresiones de asignación son asignaciones .
i
es una expresión de asignación, el árbol AST se expresión-> ASSIGNMENT_EXPRESSION-> CONDITIONAL_EXPRESSION-> LOGICAL_OR_EXPRESSION-> CAST_EXPRESSION-> UNARY_EXPRESSION-> POSTFIX_EXPRESSION-> PRIMARY_EXPRESSION-> IDENTIFICADOR
assignment-expression
gramática no terminal no es lo mismo que una expresión de asignación. Aproximadamente, un assignment-expression
es una expresión de asignación o cualquier cosa con mayor precedencia.