Bu soruyu id'in yanıtları olmadığı stackoverflow'dan taşıdım . JSON'un düzenli olup olmadığı konusunda benzer bir sorum vardı :
JSON ve XML'nin her ikisi de genellikle bağlamsız diller olarak adlandırılır - her ikisi de esas olarak EBNF'deki resmi bir dilbilgisi ile belirtilir. Ancak bu sadece nesne anahtarlarının benzersizliğini gerektirmeyen RFC 4329, bölüm 2.2'de tanımlanan JSON için geçerlidir (birçoğu bilmeyebilir ancak {"a": 1, "a": 2} geçerli JSON!). Ancak JSON'da benzersiz anahtarlara veya XML'de benzersiz öznitelik adlarına ihtiyacınız varsa, bu bağlam içermeyen gramerlerle ifade edilemez. Ancak, benzersiz anahtarlara ve iyi biçimlendirilmiş XML'e (benzersiz özellik adlarını ima eden) sahip JSON'un dil sınıfı hangisidir?
Bu konuda bulduğum en iyi makalelerden biri (Murato ve ark., 2001: Biçimsel Dil Teorisini Kullanan XML Şema Dillerinin Taksonomisi ), anahtar / keyref gibi bütünlük kısıtlamalarını ve ek bir katmanda denetlenecek tekliği kısıtlar. Bunun yanı sıra, bir XML Şeması veya bir DTD tarafından tanımlanan XML alt kümesi bağlamdan bağımsızdır. Ancak tüm iyi biçimlendirilmiş XML belgelerinin tamamı değil.
Bence bir iç içe yığın otomatı (= dizinlenmiş dil) benzersiz anahtar kısıtlaması ile JSON ayrıştırmak gerekir. XML, soruyu, benzersiz tamsayıların virgülle ayrılmış tüm listelerinin S diline simleyebilir. Tercihen alıntılarla daha fazlasını bilen var mı?
Not: Dillere karar vermek için basit bir algoritma (bağlamsız bölümün yanında) iyi bir sıralama algoritmasına dayanır. Bu nedenle "lineeritmik zamanda" O (n log n) en kötü durumda karar verilebilir olmalıdır. Karmaşıklık sınıfının örneğin "hafif içeriğe duyarlı" veya "dizinli" olup olmadığını, ancak muhtemelen bağlamsız ve içeriğe duyarlı (?) Arasında bir şey olup olmadığını henüz bulamadım .
x := a+
x := a | x a
^
a^
a