Недавно я изучал синтаксические анализаторы и грамматику и то, как они работают. Я читал формальную грамматику для JSON по адресу http://www.ietf.org/rfc/rfc4627.txt
, в котором используется EBNF. Я был довольно уверен в своем понимании BNF и EBNF, но, видимо, до сих пор не совсем понимаю это. RFC определяет объект JSON следующим образом:
object = begin-object [ member *( value-separator member ) ]
end-object
Я понимаю, что намерение здесь состоит в том, чтобы выразить, что любой объект JSON может (необязательно) иметь член, а затем следовать 0 или более пар (разделитель значений, член). Я не понимаю, почему звездочка появляется перед (член-разделитель значений)
. Разве звездочка не должна имитировать регулярное выражение, чтобы она появлялась после , элемент, который нужно повторить 0 или более раз? Разве грамматика объектов JSON не должна быть записана так:
object = begin-object [ member ( value-separator member )* ]
end-object