JSON เป็นภาษาปกติหรือไม่


19

ฉันสงสัยว่าข้อมูลจำเพาะJSONกำหนดภาษาปกติหรือไม่ ดูเหมือนง่ายพอ แต่ฉันไม่แน่ใจว่าจะพิสูจน์ด้วยตัวเองได้อย่างไร

เหตุผลที่ฉันถามก็เพราะฉันสงสัยว่าใครสามารถใช้การแสดงออกปกติเพื่อแยกวิเคราะห์ JSON ได้อย่างมีประสิทธิภาพ

มีคนที่มีตัวแทนเพียงพอโปรดสร้างแท็ก และ สำหรับฉัน


6
ฉันลบแท็ก [json] เพราะดูเหมือนจะไม่คุ้มค่ากับแท็กใน TCS SE
Tsuyoshi Ito

@Tsuy ฟังดูดี เห็นได้ชัดว่าฉันไม่ใช่ผู้ใช้ไซต์ตัวยงดังนั้นฉันแน่ใจว่าคุณรู้ดีกว่า
jjnguy

1
โปรดจำไว้ว่าการใช้งาน regex มักจะจับคู่มากกว่าภาษาทั่วไป เช่นคุณสามารถใช้ lookaheads ในการใช้งานมากที่สุดซึ่งจะยอมรับn nอย่างถูกต้องแก้[ n x ] nปัญหาอื่น ๆ ที่ระบุไว้ด้านล่าง anbn[nx]n
Xodarap

คำตอบ:


28

ตั้งแต่n nไม่ได้เป็นภาษาปกติไม่เป็น JSON ตั้งแต่[ n 5 ] nคือการใส่ที่ถูกต้องสำหรับการใด ๆn ตัวแยกวิเคราะห์นิพจน์ปกติของคุณจะต้องปฏิเสธอินพุตใด ๆ[ m 4 ] nโดยที่m nซึ่งคุณไม่สามารถทำได้ด้วยนิพจน์ทั่วไปanbn[n5]nn[m4]nmn

ดังนั้น JSON ไม่ปกติ


อยากรู้อยากเห็นสัญกรณ์ยก / วงเล็บที่ใช้ที่นี่คืออะไร?
jchook

31

ไม่มันไม่ใช่เรื่องปกติ เนื่องจากอนุญาตให้มีการฝังตัวคั่นที่กำหนดเองอย่างอิสระจึงต้องไม่มีบริบทอย่างน้อยที่สุด

ตัวอย่างเช่นพิจารณาอาร์เรย์ของอาร์เรย์ของอาร์เรย์:

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

เห็นได้ชัดว่าคุณไม่สามารถแยกวิเคราะห์ด้วยนิพจน์ทั่วไปที่แท้จริง


8
หากต้องการแยกเส้นขนอย่างชัดเจนการแทน JSON ของอาร์เรย์ทั้งหมดของอาร์เรย์ของจำนวนเต็มเป็นปกติ
Charles Stewart

16
จากนั้นเพิ่ม "อาร์เรย์ของ" ซ้ำเรื่อย ๆ จนกว่าคุณจะมีความสุข ;-)
Marc Hamann

1
JSON มาตรฐานไม่มีบริบท แต่การนำไปใช้ส่วนใหญ่สนับสนุนเฉพาะคีย์ที่ไม่ซ้ำกัน ฉันย้ายคำถามที่ยังไม่ได้รับคำตอบจาก stackoverflow ไปยัง: cstheory.stackexchange.com/questions/4668/…
Jakob

โปรดทราบว่าฉันพูดว่า "อย่างน้อยต้องไม่มีบริบท"
Marc Hamann

การขยายความคิดเห็นของ @ CharlesStewart หมายความว่า "JSON ที่มีความลึกสูงสุดเป็นภาษาปกติ" หรือไม่? หรือคุณสมบัติอื่น ๆ ของ JSON ป้องกันหรือไม่
jchook
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.