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 ?

jjnguy
quelle
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.

RegexFan
quelle
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.

Marc Hamann
quelle
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