Tata bahasa yang peka terhadap konteks untuk kata-kata yang digabungkan dengan diri mereka sendiri

9

Saya mencari tata bahasa yang peka konteks yang menggambarkan bahasa berikut: L={www{a,b},|w|1} .

Saya punya masalah dengan fakta bahwa tidak ada aturan seperti Xε yang diizinkan dan oleh karena itu saya tidak dapat menempatkan sembarang yang mengindikasikan "tengah" dari kata tersebut. Apakah ada trik untuk masalah ini?

Tuan Bolton
sumber
1
Jawaban membosankan: merumuskan LBA dan menerapkan simulasi yang digunakan untuk membuktikan bahwa LBA dan tata bahasa yang sensitif terhadap konteks sama kuatnya.
Raphael

Jawaban:

6

Memang, ada trik sederhana yang memungkinkan Anda untuk menambahkan informasi tambahan pada posisi tertentu: cukup ganti huruf yang berdekatan dengan posisi dan tandai dengan informasi, dan huruf aslinya.

Dalam contoh Anda, memiliki huruf non -tengah untuk bagian tengah, tetapi karena tidak dapat dihapus, ia juga dianggap sebagai huruf normal. Jadi kami memiliki dua salinan M a dan M b untuk menunjukkan huruf diganti. Di akhir derivasi penanda harus diganti dengan konten surat mereka, dengan produksi sederhana seperti M aa .MMaMbMaa

Dalam kebanyakan kasus penerapan perlu dilakukan pada akhir proses derivasi. Dalam beberapa konstruksi ini tidak perlu "waktunya": ketika M menghilang terlalu cepat, derivasi tidak dapat menemukan posisi yang tepat dan proses tidak akan berhenti berhasil. Dalam kasus lain seseorang memang membutuhkan semacam kontrol. Ini kadang-kadang dilakukan dengan memperkenalkan nonterminal sebagai sinyal yang bergerak sepanjang huruf. Sekali lagi, sinyal ini juga harus membawa terminal jika tidak Anda akan mendapatkan masalah yang sama.MaaM

Memindahkan informasi dengan mudah dalam apa yang disebut tata bahasa monoton ( dengan | α |β | ) menggunakan aturan seperti X A A X , yang dapat dilihat sebagai Xαβ|α|β|XAAXX melompat lebih . Untuk tata bahasa konteks-sensitif yang tepat satu kebutuhan untuk membagi ini dalam tiga langkah: X A X A X , X A XA A X , A A XA XAXAXAX,XAXAAX,AAXAX. dalam setiap produksi satu huruf diubah dalam konteks yang tepat. Dibutuhkan beberapa imajinasi untuk melihat proses ini tidak berinteraksi dengan bagian lain dari derivasi. Misalnya, apa yang terjadi ketika pada langkah terakhir pertama kali terlibat dalam langkah derivasi lain?A

Ini mungkin tidak berfungsi untuk kata-kata yang sangat singkat, ketika ada lebih banyak informasi daripada posisi yang tersedia. Solusi paling sederhana untuk itu adalah dengan mengabaikan string pendek dalam konstruksi Anda, dan menghasilkan secara terpisah.

Hendrik Jan
sumber
Tidakkah itu mengharuskan produksi dan agar dilihat dalam urutan tertentu sehingga Ma → a tidak akan digunakan sebelum mengatur ulang nonterminal sampai akhir? Atau apakah saya melewatkan sesuatu?
MrBolton
Saya menambahkan catatan pada jawaban saya. Dalam beberapa solusi menerapkan produksi seperti itu terlalu cepat akan menghasilkan bentuk sentensial yang tidak dapat diselesaikan dengan sukses. Dalam kasus lain, produksi harus disinkronkan dengan hati-hati. Masalah akal sehat dan coba-coba.
Hendrik Jan
1

Jawaban standar pendek: muncul dengan LBA yang menerima bahasa dan menggunakan simulasi yang digunakan untuk membuktikan bahwa tata bahasa yang peka konteks dan LBA menentukan kumpulan bahasa yang sama. Tapi tentu saja bukan itu yang Anda cari.

Dalam kasus khusus ini, cobalah untuk berpikir menggunakan tata bahasa linear-kanan untuk dua kali, satu untuk kiri dan satu untuk setengah kanan. Yang harus Anda pastikan bahwa kedua tata bahasa berasal "sinkron".Σ

Ini bisa dilakukan dengan menukar token kontrol. Dengan kata lain, tata bahasa kiri mengambil aturan, menghasilkan token kontrol pas dan meneruskannya ke tata bahasa kanan. Tata bahasa kanan melihat token kontrol dan mengeksekusi aturan fitting. Perhatikan bahwa Anda juga dapat menerapkan komunikasi dua arah dengan cara ini, tetapi tidak perlu di sini.

