Apakah mungkin untuk merancang bahasa yang tidak memiliki kesalahan sintaksis? [Tutup]


14

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


2
Jika kita bisa melakukan itu, kita akan menciptakan AI.
Michael K

5
@Michael: Tidak; Saya kira tidak.
SLaks

7
!!! Perl !!!

8
Saya sangat keberatan dengan pertanyaan yang ditutup! Itu tidak subyektif atau tidak konstruktif !!!
Felix Dombek

1
mengapa tidak mengambil bahasa rakitan dengan: tepatnya 256 instruksi, 128 register, dan sintaksis umum 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.
Felix Dombek

Jawaban:


8

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:

TF(w,q) -> (w,Qa) 

Considerations:
    L = { w | w is any possible string }
    w e L
    q e Q
    F is a set with all good final states {Qa,Qr}
    Qa e F

Telah didemonstrasikan bahwa TM memiliki kekuatan komputasi yang sama dengan komputer kehidupan nyata mana pun, jadi ini sangat mungkin


1
Apa artinya ini bagi kita orang awam? Apa itu 'w', 'e', ​​'L', 'q', 'Q', 'Qa', 'Qr', 'F', 'TF'. Tanpa salah satu dari definisi ini, saya tidak memiliki kerangka referensi.
Berin Loritsch

1
Maaf tapi tidak ada cara mudah untuk menjelaskan pendekatan Turing Machine untuk jawaban ini. Periksa tautan ini untuk memperjelas sedikit: en.wikipedia.org/wiki/Turing_machine
guiman

16

Ya, tentu saja itu mungkin, itu bahkan mudah.

<programm> ::= char | char <program> |

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 .


Jadi jika bahasa mengabaikannya, apakah itu systax yang valid? dan bukankah "tabtabspace" string yang valid?
Michael K

1
Semantik bahasa adalah masalah saya dengan itu, tetapi tidak dapat benar-benar membahasnya tanpa mendapatkan off-topik untuk filsafat / linguistik yang tepat.
StuperUser

2
Michael: Tepat sekali. Semuanya valid secara sintaksis, tetapi mungkin bisa menjadi NOP (tidak memiliki arti khusus). Tidak ada yang salah dengan bahasa yang mengabaikan banyak hal. Lihat saja semua hal yang diabaikan C dalam program sampel ini: int main () {3 ;; / * comment * /}
user281377

Banyak orang mengatakan "tidak" karena mereka tidak memiliki perbedaan konsep antara sintaksis dan semantik. "Itu tidak dikompilasi? Kalau begitu, pasti ada kesalahan sintaks!"
fredoverflow

Banyak orang mengatakan "tidak" karena tidak ada makna nyata dalam hal ini. Segera setelah Anda menambahkan struktur (yaitu lebih dari aturan parsing rekursif diri) Anda memiliki konsep sintaksis. Pelanggaran struktur adalah kesalahan yang disebabkan oleh sintaksis. Sintaks yang disebabkan kesalahan adalah Kesalahan Sintaks, apakah parser menandainya seperti itu atau tidak.
Berin Loritsch

5

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.


Saya pernah membaca bahwa TECO seperti itu, setiap karakter diberi makna.
David Thornley

3
Kode mesin berfungsi seperti itu. Setiap kombinasi byte yang mungkin dapat dilihat sebagai program yang melakukan sesuatu , bahkan jika semua itu menyebabkan interupsi.
user281377

David, itulah yang saya pikirkan, sangat suka TECO. Meskipun input IIRC TECO dapat mengandung kesalahan sintaksis. Tetapi itu menunjukkan sulitnya bahasa yang begitu padat - sangat sulit dibaca dan rawan kesalahan yang sulit dipahami.
Omega Centauri

@ user281377: Pada 6502, ada beberapa instruksi tanpa arti yang jelas. Beberapa memiliki perilaku yang konsisten, berguna, dan tidak tersedia dengan instruksi apa pun yang didokumentasikan (favorit saya dijuluki "DCP" - mengurangi alamat memori dan membandingkan hasilnya dengan akumulator, menetapkan bendera dengan tepat), tetapi beberapa memiliki perilaku yang bergantung pada pengaturan waktu bus dengan cara yang aneh dan aneh, dan beberapa akan mengunci prosesor cukup keras sehingga memerlukan reset (bahkan interupsi "non-maskable" tidak akan membantu). Saya pikir instruksi terakhir dapat dianggap "kesalahan sintaks".
supercat

5

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.


3

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.


0

Ahbefiasdlk aslerhsofa; f jwi [asdfasdf] aew / & Q! @ # $} {;-P

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.

Kesalahan sintaksis adalah kesalahan yang diperkenalkan oleh pemrogram yang menulis kode yang tidak memiliki arti pada bahasa tersebut.

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 .


1
Kebutuhan akan struktur tidak membutuhkan tata bahasa. Pertimbangkan Piet di mana strukturnya berada di posisi karakter (atau warna) dalam kisi, bukan hubungannya dengan karakter lain dalam morfem.
Mike Samuel

1
Melanggar struktur dan apa yang terjadi?
Berin Loritsch
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.