JSON是常规语言吗?


19

我想知道JSON规范是否定义了常规语言。看起来很简单,但是我不确定如何自己证明。

我问的原因是因为我想知道是否可以使用正则表达式来有效地解析JSON。

可以请有足够代表的 人为我创建标签 吗?


6
我删除了[json]标签,因为它似乎不值得在TCS SE上使用。
伊藤刚(Tsuyoshi Ito)2010年

@Tsuy,听起来不错。显然,我不是该站点的狂热用户,所以我相信您知道的更多。
jjnguy 2010年

1
请记住,正则表达式实现通常不仅仅与常规语言匹配。例如,您可以在大多数实现中使用先行方式,它们将正确接受,从而解决了下面提到的其他问题。anbn[nx]n
Xodarap 2011年

Answers:


28

由于不是常规语言,因此JSON也非常规语言,因为是任何有效输入。同样,您的正则表达式解析器将必须正确拒绝任何输入,其中是您无法使用正则表达式执行的操作。anbn[n5]nn[m4]nmn

因此,JSON不是常规的。


很好奇,这里使用的上标/括号表示法是什么?
jchook

31

不,这不是正常的。由于它允许任意嵌入平衡定界符,因此它至少必须是上下文无关的。

例如,考虑一个由数组组成的数组:

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

显然,您无法使用真正的正则表达式进行解析。


8
为了分散头发,整数数组的所有数组的JSON表示形式都是常规的。
查尔斯·斯图尔特

16
然后继续递归添加“数组”,直到您满意为止。;-)
Marc Hamann 2010年

1
标准JSON没有上下文限制,但是大多数实现仅支持唯一键。我将未解决的问题从stackoverflow移至:cstheory.stackexchange.com/questions/4668/…–
Jakob,

请注意,我说的是“至少上下文无关”。
马克·哈曼

扩展@CharlesStewart的评论,是否表示“具有最大深度的JSON是常规语言”?还是JSON的其他功能可以防止这种情况?
jchook
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.