Tôi đã chuyển câu hỏi này từ stackoverflow nơi id không có câu trả lời. Chúng tôi đã có một câu hỏi tương tự cho dù JSON có thường xuyên không :
JSON và XML thường được gọi là ngôn ngữ không ngữ cảnh - cả hai đều được chỉ định chủ yếu bởi một ngữ pháp chính thức trong EBNF. Tuy nhiên, điều này chỉ đúng với JSON như được định nghĩa trong RFC 4329, phần 2.2 không yêu cầu tính duy nhất của các khóa đối tượng (nhiều người có thể không biết nhưng {"a": 1, "a": 2} là JSON hợp lệ!). Nhưng nếu bạn yêu cầu các khóa duy nhất trong JSON hoặc các tên thuộc tính duy nhất trong XML thì điều này không thể được biểu thị bằng một ngữ pháp không ngữ cảnh. Nhưng đó là lớp ngôn ngữ của JSON với các khóa duy nhất và cho XML được định dạng tốt (hàm ý các tên thuộc tính duy nhất?).
Một trong những bài báo hay nhất tôi tìm thấy về chủ đề này (Murato et al, 2001: Phân loại ngôn ngữ lược đồ XML bằng lý thuyết ngôn ngữ chính thức ) loại trừ rõ ràng các ràng buộc toàn vẹn như khóa / keyrefs và tính duy nhất được kiểm tra trên một lớp bổ sung. Bên cạnh đó, tập hợp con XML được xác định bởi Lược đồ XML hoặc bởi DTD là không có ngữ cảnh. Nhưng không phải là tập hợp đầy đủ của tất cả các tài liệu XML được định dạng tốt.
Tôi nghĩ rằng một máy tự động ngăn xếp lồng nhau (= ngôn ngữ được lập chỉ mục) sẽ có thể phân tích cú pháp JSON với ràng buộc khóa duy nhất. Đối với XML có thể mô phỏng câu hỏi thành ngôn ngữ S của tất cả các danh sách số nguyên duy nhất được phân tách bằng dấu phẩy. Có ai biết nhiều hơn, tốt nhất là với trích dẫn?
PS: Một thuật toán đơn giản để quyết định các ngôn ngữ (bên cạnh phần không ngữ cảnh) dựa trên thuật toán sắp xếp tốt. Do đó, nó có thể được quyết định trong "thời gian tuyến tính" với trường hợp xấu nhất O (n log n). Tôi vẫn chưa phát hiện ra, liệu lớp phức tạp là ví dụ "nhạy cảm với ngữ cảnh" hay "được lập chỉ mục" nhưng có lẽ là thứ gì đó giữa không ngữ cảnh và nhạy cảm ngữ cảnh (?).
x := a+
x := a | x a
^
a^
a