gpt4 book ai didi

json - 关于 EBNF 表示法和 JSON 的问题

转载 作者:行者123 更新时间:2023-12-04 16:21:44 26 4
gpt4 key购买 nike

最近我一直在研究解析器和语法以及它们是如何工作的。我在 http://www.ietf.org/rfc/rfc4627.txt 阅读了 JSON 的正式语法。 ,它使用 EBNF。我对自己对 BNF 和 EBNF 的理解非常有信心,但显然我仍然没有完全理解它。 RFC 定义了一个 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

最佳答案

在提到的文件中,http://www.ietf.org/rfc/rfc4627.txt ,据说

The grammatical rules in this document are to be interpreted as described in [RFC4234].



RFC4234描述 ABNF(增强 BNF),而不是 EBNF。
如果您仔细阅读本文档,您会发现以下定义:
3.6.  Variable Repetition:  *Rule

The operator "*" preceding an element indicates repetition. The full
form is:

<a>*<b>element

where <a> and <b> are optional decimal values, indicating at least
<a> and at most <b> occurrences of the element.

Default values are 0 and infinity so that *<element> allows any
number, including zero; 1*<element> requires at least one;
3*3<element> allows exactly 3 and 1*2<element> allows one or two.

所以,记号
*( value-separator member )

根据 ABNF 定义是正确的,并允许任意数量的重复,包括零。

关于json - 关于 EBNF 表示法和 JSON 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4118362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com