Pemrograman Bahasa Alami Internasional

Akhir-akhir ini, artikel tentang bahasa pemrograman baru, serta berbagai rating dan prakiraan terkait popularitas bahasa komputer, sudah sering kita jumpai. Alat-alat baru juga



membuat dirinya dikenal , yang dalam pekerjaan mereka menggunakan format mereka sendiri untuk menggambarkan file konfigurasi atau urutan perintah yang dieksekusi, yang juga sangat mendekati konsep "bahasa pemrograman". Artikel ini bertujuan untuk merumuskan harapan dan kemungkinan implementasi bahasa pemrograman abstrak yang dapat menjadi alat universal untuk komunikasi antara komputer dan seseorang.







Tentang programmer.



Jika kita mulai dari awal, maka suatu ketika saya mendengar pernyataan parafrase, "setiap programmer harus menulis database, editor teks, dan bahasa pemrogramannya sendiri." Dan jika saya menulis dua hal pertama sejak lama, bahasa pemrogramannya belum berhasil.



Lagi pula, bagaimana bahasa pemrograman biasanya dibuat?



Setiap programmer selalu memiliki pengalaman sebelumnya:



  • pengetahuan tentang satu atau lebih bahasa pemrograman (bagaimana kita bisa melakukannya tanpa itu)
  • pengalaman negatif dari menggunakannya (jika tidak, jika semuanya cocok untuk Anda, mengapa muncul dengan sesuatu yang baru?)
  • keinginan untuk mendapatkan peluang baru (ketika ada sesuatu yang hilang dalam bahasa yang ada).


Dan sebelum menjelaskan sintaks, memilih kata kunci dan memulai pekerjaan utama: lexer, parser, pustaka dasar, Anda perlu menjawab pertanyaan dasar:



  • Kompiler / interpreter / transpiler?
  • Pengetikan statis atau dinamis?
  • Manajemen memori manual atau otomatis dengan pengumpul sampah?
  • Model Pemrograman: OOP, Fungsional, Struktural, atau Sesuatu yang Baru?
  • Apakah sisipan dari bahasa pemrograman lain, dll. Diperbolehkan?


Saya, mungkin, seperti kebanyakan pembaca, memiliki pengalaman menggunakan beberapa bahasa pemrograman. Oleh karena itu, telah lama menjadi praktik bahwa untuk memecahkan masalah, lebih baik mengambil bahasa yang terkenal atau bahkan mempelajari bahasa baru, daripada mulai menulis bahasa Anda sendiri.



Selain itu, saya tidak ingin menciptakan bahasa lain hanya demi tanda centang atau demi bahasa itu sendiri. Saya percaya bahwa tujuan pembuatannya harus di luar kebutuhan pengembang itu sendiri.



Dan bagi saya tampaknya kami berhasil menentukan area di mana pengembangan bahasa pemrograman dapat diminati, dan upaya yang dilakukan untuk itu dapat membawa manfaat nyata.



Tentang non-programmer.



Area ini adalah pemrograman bahasa alami untuk non-programmer. Saya sengaja meletakkan kata "non-programmer" dan "natural" dalam tanda petik, karena istilah-istilah ini sangat bersyarat.



Lagi pula, jika bukan seorang programmer yang memulai pemrograman, maka tanpa disadari, dia otomatis menjadi seorang programmer ;-). Bahasa pemrograman tidak bisa "alami" menurut definisi. Lebih tepatnya, untuk komputer, bahasa Assembler atau sekumpulan instruksi mesin kemungkinan besar akan "alami".



Oleh karena itu, tujuannya adalah maksimal - untuk mendekatkan bahasa pemrograman dengan bahasa alami manusia.



Ini tidak hanya membuat pembacaan teks program lebih mudah dipahami oleh non-profesional, tetapi juga akan memungkinkan Anda untuk mulai membuat program hanya dengan menguasai pidato tertulis, menggunakan aturan dasar yang sangat minimum.



Tetapi ada masalah yang sangat besar dalam kata-kata ini!



Bahasa pemrograman apa pun bersifat internasional, karena sintaksnya tidak tergantung pada bahasa alami yang digunakan pemrogram untuk berkomunikasi.



