Mengapa BNF dianggap sebagai teknik yang tidak memuaskan untuk menggambarkan suatu bahasa?

8

Saya membaca makalah Konsep Dasar dalam Bahasa Pemrograman oleh C. Strachey tempo hari, di mana saya membaca sesuatu yang sangat aneh bagi saya. Mengutip secara langsung (dengan bagian aneh disorot oleh saya):

Menghadapi situasi seperti yang ada saat ini, di mana ada metode yang umum dikenal untuk menggambarkan kelas tata bahasa tertentu (dikenal sebagai BNF atau bebas konteks), naluri pertama para matematikawan ini tampaknya adalah menyelidiki batas-batas BNF — apa dapatkah Anda mengungkapkan dalam BNF bahkan dengan biaya konstruksi yang sangat rumit dan buatan? Ini mungkin pertanyaan dari beberapa minat matematika (apa pun artinya), tetapi memiliki sedikit relevansi dengan bahasa pemrograman di mana lebih penting untuk menemukan metode yang lebih baik untuk menggambarkan sintaks daripada BNF (yang sudah baik dan tidak memadai untuk ALGOL) daripada memeriksa batas yang mungkin dari apa yang sudah kita ketahui sebagai teknik yang tidak memuaskan .

Apakah ada alasan khusus penulis menganggap BNF sebagai teknik yang tidak memuaskan untuk menggambarkan bahasa? Mungkinkah karena Anda hanya bisa mendeskripsikan sintaks dan bukan semantik dengan tata bahasa BNF tunggal (meskipun, Anda dapat memperluasnya untuk menggambarkan semantik operasional melalui mengubahnya menjadi tata bahasa atribut)?

NlightNFotis
sumber

Jawaban:

3

Anda menyebutkan satu alasan.

Alasan lainnya adalah bahwa sintaks bahasa pemrograman tidak bebas konteks, kecuali jika Anda mendefinisikan sintaksis sebagai yang dapat, atau, dijelaskan oleh tata bahasa bebas konteks.

Ketika makalah Strachey ditulis, sintaks bahasa baru, Algol 68, didefinisikan dalam formalisme baru, tata bahasa dua tingkat, yang digunakan untuk menggambarkan validitas sintaksis secara penuh, termasuk banyak hal yang, dicuci otak oleh "BNF adalah sinte "meme, banyak dari kita tidak menganggap bagian dari sintaks sama sekali, seperti semua variabel yang perlu dideklarasikan sebelum digunakan.

Sebagian besar dari kita tidak akan sejauh itu, tetapi masih akan setuju bahwa fitur sintaksis bebas-konteks dalam bahasa pemrograman ada.

reinierpost
sumber
3

Saya tidak berpikir semantik memainkan peran. Kutipan Anda meminta "temukan metode yang lebih baik untuk menggambarkan sintaks daripada BNF." Tentu saja, hal-hal seperti nama fungsi dan variabel membentuk bagian dari sintaks. Dengan BNF Anda tidak dapat, misalnya, membedakan bahasa tempat variabel harus dideklarasikan sebelum penggunaan dari yang mana Anda dapat menggunakan variabel yang tidak dideklarasikan. Hal-hal ini harus dijelaskan dalam teks yang menyertai biasanya, yang tidak sempurna.

Peter Leupold
sumber
"Hal-hal ini harus dijelaskan dalam teks yang menyertainya biasanya" - ada yang semantik formal, meskipun.
Raphael
1
Pertanyaan apakah sebuah program dengan pengidentifikasi tertentu pada posisi tertentu sah atau tidak bagi saya adalah sintaks, bukan semantik. Semantik adalah maknanya, sintaksis menggambarkan bahasa formal program hukum. Karena itu saya pikir contoh saya menggambarkan bagian dari sintaks yang biasanya didekripsi dalam bentuk teks.
Peter Leupold
1
Selain pemrograman terminologi bahasa, cabang TCS yang disebut semantik formal adalah apa yang dapat Anda gunakan di sana. Anda dapat memanggil sintaks setelahnya, jika Anda mau (meskipun saya menganggap itu konyol); intinya adalah bahwa bahasa alami bukan satu-satunya alternatif untuk menentukan hal-hal ini.
Raphael