Dengan kata lain, bahasa di mana setiap string yang mungkin adalah sintaks yang valid?
EDIT : Ini adalah pertanyaan teoretis.
Saya tidak tertarik menggunakan bahasa seperti itu; Saya hanya bertanya apakah itu mungkin.
Sunting lebih lanjut
Saya melanjutkan bahasa yang dirancang seperti itu. Lihat ErrorFree
language-design
syntax
Slaks
sumber
sumber
instruction operand*
, di mana operan dapat menjadi register atau angka antara 0-127 (dan semua yang di atas yang diperlakukan sebagai register) dan jika operan hilang untuk instruksi multi-arity, '0' diasumsikan.Jawaban:
Ya, jika Anda melihatnya dengan cara yang sangat analitis, menciptakan Mesin Deterministic Turing yang selalu berhenti dalam kondisi akhir yang baik untuk setiap string tunggal dari bahasa tertentu, maka Anda mungkin telah melakukan demostrasi. Demostrasi ini cukup lurus ke depan, Anda harus TM biasa dengan fungsi transisi dengan hanya satu transisi, yang terlihat seperti ini:
Telah didemonstrasikan bahwa TM memiliki kekuatan komputasi yang sama dengan komputer kehidupan nyata mana pun, jadi ini sangat mungkin
sumber
Ya, tentu saja itu mungkin, itu bahkan mudah.
Saya tidak mengerti bagaimana orang bisa mengatakan "tidak". Yang mengatakan, mungkin agak sulit untuk mendefinisikan semantik yang bermakna untuk bahasa seperti itu, tetapi itu mungkin juga. Lihat saja ruang putih .
sumber
Saya kira itu tergantung pada apa yang Anda maksud dengan sintaks yang valid.
Anda bisa mendesain bahasa yang menerima string apa pun tetapi mengabaikan apa pun yang belum ditentukan makna spesifiknya. Ini pada dasarnya sama dengan mengatakan "Saya akan menghilangkan kesalahan sintaksis tetapi mengatakan itu bukan kesalahan" - sangat tidak berguna dan sangat tidak diinginkan karena berbagai alasan.
Di luar itu satu-satunya cara Anda dapat memiliki bahasa yang tidak memiliki kesalahan sintaks adalah memiliki setiap string yang mungkin memiliki instruksi / penggunaan yang terkait dengan itu. Satu-satunya cara saya dapat melihat untuk melakukan itu adalah untuk memiliki semua operasi sebagai karakter tunggal dan untuk memastikan bahwa setiap karakter memiliki operasi yang ditugaskan untuk itu.
Ada sejuta hal yang salah dengan ini - jelas tidak ada kata-kata yang dicadangkan, ini semua tentang di mana ia digunakan dalam konteks dan sebagai akibatnya pada dasarnya tidak terbaca dan, sementara kebal dari kesalahan sintaksis akan jauh lebih mungkin mengalami setiap jenis lainnya kesalahan.
Jadi secara teori mungkin (AmmoQ menempatkannya jauh lebih rapi daripada saya) tetapi sepenuhnya tidak diinginkan.
sumber
Kode dalam bahasa pemrograman non-teks mungkin tidak memiliki kesalahan sintaksis.
Saya sedang memikirkan bahasa visual seperti BYOB . Anda tidak dapat secara tidak sengaja mengetik "jika x ten another foo" karena "sintaks" ditentukan oleh blok grafis.
sumber
Tujuan utama sintaks adalah untuk membedakan antara valid dan tidak valid dengan cara yang lebih cepat dan lebih efektif daripada mengeksekusi kode. Sintaks hanyalah sebuah optimasi, apa yang ada di dalamnya dan apa yang masuk ke semantik adalah arbitrer.
Biasanya Anda menginginkan yang sebaliknya: membuat peregangan sintaks sejauh mungkin untuk menghemat lebih banyak waktu, tetapi tentu saja Anda dapat juga menghilangkan sintaksis sekaligus dan menyatakan setiap kesalahan sebagai kesalahan semantik: Anda akan berakhir dengan penerjemah yang tidak token.
sumber
Jadi apa artinya itu?
Selama bahasa memiliki struktur dan tata bahasa, akan selalu ada konsep kesalahan sintaksis. Pertanyaannya adalah apakah Anda menegakkannya atau tidak. Orang akan membuat kesalahan, dan kesalahan sintaks adalah apa yang dicapai oleh kebanyakan desainer bahasa untuk membantu programmer menghindari kesalahan bodoh.
Tidak mungkin untuk menghilangkan kesalahan sintaksis berdasarkan definisi di atas. Kita semua salah mengidentifikasi pengidentifikasi, kita semua salah mengeja nama metode. Memiliki bahasa secara diam-diam menerima kesalahan mengeja dan dengan senang hati tidak melakukan apa pun bukanlah gagasan saya tentang pengalaman yang menyenangkan.
Dimungkinkan untuk merancang bahasa yang dapat menggunakan karakter unicode (atau urutan karakter) yang valid sebagai pengidentifikasi. Ada beberapa tantangan, seperti menormalkan karakter yang setara / urutan karakter sehingga mereka diakui sebagai hal yang sama - tetapi itu mungkin. CATATAN: ada empat tipe standar normalisasi unicode .
sumber