Dapatkah seseorang menjelaskan kepada saya apa itu tata bahasa bebas konteks? Setelah melihat entri Wikipedia dan kemudian entri Wikipedia tentang tata bahasa formal, saya benar-benar bingung. Apakah seseorang akan berbaik hati menjelaskan tentang hal-hal ini?
Saya bertanya-tanya ini karena saya ingin menyelidiki penguraian, dan juga di samping, batasan mesin regex.
Saya tidak yakin apakah istilah-istilah ini terkait langsung dengan pemrograman, atau jika lebih terkait dengan linguistik secara umum. Jika demikian, saya minta maaf, mungkin ini bisa dipindahkan jika demikian?
Automata Theorem
Jawaban:
Tata bahasa bebas konteks adalah tata bahasa yang memenuhi properti tertentu. Dalam ilmu komputer, tata bahasa menjelaskan bahasa; secara khusus, mereka menggambarkan bahasa formal.
Bahasa formal hanyalah satu set (istilah matematika untuk kumpulan objek) dari string (urutan simbol ... sangat mirip dengan penggunaan pemrograman kata "string"). Contoh sederhana dari bahasa formal adalah himpunan semua string biner dengan panjang tiga, {000, 001, 010, 011, 100, 101, 110, 111}.
Tata bahasa bekerja dengan menentukan transformasi yang dapat Anda buat untuk membuat string dalam bahasa yang dijelaskan oleh tata bahasa. Tata bahasa akan menjelaskan bagaimana mengubah simbol awal (biasanya S) menjadi beberapa string simbol. Tata bahasa untuk bahasa yang diberikan sebelumnya adalah:
Cara mengartikannya adalah dengan mengatakan
S
bisa diganti denganBBB
, danB
bisa diganti dengan 0, danB
bisa diganti dengan 1. Jadi untuk mengkonstruksi string 010 bisa kita lakukanS -> BBB -> 0BB -> 01B -> 010
.Tata bahasa bebas konteks hanyalah tata bahasa di mana hal yang Anda ganti (kiri panah) adalah simbol "non-terminal" tunggal. Simbol non-terminal adalah simbol apa pun yang Anda gunakan dalam tata bahasa yang tidak dapat muncul di string akhir Anda. Dalam tata bahasa di atas, "S" dan "B" adalah simbol non-terminal, dan "0" dan "1" adalah simbol "terminal". Suka tata bahasa
Tidak teratur karena mengandung aturan seperti "AB -> 1".
sumber
Teori Bahasa terkait dengan Teori Komputasi. Sisi mana yang lebih filosofis dari Ilmu Komputer, tentang memutuskan program mana yang mungkin, atau mana yang mungkin untuk ditulis, dan jenis masalah apa yang tidak mungkin untuk dipecahkan oleh algoritma.
Ekspresi reguler adalah cara mendeskripsikan bahasa reguler. Bahasa biasa adalah bahasa yang dapat ditentukan oleh robot terbatas deterministik.
Anda harus membaca artikel di Finite State Machines: http://en.wikipedia.org/wiki/Finite_state_machine
Dan bahasa Reguler: http://en.wikipedia.org/wiki/Regular_language
Semua Bahasa Reguler adalah Bahasa Bebas Konteks, tetapi ada Bahasa Bebas Konteks yang tidak teratur. Bahasa Bebas Konteks adalah himpunan semua string yang diterima oleh Grammer Bebas Konteks atau Pushdown Automata yang merupakan Mesin Keadaan Hingga dengan satu tumpukan: http://en.wikipedia.org/wiki/Pushdown_automaton#PDA_and_Context-free_Languages
Ada bahasa yang lebih rumit yang memerlukan Mesin Turing (Program apa pun yang mungkin Anda tulis di komputer Anda) untuk memutuskan apakah sebuah string ada dalam bahasa tersebut atau tidak.
Teori bahasa juga sangat berkaitan dengan masalah P vs. NP, dan beberapa hal menarik lainnya.
Buku teks Pengantar Ilmu Komputer tahun ketiga saya cukup bagus dalam menjelaskan hal-hal ini: Pengantar Teori Komputasi. Oleh Michael Sipser. Tapi, saya harus membayar $ 160 untuk membelinya baru dan itu tidak terlalu besar. Mungkin Anda dapat menemukan salinan bekas atau menemukan salinan di perpustakaan atau sesuatu yang dapat membantu Anda.
EDIT:
Batasan Ekspresi Reguler dan kelas bahasa yang lebih tinggi telah banyak diteliti selama 50 tahun terakhir ini. Anda mungkin tertarik dengan pumping lemma untuk bahasa biasa. Ini adalah cara untuk membuktikan bahwa bahasa tertentu tidak teratur:
http://en.wikipedia.org/wiki/Pumping_lemma_for_regular_languages
Jika suatu bahasa tidak teratur, mungkin ia Bebas Konteks, yang artinya dapat dijelaskan oleh Grammer Bebas Konteks, atau bahkan mungkin di kelas bahasa yang lebih tinggi, Anda dapat membuktikan bahwa itu bukan Bebas Konteks dengan memompa lemma untuk Bebas Konteks bahasa yang mirip dengan ekspresi reguler.
Sebuah bahasa bahkan bisa tidak dapat diputuskan, yang berarti bahkan mesin Turing (mungkin memprogram komputer Anda dapat berjalan) tidak dapat diprogram untuk memutuskan apakah sebuah string harus diterima seperti dalam bahasa atau ditolak.
Saya pikir bagian yang paling Anda minati adalah Finite State Machines (Baik Deterministik dan Deterministik) untuk melihat bahasa apa yang dapat diputuskan oleh Ekspresi Reguler, dan lemma pemompaan untuk membuktikan bahasa mana yang tidak teratur.
Pada dasarnya sebuah bahasa tidak teratur jika membutuhkan semacam memori atau kemampuan untuk berhitung. Bahasa pencocokan tanda kurung tidak teratur misalnya karena mesin perlu mengingat jika telah membuka tanda kurung untuk mengetahui apakah harus menutupnya.
Bahasa semua string yang menggunakan huruf a dan b yang mengandung minimal tiga b adalah bahasa biasa: a ba ba ba
Bahasa semua string yang menggunakan huruf a dan b yang mengandung lebih banyak b daripada a bukanlah bahasa biasa.
Juga Anda tidak boleh bahwa semua bahasa terbatas adalah reguler, misalnya:
Bahasa semua string yang panjangnya kurang dari 50 karakter menggunakan huruf a dan b yang mengandung lebih banyak b daripada a adalah biasa, karena terbatas kita tahu itu dapat dijelaskan sebagai (b | abb | bab | bba | aabbb | ababb |. ..) dll hingga semua kemungkinan kombinasi terdaftar.
sumber