Saya telah mempelajari kompiler untuk sementara waktu, dan saya telah mencari apa yang dimaksud dengan "konteks" dalam tata bahasa dan apa artinya bagi tata bahasa untuk menjadi "bebas konteks", tetapi tanpa hasil.
Jadi, adakah yang bisa membantu dengan ini?
terminology
context-free
formal-grammars
Shady Atef
sumber
sumber
Jawaban:
Konteksnya dapat dijelaskan sehubungan dengan aturan produksi yang diizinkan untuk tata bahasa yang berbeda dalam hierarki Chomsky.
Jika Anda mempertimbangkan tata bahasa bebas konteks, aturan produksinya memiliki formulir berikut:
Jadi, Anda dapat mengamati bahwa bagian kiri dari aturan semacam ini hanya terdiri dari satu simbol non-terminal; dengan demikian, penggantian simbol non-terminal terjadi tanpa mempertimbangkan "konteksnya", yaitu simbol lain yang dikelilingi olehnya.
Di sisi lain, jika Anda mempertimbangkan aturan produksi tata bahasa yang sensitif terhadap konteks, mereka memiliki bentuk berikut:
di mana adalah non-terminal dan , , adalah urutan non-terminal dan terminal.A α β γ
Dalam hal ini "konteks" (yaitu, dan ) dari simbol non-terminal yang akan diganti mempengaruhi efek substitusi dan itu adalah bagian dari aturan itu sendiri.β γ
Anda dapat menemukan lebih banyak detail dalam jawaban ini untuk matematika dan jawaban ini untuk rekayasa perangkat lunak.
sumber
"Konteks" adalah teks di sekelilingnya. Tata bahasa bebas konteks bebas konteks dalam arti aturannya terlihat seperti , daripada . Sisi kiri aturan selalu merupakan simbol non-terminal tunggal. Artinya, aturan untuk memperluas simbol non-terminal tidak tergantung pada teks apa yang muncul di sekitar simbol itu (konteksnya), tetapi hanya bergantung pada simbol itu sendiri. Misalnya, dalam tata bahasa untuk bahasa pemrograman, istilah meluas ke jenis ekspresi yang sama apakah Anda sedang menulis tugas (misalnya, ), meneruskan argumen ke fungsi (misalnya, ) atau mengembalikan nilai dari suatu fungsi (misalnya, ).A→things stuffAmore-stuff→things Expr
x:=y+z
f(y+z)
return y+z
sumber
Secara umum, bahkan bahasa reguler dapat memiliki dependensi konteks, artinya Anda dapat menentukan - sampai batas tertentu - dengan cara apa simbol dapat muncul di sekitar simbol lain dalam string yang termasuk dalam bahasa tersebut.
Apa yang khusus untuk tata bahasa bebas konteks adalah bahwa ketika ada banyak cara untuk menggantikan simbol non-terminal, dengan menerapkan aturan yang berbeda dengan non-terminal yang sama di sisi kanan, pilihan aturan yang akan diterapkan tidak pernah bergantung pada apa sedang terjadi di sekitar simbol ini selama proses derivasi.
Anda dapat menganggap mereka sebagai bahasa derivasi bebas konteks, singkatnya bahasa bebas konteks.
sumber