Dan jika teks program dalam bahasa "alami", maka itu hanya akan bisa dimengerti oleh mereka yang mengerti bahasa ini, sementara secara bersamaan menjadi tidak bisa dimengerti oleh orang lain.



Sebagai ilustrasi: sekali atau dua kali .


Jika Anda berfantasi tentang keinginan untuk bahasa seperti itu, maka Anda melihat persyaratan dan batasan berikut:



  • ( ), , , , .
  • / , «» , «» .
  • Saya sangat ingin melihat toleransi dalam bahasa baru, toleransi terhadap kebingungan. "Keistimewaan" seperti itu hadir dalam tulisan dalam bahasa alami, dan meskipun ada kesalahan ketik, artinya hampir selalu dipertahankan. Tentu saja, dalam kasus ini, seseorang tidak boleh melangkah sejauh fanatisme. Kompilator tidak dapat membaca pikiran dan tidak dapat benar-benar "memahami" apa yang dimaksud oleh pengguna, namun cukup umum untuk mengabaikan kesalahan ketik dalam teks program berdasarkan konteks (meskipun dengan pesan peringatan).


Namun demikian, bahasa seperti itu harus tetap menjadi bahasa pemrograman dengan semua kemungkinan membuat program dengan tingkat kerumitan apa pun, termasuk pemrograman fungsional dan berorientasi objek dan pemahaman yang tidak ambigu tentang apa yang telah ditulis.



Tentang bahasa hipotetis



Berdasarkan aturan penulisan, konvensi dasar dan tanda baca untuk bahasa baru mungkin terlihat seperti ini:



  • Teks apa pun terdiri dari kalimat dan komentar. Saran diproses dan komentar diabaikan.
  • Kalimat terdiri dari urutan istilah, literal, dan simbol, dipisahkan oleh spasi dan tanda baca, dan diakhiri dengan karakter akhir kalimat.
  • Istilah adalah rangkaian gabungan huruf, angka, dan simbol ":" dan "_".
  • Literal - konstanta yang disertakan langsung ke dalam teks program, yang jenisnya ditentukan secara unik. Ini adalah string karakter dalam tanda kutip, bilangan bulat dan bilangan real, dan beberapa format khusus (waktu, tanggal).
  • Simbol - simbol lainnya yang tidak termasuk dalam tanda baca, spasi, angka dan huruf.
  • — , :



    • «.»,«;»,«!»,«?»,«…» — .
    • «=» — .
    • "" () — .
    • «()» — / .
    • «[]» — .
    • «{}» — .
    • «$» — .
    • «@» — .
    • «,» () — .
    • «:» () — .


Jika semuanya harus kurang lebih jelas dengan simbol tugas, tanda kutip, tanda kurung, dan tanda kurung siku, karena tujuan mereka sesuai dengan sebagian besar bahasa pemrograman, maka tujuan dari karakter yang tersisa (tanda kurung kurawal, titik dua, koma dan fungsi / variabel sistem) harus dijelaskan sedikit.



Karena tujuan bahasa pemrograman hipotetis masih menulis program, maka perlu disediakan kemungkinan memasukkan kode program biasa tanpa memperhitungkan semua kemungkinan dan ambiguitas yang melekat dalam bahasa alami apa pun.



Kemampuan ini juga diperlukan untuk mengimplementasikan fungsi tingkat rendah dan berinteraksi dengan pustaka eksternal.



Saat membuat sisipan seperti itu, tanda kurung kurawal dapat digunakan, semua teks di antaranya akan dimasukkan ke dalam file akhir dengan sedikit atau tanpa pemrosesan.



Simbol "$" - variabel sistem dan "@" - fungsi sistem juga memiliki tujuan yang sama. Jika simbol seperti itu ditempatkan di awal kata, maka itu akan menunjukkan objek dengan tujuan yang sesuai. Misalnya, "@exit" berarti sebuah fungsi, dan "$ var" berarti variabel dengan nama yang sesuai, dan objek itu sendiri akan tersedia baik dalam kode normal maupun dalam sisipan programatik di dalam kurung kurawal.



Akses ke setiap bidang / metode objek diatur dengan cara yang serupa:

"object @ method" atau "object $ field".



Karakter koma "," digunakan untuk menunjukkan urutan blok logika yang sama dalam satu kalimat atau untuk membuat daftar.



Karakter titik dua ":" digunakan untuk membuat daftar dan untuk menunjukkan hubungan logis antara dua bagian kata / teks, termasuk jalur modul lengkap.



Misalnya, membuat daftar: Konsekuensi / indikasi hubungan: Seperti yang Anda lihat, penggunaan tanda baca diambil dari tujuan langsungnya, diadopsi secara tertulis, yang harus memberikan trade-off tertentu antara sintaks dalam bahasa pemrograman standar dan menulis dalam bahasa natural.



_: 1, 2, .





_:

- 1;

- 2;

- .












module:calc // «calc», «module»

super:module:example$var // «$var» .











Tentang komputer



Karena kita berbicara tentang bahasa pemrograman, kita tidak dapat melakukannya tanpa konstruksi algoritmik standar: suksesi, percabangan, dan loop.



Berikut ini dengan mudah dijelaskan oleh aturan umum penulisan bahasa alami. Dalam kasus eksekusi berurutan dalam satu pernyataan, operasi dan pemanggilan fungsi ditulis secara berurutan, dipisahkan dengan koma. Jika mereka ditempatkan dalam kalimat yang berbeda, maka mereka ditulis dengan cara yang sama satu demi satu. Selain itu, pemformatan paragraf hanya berfungsi untuk persepsi teks yang lebih baik dan pemisahan logis dari masing-masing fragmen.



Saat membuat struktur kontrol bersyarat dan perulangan, Anda sudah membutuhkan kata kunci. Tetapi karena, menurut keinginan asli untuk bahasa tersebut, tidak mungkin untuk memesan istilah biasa untuk menulis konstruksi algoritmik, itu cukup untuk menunjukkan simbol fungsi sistem di depan kata kunci, yang akan memungkinkan untuk membedakan istilah biasa dari kata kunci (kontrol).



Secara alami, saat memprogram, istilah-istilah ini dapat digunakan, tetapi ini sama sekali tidak diperlukan. Sejak saat mengatur untuk bahasa alami tertentu, fungsi sistem dan kata kunci harus diberikan istilah khusus dan sudah menggunakannya, misalnya:



= @goto,

= @label,

= @continue,

=@break ..








Dan yang terakhir pada gilirannya, tetapi mungkin yang paling penting pada dasarnya, konstruksi: parameter melewati saat memanggil fungsi. Jika kita mengupayakan sintaks yang sepenuhnya alami, maka kita mendapatkan bahasa alami yang sama yang sangat sulit untuk dianalisis.



Namun demikian, menurut saya adalah mungkin untuk menggabungkan dua pendekatan dengan menghindari penggunaan tanda kurung wajib di mana sintaks diperbolehkan. Tapi: Dengan kata lain, untuk pengurutan alami dari argumen, tanda kurung untuk fungsi dan koma antar parameter dapat dihilangkan. Meskipun penggunaannya harus ditentukan terutama oleh bahasa alami target, dan bukan oleh sintaks.



: (1, 2(), 3=).

: 1 2 3=.












: ( 2() ).

: 2().

: (2 ).












Tentang keberatan



Saya memperkirakan keberatan yang beralasan dari pemrogram terhadap penggunaan bahasa seperti itu. Program apa pun di dalamnya akan menjadi jauh lebih bertele-tele daripada menggunakan sintaks formal yang ketat dari bahasa komputer biasa.



Oleh karena itu, izinkan saya mengingatkan Anda tentang properti wajibnya - kemampuan untuk mengubah teks program dari satu bahasa ke bahasa lain. Hal ini memungkinkan Anda untuk menulis program menggunakan sintaks yang sangat formal tanpa menggunakan istilah bahasa alami yang didefinisikan ulang, dan untuk mengubah teks sumber menjadi bahasa "alami" untuk "non-programmer".



All Articles