Ist JSON eine reguläre Sprache?


19

Ich habe mich gefragt, ob die JSON- Spezifikation eine reguläre Sprache definiert. Es scheint einfach genug, aber ich bin nicht sicher, wie ich es selbst beweisen soll.

Der Grund, den ich frage, ist, dass ich mich gefragt habe, ob man reguläre Ausdrücke verwenden kann, um JSON effektiv zu analysieren.

Könnte jemand mit genügend Repräsentanten bitte die Tags und für mich erstellen ?


6
Ich habe das Tag [json] entfernt, da es in TCS SE kein Tag wert zu sein scheint.
Tsuyoshi Ito

@Tsuy, hört sich gut an. Offensichtlich bin ich kein begeisterter Benutzer der Website, daher bin ich sicher, dass Sie es besser wissen.
JJNGUY

1
Denken Sie daran, dass Regex-Implementierungen häufig nicht nur für reguläre Sprachen geeignet sind. Beispielsweise können Sie in den meisten Implementierungen Lookaheads verwenden, die korrekt akzeptieren und das unten erwähnte Problem lösen. [ n x ] neinnbn[nx]n
Xodarap

Antworten:


28

Da keine reguläre Sprache ist, ist JSON auch nicht, da [ n 5 ] n eine gültige Eingabe für ein beliebiges n ist . Ebenso müsste Ihr Parser für reguläre Ausdrücke alle Eingaben [ m 4 ] n, bei denen m n ist, die Sie mit regulären Ausdrücken nicht machen können , ordnungsgemäß ablehnen .einnbn[n5]nn[m4]nmn

Daher ist JSON nicht regelmäßig.


Neugierig, wie lautet die hochgestellte / eckige Notation, die hier verwendet wird?
Jchook

31

Nein, es ist nicht regelmäßig. Da es die willkürliche Einbettung ausgewogener Begrenzer ermöglicht, muss es zumindest kontextfrei sein.

Betrachten Sie beispielsweise ein Array von Arrays von Arrays:

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

Offensichtlich konnte man das nicht mit echten regulären Ausdrücken analysieren.


8
Um obtusely Haarspalterei, die JSON - Darstellungen aller Arrays von Arrays von Arrays von ganzen Zahlen ist regulär.
Charles Stewart

16
Fügen Sie dann so lange "Arrays von" rekursiv hinzu, bis Sie zufrieden sind. ;-)
Marc Hamann

1
Standard-JSON ist kontextfrei, die meisten Implementierungen unterstützen jedoch nur eindeutige Schlüssel. Ich habe meine unbeantwortete Frage von stackoverflow nach cstheory.stackexchange.com/questions/4668/…
Jakob am

Beachten Sie, dass ich "zumindest kontextfrei" sagte.
Marc Hamann

Bedeutet dies, erweitert auf den Kommentar von @ CharlesStewart, dass "JSON mit einer strengen Maximaltiefe eine reguläre Sprache ist"? Oder verhindern andere Funktionen von JSON dies?
Jchook
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.