Tôi sẽ tưởng tượng rằng nó có thể đánh giá một cái gì đó như thế này đánh giá từ trái sang phải.
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
này có thể được coi là tạo ra một cây nhị phân đại diện cho các tính toán và sau đó làm việc kể từ nút lá, trái sang phải, tính toán mọi thứ. Đáng tiếc là nghệ thuật ascii của tôi là không lớn nhưng đây là một nỗ lực nhằm đại diện cho cây trong câu hỏi:
Add
/\
/\
a \
Divide
/\
/ \
/ \
/ \
Multiply Subtract
/\ /\
/\ /\
b c d e
Và tôi đã làm một số xét nghiệm trong C# (Tôi biết nó không giống nhau nhưng đó là nơi quyền lợi của tôi nói dối và các bài kiểm tra thể thể dễ dàng thích nghi) như sau:
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));
các cặp câu Console.WriteLine là một đại số (sử dụng các thiết lập một thủ thuật số) và trình bày bằng số hiển thị những gì tính toán thực hiện. Các cặp tạo ra kết quả giống nhau.
Có thể thấy các đối số được đánh giá theo thứ tự bất kỳ sau khi gán được 2 và trước khi là một. Vì vậy, thứ tự đánh giá của mọi thứ đơn giản từ trái sang phải, tôi nghĩ nhưng thứ tự tính toán như bạn mong đợi.
Tôi giả định này có thể chạy gần như với sao chép và dán để kiểm tra trong JAVA ...
Có thể có một số giả định không được chú ý ở đây vì vậy nếu ai làm sai sót chỗ logic trong đây xin đừng gọi tôi vào chúng và Tôi sẽ làm việc thông qua.
Không có câu trả lời nào trong số những câu trả lời này trả lời câu hỏi của anh ấy, bởi vì anh ấy hỏi về dấu ngoặc đơn; chúng không được bao gồm trong tài liệu ưu tiên. Cần lưu ý rằng điều này là tốt nhất được hỏi theo cách này: Các biểu thức parenthetical được đánh giá đầu tiên, hoặc chúng được đánh giá khi cần thiết? Nếu được đánh giá đầu tiên, (2) sẽ chính xác ... nếu được đánh giá khi cần (lười), thì (1) sẽ chính xác. tôi không biết câu trả lời, nhưng có lẽ điều này sẽ giúp ích cho bạn. –
@Myrddin: bạn nói đúng. Đó là tôi có nghĩa là đặt câu hỏi. – bancer
"Đánh giá quy tắc". C.f. câu trả lời đã chỉnh sửa của tôi. –