Rumah >pembangunan bahagian belakang >C++ >Apakah yang diutamakan pengendali dan jadual persekutuan sebenarnya memberitahu kami tentang penilaian ekspresi dalam bahasa pengaturcaraan?

Apakah yang diutamakan pengendali dan jadual persekutuan sebenarnya memberitahu kami tentang penilaian ekspresi dalam bahasa pengaturcaraan?

DDD
DDDasal
2024-11-01 12:32:02776semak imbas

What do operator precedence and associativity tables actually tell us about expression evaluation in programming languages?

Keutamaan Operator dan Asosiasi: Definisi dan Hubungan dengan Susunan Penilaian

Pengenalan

Dalam pengaturcaraan bahasa, keutamaan operator dan persekutuan menentukan susunan pengendali dinilai. Walaupun banyak buku teks pengaturcaraan menyediakan jadual yang menyenaraikan sifat-sifat ini, persoalan timbul mengenai tafsirannya dan sumber definisinya.

Soalan

  1. Jika tanggapan yang berfungsi adalah sentiasa dinilai dari kiri-ke-kanan adalah salah, apakah yang sebenarnya ditunjukkan oleh jadual keutamaan dan perkaitan pengendali?
  2. Siapakah yang menetapkan keutamaan dan persekutuan pengendali jika bukan piawaian ANSI? Jika ANSI mentakrifkannya, mengapakah terdapat sedikit sebutan eksplisit dalam standard? Adakah maklumat ini disimpulkan daripada piawaian ANSI C atau ditubuhkan di tempat lain?

Jawapan

Keutamaan Pengendali dan Definisi Asosiasi

Keutamaan dan pergaulan pengendali ditakrifkan dalam standard bahasa itu sendiri. Tatabahasa standard menentukan peraturan untuk membina ungkapan. Dengan meneliti peraturan ini, keutamaan dan perkaitan pengendali boleh diperolehi.

Sebagai contoh, dalam C , tatabahasa untuk ungkapan aditif (penambahan dan penolakan) adalah seperti berikut:

additive-expression:
  multiplicative-expression
  additive-expression + multiplicative-expression
  additive-expression - multiplicative-expression

Daripada peraturan ini, kita boleh menyimpulkan bahawa ungkapan darab (darab dan bahagi) mempunyai keutamaan yang lebih tinggi daripada ungkapan aditif kerana ia adalah subperaturan bagi ungkapan aditif. Selain itu, perkaitan kiri-ke-kanan pengendali dan - boleh disimpulkan daripada peraturan, yang menyatakan bahawa ungkapan aditif boleh disusun secara rekursif daripada ungkapan aditif lain.

Tertib Penilaian

Adalah penting untuk membezakan antara keutamaan operator dan persekutuan dan susunan penilaian. Walaupun keutamaan dan persekutuan menentukan cara pengendali dikumpulkan, susunan penilaian merujuk kepada urutan di mana ungkapan individu dinilai. Dalam C , penilaian tidak dijamin berlaku secara ketat mengikut keutamaan dan persekutuan.

Sebagai contoh, dalam ungkapan f1() f2() * f3(), operator * mempunyai keutamaan yang lebih tinggi daripada operator, menyebabkan dalam kumpulan f1() (f2() * f3()). Walau bagaimanapun, susunan penilaian tidak ditakrifkan, bermakna f3(), f1(), atau f2() boleh dinilai dahulu.

Pengendali tertentu, seperti operator logik OR (||), lakukan mengenakan urutan pada penilaian operan mereka, membenarkan litar pintas. Dalam x || y, x sentiasa dinilai sebelum y untuk menentukan sama ada penilaian y perlu.

Atas ialah kandungan terperinci Apakah yang diutamakan pengendali dan jadual persekutuan sebenarnya memberitahu kami tentang penilaian ekspresi dalam bahasa pengaturcaraan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn