Saya membaca tentang Iota dan Jot dan menemukan bagian ini membingungkan:
Tidak seperti Iota, di mana pohon sintaksis untuk string dapat bercabang baik di kiri atau di kanan, sintaks Jot secara seragam bercabang kiri. Akibatnya, Iota benar-benar bebas konteks, tetapi Jot adalah bahasa biasa.
Pemahaman saya adalah bahwa kedua Iota dan Jot adalah Turing lengkap. Namun ternyata, yang satu bebas konteks, dan yang lainnya teratur! Tentunya bahasa reguler tidak bisa Turing lengkap?
regular-languages
programming-languages
turing-completeness
sdleihssirhc
sumber
sumber
1*0
adalah bahasa biasa ;-) Meskipun bukan bahasa pemrograman yang sangat ramah baik untuk programmer atau penulis kompiler.Jawaban:
Singkatnya, jawabannya adalah ya.
Tetapi Anda mencampurkan dua makna yang sama sekali tidak terkait dengan istilah "bahasa" (ya, ini membingungkan):
Perhatikan bahwa Anda dapat berbicara tentang "bahasa C ++" dari dua sudut pandang yang sama sekali tidak terkait, menggunakan dua arti yang tidak terkait dari kata "bahasa":
Ciri-ciri "bahasa C ++" dari dua sudut pandang ini tidak berhubungan.
Lebih banyak contoh untuk membantu Anda memisahkan konsep-konsep ini:
sumber
(([a-z][0-9]*)*[A-Z][0-9]*([a-z][0-9]*)*->([a-zA-Z][0-9]*)*)*
adalah bahasa reguler yang dapat menggambarkan tata bahasa dari bahasa apa pun di kelas 0Sementara serangkaian program hukum di Jot adalah reguler, Jot sendiri adalah Turing-complete. Itu berarti bahwa setiap fungsi yang dapat dikomputasi dapat diekspresikan dalam Jot. Kita bahkan dapat menemukan bahasa di mana semua string biner legal, tetapi bahasa itu sendiri adalah Turing lengkap (latihan). Anda membingungkan sintaks dan semantik.
Omong-omong, bahasa bebas konteks juga (mungkin) tidak lengkap-NP, karena mereka memiliki algoritma penguraian waktu polinomial.
sumber
Sintaks sendiri (seperti yang dikodekan dalam pohon sintaks) bahasa pemrograman modern jauh dari semua yang mereka lakukan. Bahkan, bahasa formal yang didefinisikan oleh himpunan semua program dalam bahasa tertentu yang dikompilasi tanpa kesalahan bahkan jarang bebas konteks .
Faktor statis dan dinamis menjadi persamaan. Mereka tidak terlihat dalam sintaksis pohon tetapi menentukan apakah sepotong kode sebenarnya adalah sebuah program dan apa yang dihitungnya. Intinya, resp bebas konteks. bahasa formal reguler yang didefinisikan oleh "sintaks" memberikan perkiraan yang berlebihan dari bahasa pemrograman.
Sekarang untuk menjawab pertanyaan Anda: ya, itu mungkin. Pertimbangkan, misalnya, penomoran Gödel dari mesin Turing; Anda mendapatkan "bahasa pemrograman" dari semua bilangan asli, masing-masing mewakili TM. Memang, ini bukan bahasa yang bagus untuk diprogram, tapi tentu saja itu adalah bahasa lengkap Turing yang biasa - sepele, bahkan.
sumber
Bahasa pemrograman Turing-complete jika cukup ekspresif untuk menentukan setiap fungsi yang dapat dihitung oleh mesin Turing. Di sini kita membahas kekuatan bahasa yang ditentukan dalam bahasa pemrograman . Misalnya tidak sulit untuk menulis juru bahasa untuk mesin Turing dengan Python, jadi Python adalah bahasa pemrograman Turing-complete.
Sintaks dari suatu bahasa pemrograman , yaitu himpunan string yang sesuai dengan program yang valid dalam bahasa pemrograman, itu sendiri adalah bahasa. Misalnya, pertimbangkan set semua program Python yang mungkin. Sintaks bahasa pemrograman bisa peka konteks , bebas konteks , reguler , dll. Kami tertarik pada kesulitan memeriksa bahwa string yang diberikan adalah program yang valid dalam bahasa pemrograman (ini dilakukan oleh kompiler / juru bahasa). Ketika kami mengatakan sintaks dari suatu bahasa pemrograman bebas konteks, itu berarti bahwa ada tata bahasa bebas konteks untuk sintaksnya dan menyiratkan bahwa ada push-down automata untuk memeriksa validitas program,
Perhatikan bahwa kesederhanaan sintaksis suatu bahasa pemrograman tidak menyiratkan suatu batasan pada kekuatan komputasi dari program-program yang ditentukan dalam bahasa-bahasa pemrograman tersebut.
sumber
Jawabannya iya. Anda lihat, seperti yang dinyatakan oleh jawaban yang diterima, tata bahasa tidak tergantung dari artinya. Dengan kata-kata Chomsky sendiri:
Jika tata bahasa dapat menghasilkan kalimat yang cukup untuk menggambarkan semua hal yang dapat dihitung, maka kita dapat secara sewenang-wenang memberikan makna komputasi pada kalimatnya - satu untuk setiap hal yang dapat dihitung.
Adapun contoh nyata nyata, bahasa populer
whitespace
memiliki tata bahasa yang teratur dan bahkan mungkinx86 assembly languages
(perlu verifikasi).sumber