Me imagino que podría evaluar algo como esto evaluando de izquierda a derecha.
a + b * c/(d-e)
Action Left Value Right Value
Start Add a b*c/(d-e)
Start Multiply b c
Calc Multiply (since it can)
Start Divide b*c (d-e)
Start Subtract d e
Calc Subtract
Calc Divide
Calc Add
Esto puede ser pensado como la creación de un árbol binario que representa los cálculos y luego trabajar desde los nodos hoja, de izquierda a derecha, el cálculo de las cosas. Por desgracia mi arte ASCII no es muy grande pero aquí hay un intento de representar el árbol en cuestión:
Add
/\
/\
a \
Divide
/\
/ \
/ \
/ \
Multiply Subtract
/\ /\
/\ /\
b c d e
Y me hizo algunas pruebas en C# (Sé que no es el mismo, pero ahí es donde mis intereses se encuentran y las pruebas pueden ser fácilmente adaptado) como sigue:
f = 1;
Console.WriteLine((f=2) + (f) * (f)/((f) - (f)-1));
Console.WriteLine(2 + 2 * 2/(2 - 2 - 1));
f = 1;
Console.WriteLine((f) + (f=2) * (f)/((f) - (f)-1));
Console.WriteLine(1 + 2 * 2/(2 - 2 - 1));
f = 1;
Console.WriteLine((f) + (f) * (f = 2)/((f) - (f)-1));
Console.WriteLine(1 + 1 * 2/(2 - 2 - 1));
f = 1;
Console.WriteLine((f) + (f) * (f)/((f=2) - (f)-1));
Console.WriteLine(1 + 1 * 1/(2 - 2 - 1));
f = 1;
Console.WriteLine((f) + (f) * (f)/((f) - (f=2)-1));
Console.WriteLine(1d + 1d * 1d/(1d - 2d - 1d));
los pares de estados Console.WriteLine son el uno algebraica (utilizando el conjunto de un número truco) y una representación numérica que muestra lo que realmente hace el cálculo. Los pares producen el mismo resultado que el otro.
Como se puede ver, los argumentos se evalúan en orden con cualquiera después de que la asignación sea 2 y los anteriores sean uno. Entonces, el orden de evaluación de las cosas es simple, de izquierda a derecha, pero el orden de los cálculos es el que cabría esperar.
Asumo que esto puede funcionar casi con copiar y pegar para poner a prueba en JAVA ...
Puede haber algunos supuestos inadvertido en aquí así que si alguien hace defectos lógicos en lugar aquí, por favor llámeme en ellos y Los resolveré.
Ninguna de estas respuestas responde a su pregunta porque pregunta por el paréntesis; no están incluidos en la documentación de precedencia. Cabe señalar que esto se realiza mejor de esta manera: ¿se evalúan primero las expresiones entre paréntesis o se evalúan cuando es necesario? Si se evalúa primero, (2) sería correcto ... si se evalúa cuando es necesario (flojo), entonces (1) sería correcto. No sé la respuesta, pero quizás esto sea de ayuda para ti. –
@Myrddin: tienes razón. Eso fue lo que quise hacer la pregunta. – bancer
"Evaluar el operando de la mano izquierda primero". C.f. mi respuesta editada –