JSONは通常の言語ですか?


19

JSON仕様が通常の言語を定義しているかどうか疑問に思っていました。簡単そうに思えますが、自分でそれを証明する方法はわかりません。

私が尋ねる理由は、JSONを効果的に解析するために正規表現を使用できるかどうか疑問に思ったからです。

十分な担当者がいる人は、 タグを作成してください。


6
タグ[json]を削除したのは、TCS SEのタグには価値がないようだからです。
伊藤剛

@Tsuy、いいですね。明らかに、私はサイトの熱心なユーザーではないので、あなたはよりよく知っていると確信しています。
jjnguy

1
正規表現の実装は、通常の言語よりも頻繁に一致することに注意してください。たとえば、ほとんどの実装で先読みを使用できます。これは正しく受け入れ以下で説明する[ n x ] nの問題を解決します。anbn[nバツ]n
-Xodarap

回答:


28

[ n 5 ] nは任意のnに対して有効な入力であるためは通常の言語ではないため、どちらもJSONではありません。同様に、正規表現のパーサは適切に任意の入力拒否しなければならない[ メートル 4 ] nは Mをnはあなたが正規表現を行うことができません。anbn[n5]nn[m4]nmn

したがって、JSONは正規ではありません。


好奇心が強い、ここで使用されている上付き文字/ブラケット表記は何ですか?
jchook

31

いいえ、定期的ではありません。バランスのとれた区切り文字の任意の埋め込みを許可するため、少なくともコンテキストフリーでなければなりません。

たとえば、配列の配列の配列を考えます。

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

明らかに、真の正規表現ではそれを解析できませんでした。


8
髪を鈍く分割するために、整数の配列の配列のすべての配列のJSON表現規則的です。
チャールズスチュワート

16
その後、満足するまで「の配列」を再帰的に追加し続けます。;-)
マークハーマン

1
標準JSONはコンテキストに依存しませんが、ほとんどの実装は一意のキーのみをサポートします。未回答の質問をstackoverflowからcstheory.stackexchange.com/questions/4668/
Jakob

「少なくともコンテキストフリー」と言ったことに注意してください。
マークハーマン

@CharlesStewartのコメントを拡張すると、これは「厳密な最大深度を持つJSONは通常の言語である」という意味ですか?または、JSONの他の機能がこれを防ぎますか?
jchook
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.