Récemment, j'ai étudié les parseurs et les grammaires et comment ils fonctionnent. Je lisais la grammaire formelle pour JSON au http://www.ietf.org/rfc/rfc4627.txt
, qui utilise EBNF. J'étais assez confiant dans ma compréhension de BNF et EBNF, mais apparemment je ne comprends toujours pas complètement. La RFC définit un objet JSON comme ceci:Question sur la notation EBNF et JSON
object = begin-object [ member *(value-separator member) ]
end-object
je comprendre que l'intention est ici pour exprimer que tout objet JSON peut (éventuellement) avoir un élément, et ensuite être suivi par 0 ou plus (valeur-séparateur, membre) paires. Ce que je ne comprends pas, c'est pourquoi l'astérisque apparaît avant le (value-separator member)
. Est-ce que l'astérisque n'est pas censé imiter regex, de sorte qu'il apparaît après l'élément à répéter 0 ou plusieurs fois? Ne doit pas la grammaire de l'objet JSON être écrit comme ceci:
object = begin-object [ member (value-separator member)* ]
end-object