ฉันย้ายคำถามนี้จาก stackoverflowโดยที่ id ไม่มีคำตอบ เรามีคำถามที่คล้ายกันว่า JSON นั้นปกติหรือไม่ :
JSON และ XML มักถูกเรียกว่าเป็นภาษาที่ไม่มีบริบท - ทั้งคู่ถูกระบุโดยหลักไวยากรณ์อย่างเป็นทางการใน EBNF อย่างไรก็ตามสิ่งนี้เป็นจริงสำหรับ JSON ตามที่กำหนดไว้ในRFC 4329 ส่วน 2.2ซึ่งไม่ต้องการเอกลักษณ์ของคีย์วัตถุ (หลายคนอาจไม่รู้ แต่ {"a": 1, "a": 2} เป็น JSON ที่ถูกต้อง!) แต่ถ้าคุณต้องการคีย์ที่ไม่ซ้ำกันใน JSON หรือชื่อแอตทริบิวต์ที่ไม่ซ้ำกันใน XMLสิ่งนี้ไม่สามารถแสดงออกได้ด้วยไวยากรณ์ที่ไม่มีบริบท แต่คลาสภาษาใดของ JSON ที่มีคีย์เฉพาะและ XML ที่มีรูปแบบที่ถูกต้อง (ซึ่งหมายถึงชื่อแอตทริบิวต์ที่ไม่ซ้ำกัน)
หนึ่งในกระดาษที่ดีที่สุดที่ฉันพบในเรื่องนี้ (Murato et al, 2001: Taxonomy ของ XML Schema Languages โดยใช้ทฤษฎีภาษาที่เป็นทางการ ) ไม่รวมข้อ จำกัด ด้านความสมบูรณ์เช่นคีย์ / keyrefs และเอกลักษณ์ที่จะตรวจสอบในชั้นเพิ่มเติม นอกจากนี้เซตย่อยของ XML ที่กำหนดโดย XML Schema หรือโดย DTD นั้นไม่มีบริบท แต่ไม่ใช่ชุดของเอกสาร XML ที่มีรูปแบบสมบูรณ์ทั้งหมด
ฉันคิดว่าระบบซ้อนอัตโนมัติ (= ภาษาที่จัดทำดัชนี) ควรแยก JSON ด้วยข้อ จำกัด คีย์ที่ไม่ซ้ำกัน สำหรับ XML สามารถจำลองคำถามเป็นภาษา S ของรายการจำนวนเต็มที่คั่นด้วยเครื่องหมายจุลภาคทั้งหมด ไม่มีใครรู้เพิ่มเติมโดยเฉพาะอย่างยิ่งกับการอ้างอิง?
PS:อัลกอริทึมง่าย ๆ ในการตัดสินใจภาษา (ข้างส่วนที่ไม่มีบริบท) ขึ้นอยู่กับอัลกอริทึมการเรียงลำดับที่ดี ดังนั้นจึงควร decidable ใน "เวลาเชิงเส้น" กับกรณีที่เลวร้ายที่สุด O (n log n) ฉันไม่ได้พบออกยังไม่ว่าจะเป็นระดับความซับซ้อนเป็นตัวอย่าง"อย่างอ่อนโยนบริบท"หรือ"การจัดทำดัชนี"แต่มันอาจจะมีอะไรบางอย่างระหว่างบริบทฟรีและบริบท (?)
x := a+
x := a | x a
^
a^
a