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