JSON é uma linguagem regular?


19

Eu queria saber se a especificação JSON definiu uma linguagem regular. Parece bastante simples, mas não tenho certeza de como provar isso sozinho.

A razão pela qual pergunto é porque estava pensando se alguém poderia usar expressões regulares para analisar efetivamente o JSON.

Alguém com representante suficiente pode criar as tags e para mim?


6
Eu removi a tag [json] porque ela não parece valer uma tag no TCS SE.
— Tsuyoshi Ito

@Tsuy, parece bom. Obviamente, eu não sou um usuário ávido do site, por isso tenho certeza que você sabe melhor.
— Jjnguy

1
Lembre-se de que as implementações de regex frequentemente correspondem mais do que apenas idiomas comuns. Por exemplo, você pode usar lookaheads na maioria das implementações, que aceitarão corretamente, resolvendo o [ n x ] n problema que outros mencionados abaixo. anbn[nx]n
— Xodarap

Respostas:


28

Como não é uma linguagem regular, nem o JSON, pois [ n 5 ] n é uma entrada válida para qualquer n . Da mesma forma, seu analisador de expressões regulares teria que rejeitar adequadamente qualquer entrada [ m 4 ] n em que m ≠ n que você não pode fazer com expressões regulares.anbn[n5]nn[m4]nm≠n

Portanto, o JSON não é regular.


Curioso, qual é a notação sobrescrita / colchete usada aqui?
— jchook 24/11

31

Não, não é regular. Como permite a incorporação arbitrária de delimitadores balanceados, deve ser pelo menos livre de contexto.

Por exemplo, considere uma matriz de matrizes de matrizes:

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

Claramente, você não poderia analisar isso com expressões regulares verdadeiras.


8
Para dividir os cabelos obtusamente, as representações JSON de todas as matrizes de matrizes de matrizes de números inteiros são regulares.
— Charles Stewart

16
Continue adicionando "matrizes de" recursivamente até ficar feliz. ;-)
— Marc Hamann

1
O JSON padrão é livre de contexto, mas a maioria das implementações suporta apenas chaves exclusivas. Mudei a minha pergunta sem resposta de stackoverflow para: cstheory.stackexchange.com/questions/4668/...
— Jakob

Note que eu disse "pelo menos livre de contexto".
— Marc Hamann 31/01

Expandindo o comentário de @ CharlesStewart, isso significa que "JSON com uma profundidade máxima estrita É uma linguagem comum"? Ou outros recursos do JSON impedem isso?
— jchook 24/11
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.