친구의 질문을 받아주다가 이런 내용이 나왔다.
JSON에서 숫자를 0123 으로 쓰면 에러가 나고 123으로 쓰면 에러가 안나!
처음 안 사실이었고, 왜 그런지 찾아보았다.
JSON.org 사이트의 오른쪽에서 JSON 문법의 McKeeman Form을 찾아 볼 수 있었다.
McKeeman Form is a notation for expressing grammars. It was proposed by Bill McKeeman of Dartmouth College. It is a simplified Backus-Naur Form with significant whitespace and minimal use of metacharacters.
McKeeman Form이란 BNF의 간소화 된 버전이라고 한다.
해당 McKeeman Form에서 number의 정의는 다음과 같다.
number
integer fraction exponent
interger fraction exponent 순서로 배치가 되야 한다.
integer의 정의는 다음과 같다.
integer
digit
onenine digits
'-' digit
'-' onenine digits
digit
, onenine + digits
, "-" + digit
, "-" + onnine + digits
이 4가지 중 하나로 정의되어 있다.
그리고 digits의 정의는 다음과 같이 digit 한글자 또는 digit + digits 이므로 임의 갯수의 digit이다.
digits
digit
digit digits
digit의 정의는 다음과 같이 '0' 이거나 onenine 이다.
digit
'0'
onenine
onenine의 정의는 다음과 같이 '1' 에서 '9' 까지이다.
onenine
'1' . '9'
이 모든걸 종합해보면 JSON에서 integer는 0부터 9까지의 한글자 또는 1부터 9까지의 한글자와 그 뒤에 이어지는 0부터 9까지의 여러 글자들과, 이 둘 앞에 '-'를 붙인 문자열만 허용한다. 따라서 JSON의 문법 정의 상 0123 같은 토큰은 올바른 숫자로 인식되지 않는다.
설명이 너무 좋아요! 👏🏻