Przeniosłem to pytanie z stackoverflow, gdzie id nie otrzymał odpowiedzi. Mieliśmy podobne pytanie, czy JSON jest regularny :
JSON i XML są często nazywane językami bezkontekstowymi - oba są określone głównie przez gramatykę formalną w EBNF. Jednak dotyczy to tylko JSON zdefiniowanego w RFC 4329, sekcja 2.2, który nie wymaga unikatowości kluczy obiektowych (wielu może nie wiedzieć, ale {"a": 1, "a": 2} jest prawidłowym JSON!). Ale jeśli potrzebujesz unikalnych kluczy w JSON lub unikalnych nazw atrybutów w XML, nie może to być wyrażone przez gramatyki bezkontekstowe. Ale jaka jest klasa językowa JSON z unikalnymi kluczami i dobrze sformułowanym XML (co implikuje unikalne nazwy atrybutów?).
Jeden z najlepszych artykułów, jakie znalazłem na ten temat (Murato i in., 2001: Taksonomia języków schematu XML z wykorzystaniem teorii języków formalnych ) wyraźnie wyklucza ograniczenia integralności, takie jak klucze / odwołania do kluczy i unikalność, które należy sprawdzić na dodatkowej warstwie. Poza tym podzbiór XML zdefiniowany przez schemat XML lub DTD jest pozbawiony kontekstu. Ale nie pełny zestaw wszystkich poprawnie sformatowanych dokumentów XML.
Myślę, że zagnieżdżony automat stosu (= język indeksowany) powinien być w stanie przeanalizować JSON z unikalnym ograniczeniem klucza. Dla XML można uprościć pytanie do języka S wszystkich rozdzielonych przecinkami list unikalnych liczb całkowitych. Czy ktoś wie więcej, najlepiej z cytatami?
PS: Prosty algorytm do decydowania o językach (oprócz części bezkontekstowej) oparty jest na dobrym algorytmie sortowania. Dlatego powinno być rozstrzygalne w „czasie liniowo-rytmicznym” z najgorszym przypadkiem O (n log n). Nie dowiedziałem się jeszcze, czy klasa złożoności jest na przykład „wrażliwa na kontekst” , czy „indeksowana”, ale prawdopodobnie coś pomiędzy kontekstem a kontekstem (?).
x := a+
x := a | x a
^
a^
a