Saya memindahkan pertanyaan ini dari stackoverflow di mana id tidak mendapat jawaban. Kami memiliki pertanyaan serupa apakah JSON biasa :
JSON dan XML keduanya sering disebut sebagai bahasa bebas konteks - keduanya ditentukan terutama oleh tata bahasa formal di EBNF. Namun ini hanya berlaku untuk JSON sebagaimana didefinisikan dalam RFC 4329, bagian 2.2 yang tidak memerlukan keunikan kunci objek (banyak yang mungkin tidak tahu tetapi {"a": 1, "a": 2} adalah JSON yang valid!). Tetapi jika Anda memerlukan kunci unik di JSON atau nama atribut unik dalam XML, ini tidak dapat diungkapkan oleh tata bahasa bebas konteks. Tetapi yang merupakan kelas bahasa JSON dengan kunci unik dan untuk XML yang terbentuk dengan baik (yang menyiratkan nama atribut yang unik?).
Salah satu makalah terbaik yang saya temukan pada subjek ini (Murato et al, 2001: Taksonomi Bahasa Skema XML menggunakan Teori Bahasa Formal ) secara eksplisit mengecualikan kendala integritas seperti kunci / keyrefs dan keunikan untuk diperiksa pada lapisan tambahan. Selain itu, bagian dari XML yang ditentukan oleh Skema XML atau DTD adalah bebas konteks. Tapi bukan set lengkap semua dokumen XML yang terbentuk dengan baik.
Saya pikir otomat stack bertumpuk (= bahasa yang diindeks) harus dapat mengurai JSON dengan batasan kunci yang unik. Untuk XML dapat menyederhanakan pertanyaan ke bahasa S dari semua daftar bilangan bulat unik yang dipisahkan koma. Adakah yang tahu lebih banyak, lebih disukai dengan kutipan?
PS: Algoritma sederhana untuk memutuskan bahasa (di samping bagian bebas konteks) didasarkan pada algoritma pengurutan yang baik. Oleh karena itu harus decidable dalam "waktu linearithmic" dengan O (n log n) kasus terburuk. Saya belum menemukan, apakah kelas kompleksitas misalnya "agak konteks-sensitif" , atau "diindeks" tetapi mungkin sesuatu antara bebas konteks dan peka konteks (?).
x := a+
x := a | x a
^
a^
a
sumber
Jawaban:
Menggunakan BNF dengan operator pengulangan unik Anda,
x := S^
mengatakan bahwa sebuahx
instancea
dari simbolS
, secara opsional diikuti oleh instanceb
dari setS - a
, itu sendiri secara opsional diikuti oleh instancec
dari setS - a - b
, dan sebagainya. Jika|S|
adalah jumlah yang mungkinS
, dan terbatas, maka2 ^ |S|! - 1
adalah jumlah yang mungkinS^
.Tidak terlalu berarti untuk berbicara dalam hal kekuatan komputasi dari bahasa yang dijelaskan, karena ini adalah tentang semantik statis, di senja antara sintaks dan semantik biasa (dinamis). Kekuatan ekspresif dari tata bahasa diperluas, karena ia memiliki sarana formal untuk mengekspresikan jenis adaptasi input tertentu.
Secara khusus, ini menyediakan sarana untuk menerima permutasi dari himpunan bagian dari set tertentu. Saya rasa tidak ada nama yang ada untuk kelas bahasa ini. Ini tentu saja tidak bebas konteks, tetapi persyaratan konteks setidaknya cukup ketat dikontrol. Jika Anda membutuhkan istilah untuk itu, cukup koin satu. Saya menyarankan menghormati konteks untuk kelas bahasa yang tidak dapat dijelaskan oleh tata bahasa bebas konteks tanpa tambahan informasi yang melekat tentang kendala semantik statis, yang harus adil secara samar sintaksis dalam roh.
Aplikasi yang paling berguna dari ekstensi khusus ini mungkin hanya kemampuan untuk memperkenalkan batasan kunci unik, tetapi juga memungkinkan Anda menggambarkan set yang menarik seperti
x := [0-7]^
, yang cocok dengan angka oktal 8 atau lebih sedikit angka yang tidak diulang. Adapun kompleksitasnya, menentukan apakah suatu elemen himpunan telah terlihat tidak lebih buruk daripada logaritmik, dan frekuensi pemeriksaan adalah linier dalam jumlah elemen yang cocok, sehingga^
operator memang dapat dipilih dalam waktu linearitmik kasus terburuk.sumber
S^
manaS
beberapa CFL mungkin menjadi bebas-konteks karena CFL tidak ditutup berdasarkan perbedaan. Ini harus bisa dilakukan jikaS
merupakan bahasa biasa, tetapi sayangnya Anda tidak dapat memutuskan apakah CFL yang diberikan adalah biasa. Mungkin saya akan mengajukan pertanyaan lain karena ini melampaui batasan JSON dan XML.