JSON è una lingua normale?


19

Mi chiedevo se le specifiche JSON definissero un linguaggio regolare. Sembra abbastanza semplice, ma non sono sicuro di come dimostrarlo da solo.

Il motivo per cui lo chiedo è perché mi chiedevo se si potevano usare espressioni regolari per analizzare efficacemente JSON.

Qualcuno con abbastanza rappresentante potrebbe creare i tag e il per me?


6
Ho rimosso il tag [json] perché non sembra valere un tag su TCS SE.
Tsuyoshi Ito,

@Tsuy, suona bene. Ovviamente non sono un avido utente del sito, quindi sono sicuro che lo sai meglio.
jjnguy,

1
Ricorda che le implementazioni regex corrispondono spesso a più di semplici lingue. Ad esempio, puoi usare lookaheads nella maggior parte delle implementazioni, che accetteranno correttamente , risolvendo il problema [ n x ] n altri menzionati di seguito. anbn[nx]n
Xodarap,

Risposte:


28

Poiché non è una lingua normale, nemmeno JSON è, poiché [ n 5 ] n è un input valido per qualsiasi n . Allo stesso modo, il parser delle espressioni regolari dovrebbe rifiutare correttamente qualsiasi input [ m 4 ] n dove m n che non è possibile eseguire con le espressioni regolari.anbn[n5]nn[m4]nmn

Quindi, JSON non è regolare.


Curioso, qual è la notazione in apice / parentesi usata qui?
Jchook,

31

No, non è normale. Poiché consente l'incorporamento arbitrario di delimitatori bilanciati, deve essere almeno privo di contesto.

Ad esempio, si consideri una matrice di matrici di matrici:

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

Chiaramente non puoi analizzarlo con espressioni regolari vere.


8
Per dividere in modo ottuso i peli, le rappresentazioni JSON di tutti gli array di array di array di numeri interi sono regolari.
Charles Stewart,

16
Quindi continua ad aggiungere "array di" in modo ricorsivo fino a quando non sei soddisfatto. ;-)
Marc Hamann,

1
Lo standard JSON è privo di contesto, ma la maggior parte delle implementazioni supporta solo chiavi univoche. Ho spostato la mia domanda senza risposta da StackOverflow a: cstheory.stackexchange.com/questions/4668/…
Jakob

Nota che ho detto "almeno senza contesto".
Marc Hamann,

Espandendo il commento di @ CharlesStewart, questo significa che "JSON con una profondità massima rigorosa È un linguaggio normale"? O altre funzionalità di JSON lo impediscono?
Jchook,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.