Ada satu masalah dengan tata bahasa konteks-sensitif: mereka tidak pernah bisa menghapus non-terminal (kecuali jika kata kosong dalam bahasa). Oleh karena itu, kita harus membuat hanya non-terminal sebanyak yang kita butuhkan; tidak ada yang bisa berlebihan.Sε

Salah satu cara untuk mencapai ini adalah dengan menggunakan trik yang sama seperti untuk bukti-bukti tertentu tentang LBA: menghasilkan semua non-terminal yang akan Anda butuhkan terlebih dahulu , yaitu menyiapkan "tape". Kemudian, "bergeraklah" pada rekaman itu. Hanya "di akhir", ganti semua non-terminal dengan terminal.

Jadi mari dengan Σ = { a , b }G=(N,Σ,δ,S)Σ={a,b} (konstruksi siap meluas ke huruf yang lebih besar) dan , δ diberikan oleh aturan berikut.Nδ

adalah aturan untuk menghasilkan "pita". Perhatikan bahwa topi menunjukkan "posisi kepala" dan indeksl,rmenunjukkan setengah dari kata yang bukan milik terminal. Kata-kata singkat dihasilkan dengan demikian untuk mengamankan beberapa aturan di bawah ini. Sekarang kita perlu aturan untuk menurunkan satu simbol di bagian kiri:SX^lSXraaaaababbababbbbaabbεSXlSXrXlX^r

l,r

untuk semua(α,γ)Σ2. Perhatikan bagaimana kita menggunakan indeks atas untuk membawa simbol yang dihasilkan ke kanan. XadanXbadalah "final" non-terminal yang hanya akan digunakan untuk memindahkan token kontrol dan untuk menurunkan terminal nanti. Perhatikan lebih jauh bahwa aturan kedua adalah (hanya) yang digunakan untuk simbol terakhir dari setengah bagian kanan. Untuk bergerak membawa ke kanan setengah, kita harus bergerak melewati kedua tersisaXldan sudah dihasilkanXα:X^lXlXγX^lγX^lXαXγXαγ

(α,γ)Σ2XaXb

XlXα

untuk semua(α,β,γ)Σ3. Sekarang, setelah carry mencapai token kontrol yang tepat, kita harus meniru aturan yang digunakan di sebelah kiri:X^lγXlX^lXlγX^lγXαX^lXαγXlγXlXlXlγXlγXαXlXαγXαγXβXαXβγ

(α,β,γ)Σ3

untuk semua(α,γ)Σ2. Perhatikan bahwa aturan pertama digunakan untuk simbol pertama dari setengah kanan, dan bahwa aturan terakhir hanya dapat digunakan untuk simbol terakhir, jika tidak derivasi tidak pernah berakhir. Sekarang kita hanya perlu aturan penghentianXlγX^rXlX^rγXαγX^rXαX^rγX^rγXrXγX^rX^rγXγ

(α,γ)Σ2

untuk semua α Σ dan kita selesai. Aturan-aturan ini juga hanya dapat diterapkan setelah semuanya (ke kiri) dilakukan, jika tidak derivasi tidak akan berakhir. Perhatikan bahwa tata bahasa ini ambigu. Tidak hanya bisa bisa XXαα

αΣ

(aman) diterapkan di mana saja di sebelah kiri "head" kiri kapan saja, tetapi juga ada beberapa carry yang sedang berjalan pada waktu yang sama. Karena mereka tidak pernah bisa menyalip satu sama lain, urutan yang benar dipertahankan. Satu komentar harus dibuat tetap: tata bahasa di atastidakpeka konteks karena banyak aturan mengubahkeduanyaXαα

simbol di sisi kiri. Ini tidak diperbolehkan untuk tata bahasa yang sensitif terhadap konteks. Untungnya, kita dapat mensimulasikan aturan dari formulirR

ABCD

oleh

jadi kita baik dan bisa bekerja dengan tata bahasa yang lebih kecil. Menunjukkan bahwa interferensi antara banyak simulasi seperti itu tidak ada salahnya dibiarkan sebagai latihan.ABAYRAYRXRYRXRYRXRDXRDCD

Lk={wkwΣ}L=i1LkLkL

Raphael
sumber
0

X

w|w|1ε

aXaaa,  aXbab,  bXaba,  bXbbb

w

Rmn
sumber
Namun, menggunakan pendekatan @ hendrik-jan menghemat dua aturan.
Rmn