JSON có phải là ngôn ngữ thông thường không?


19

Tôi đã tự hỏi nếu thông số JSON xác định một ngôn ngữ thông thường. Có vẻ như đủ đơn giản, nhưng tôi không chắc làm thế nào để chứng minh điều đó.

Lý do tôi hỏi, là vì tôi đã tự hỏi liệu người ta có thể sử dụng các biểu thức chính quy để phân tích cú pháp JSON hiệu quả hay không.

Ai đó có đủ đại diện vui lòng tạo các thẻ cho tôi không?


6
Tôi đã xóa thẻ [json] vì dường như thẻ đó không có giá trị trên TCS SE.
Tsuyoshi Ito

@Tsuy, nghe hay đấy. Rõ ràng tôi không phải là người thích sử dụng trang web, vì vậy tôi chắc chắn bạn biết rõ hơn.
jjnguy

1
Hãy nhớ rằng việc triển khai regex thường xuyên phù hợp hơn là các ngôn ngữ thông thường. Ví dụ như bạn có thể sử dụng lookaheads trong hầu hết các trường, mà sẽ chấp nhận một cách chính xác, giải quyết các [ n x ] n vấn đề khác đề cập dưới đây. anbn[nx]n
Xodarap

Câu trả lời:


28

anbn[n5]nn[m4]nmn

Do đó, JSON không thường xuyên.


Tò mò, ký hiệu siêu ký tự / khung được sử dụng ở đây là gì?
jchook

31

Không, nó không thường xuyên. Vì nó cho phép nhúng tùy ý các dấu phân cách cân bằng, nên ít nhất nó phải không có ngữ cảnh.

Ví dụ, hãy xem xét một mảng các mảng của mảng:

[ [ [ 1, 2], [2, 3] ] , [ [ 3, 4], [ 4, 5] ] ] 

Rõ ràng bạn không thể phân tích điều đó với các biểu thức chính quy thực sự.


8
Để chia tóc một cách khéo léo, các biểu diễn JSON của tất cả các mảng của mảng các số nguyên thường xuyên.
Charles Stewart

16
Sau đó tiếp tục thêm "mảng" theo cách đệ quy cho đến khi bạn hài lòng. ;-)
Marc Hamann

1
JSON chuẩn không có ngữ cảnh, nhưng hầu hết các triển khai chỉ hỗ trợ các khóa duy nhất. Tôi đã chuyển câu hỏi chưa được trả lời của mình từ stackoverflow sang: cstheory.stackexchange.com/questions/4668/ chủ
Jakob

Lưu ý rằng tôi đã nói "ít nhất là không có ngữ cảnh".
Marc Hamann

Mở rộng trên nhận xét của @ CharlesStewart, điều này có nghĩa là "JSON với độ sâu tối đa nghiêm ngặt LÀ ngôn ngữ thông thường"? Hay các tính năng khác của JSON ngăn chặn điều này?
jchook
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.