Saya belajar untuk saya ujian bahasa komputasi , dan ada satu gagasan bahwa saya mengalami masalah.
Saya mengerti bahwa tata bahasa biasa lebih sederhana dan tidak dapat mengandung ambiguitas, tetapi tidak dapat melakukan banyak tugas yang diperlukan untuk bahasa pemrograman. Saya juga mengerti itu tata bahasa tanpa konteks memungkinkan ambiguitas, tetapi memungkinkan beberapa hal yang diperlukan untuk bahasa pemrograman (seperti palindrom).
Yang bermasalah dengan saya adalah memahami bagaimana saya dapat memperoleh semua hal di atas dengan mengetahui bahwa tata bahasa nonterminals reguler dapat memetakan ke terminal atau nonterminal diikuti oleh terminal atau bahwa peta nonterminal bebas konteks ke kombinasi terminal dan nonterminal apa pun .
Bisakah seseorang membantu saya menyatukan semua ini?
sumber
A-> a | c
danB->b
kemudian tata bahasa ini mengizinkan non-palindrom. Sebagai contoh, saya bisa menghasilkan:S->ABA->aBA->abA->abc
. Masalahnya adalah kita tidak ingin menghasilkan dua variabel pada aturan pertama, melainkan dua terminal. Kemungkinan untuk tata bahasa yang memungkinkan palindrom adalah:S -> aSa | bSb | a | b
S -> aSa | e
dana(aa)*a
keduanya mendeskripsikan bahasa biasa. Ini menunjukkan bahwa CFG dapat mendeskripsikan bahasa biasa, meskipun itu melanggar linearitas kiri atau kanan. Memang, ini adalah palindrom yang tidak terlalu jelas ..Saya pikir yang ingin Anda pikirkan adalah berbagai lemmata pemompaan. Bahasa biasa dapat dikenali oleh robot yang terbatas. Bahasa bebas konteks membutuhkan tumpukan, dan bahasa sensitif konteks membutuhkan dua tumpukan (yang setara dengan mengatakan itu membutuhkan mesin Turing penuh.)
Jadi, jika kita berpikir tentang pumping lemma untuk bahasa biasa , yang dikatakan, pada dasarnya, adalah bahwa setiap bahasa reguler dapat dipecah menjadi tiga bagian, x , y , dan z , di mana semua contoh bahasa berada dalam xy * z (di mana * adalah pengulangan Kleene, yaitu 0 atau lebih salinan y .) Pada dasarnya Anda memiliki satu "nonterminal" yang dapat diperluas.
Sekarang, bagaimana dengan bahasa tanpa konteks? Ada analogi pemompaan untuk bahasa tanpa konteks yang memecah string dalam bahasa menjadi lima bagian, uvxyz , dan di mana semua contoh bahasa berada di uv i xy i z , untuk i ≥ 0. Sekarang, Anda memiliki dua "nonterminals "yang dapat direplikasi, atau dipompa, selama Anda memiliki nomor yang sama .
sumber
Perbedaan antara tata bahasa bebas konteks dan reguler: (N, Σ, P, S): terminal, nonterminals, produksi, status awal Simbol terminal
● simbol dasar bahasa yang ditentukan oleh tata bahasa formal
● abc
Simbol nonterminal (atau variabel sintaksis)
● diganti dengan kelompok simbol terminal sesuai dengan aturan produksi
● ABC
tata bahasa reguler: tata bahasa reguler kanan atau kiri tata bahasa reguler kanan, semua aturan mematuhi bentuk
meninggalkan tata bahasa biasa, semua aturan mengikuti bentuknya
tata bahasa bebas konteks (CFG)
○ tata bahasa formal dimana setiap aturan produksi berbentuk V → w
○ V adalah simbol nonterminal tunggal
○ w adalah string terminal dan / atau nonterminals (w boleh kosong)
sumber
Tata bahasa reguler: - tata bahasa yang mengandung produksi sebagai berikut adalah RG:
dimana V = variabel dan T = terminal
RG dapat berupa Tata Bahasa Linier Kiri atau Tata Bahasa Garis Kanan, tetapi bukan Tata Bahasa linier Tengah.
Seperti kita ketahui semua RG adalah Linear Grammar tetapi hanya Left Linear atau Right Linear Grammar yang RG.
Tata bahasa biasa bisa jadi ambigu.
Tata Bahasa Ambigu: - untuk string x ada lebih dari satu LMD atau Lebih dari RMD atau Lebih dari satu pohon Parse atau Satu LMD dan Satu RMD tetapi keduanya Menghasilkan pohon Parse yang berbeda.
Grammar ini adalah Grammar yang ambigu karena dua pohon parse.
CFG: - Tata bahasa dikatakan CFG jika Produksinya berbentuk:
DCFL: - seperti yang kita ketahui semua DCFL adalah LL (1) Grammar dan semua LL (1) adalah LR (1) jadi tidak pernah ambigu. jadi DCFG tidak pernah ambigu.
Kami juga tahu semua RL adalah DCFL sehingga RL tidak pernah ambigu. Perhatikan bahwa RG mungkin ambigu tetapi RL tidak.
CFL: CFl Mungkin atau mungkin tidak ambigu.
Catatan: RL tidak pernah ambigu secara inheren.
sumber
Ekspresi Reguler
Tata Bahasa Bebas Konteks
sumber
Tata bahasa bebas konteks jika semua aturan produksi memiliki bentuk: A (yaitu, sisi kiri aturan hanya dapat berupa satu variabel; sisi kanan tidak dibatasi dan dapat berupa urutan terminal dan variabel apa pun). Kita dapat mendefinisikan tata bahasa sebagai 4-tupel di mana V adalah himpunan hingga (variabel), _ adalah himpunan hingga (terminal), S adalah variabel awal, dan R adalah himpunan aturan hingga, yang masing-masing adalah pemetaan
Tata bahasa reguler V adalah linier kanan atau kiri, sedangkan tata bahasa bebas konteks pada dasarnya adalah kombinasi terminal dan non-terminal. karenanya kita dapat mengatakan bahwa tata bahasa biasa adalah bagian dari tata bahasa bebas konteks. Setelah properti ini kita dapat mengatakan bahwa kumpulan Bahasa Bebas Konteks juga berisi kumpulan Bahasa Reguler
sumber
Pada dasarnya tata bahasa biasa adalah bagian dari tata bahasa bebas konteks, tetapi kita tidak dapat mengatakan tata bahasa bebas Setiap Konteks adalah tata bahasa biasa. Terutama tata bahasa bebas konteks yang ambigu dan tata bahasa reguler mungkin ambigu.
sumber
grammer biasa tidak pernah ambigu karena ia linier kiri atau linier kanan sehingga kita tidak dapat membuat dua pohon keputusan untuk grammer biasa sehingga selalu tidak ambigu. tetapi selain tata bahasa biasa semua mungkin atau mungkin tidak biasa
sumber