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)?
sumber
Jawaban:
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.
sumber
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.
sumber