(自己动手开发自己的语言练手级应用)JSON(JavaScript Object Notation) 产生式(BNF)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

 写自己的开发语言时很多人都会拿JSON当第一个练习对象

开源net json FJSON 解析工具https://dbrwe.blog.csdn.net/article/details/107611540?spm=1001.2014.3001.5502

<json> ::= <object> | <array>
<object> ::= "{" [ <members> ] "}"
<members> ::= <pair> { "," <pair> }
<pair> ::= <string> ":" <value>
<array> ::= "[" [ <elements> ] "]"
<elements> ::= <value> { "," <value> }
<value> ::= <string> | <number> | <object> | <array> | true | false | null
<string> ::= '"' characters '"'
<number> ::= integer | integer "." fraction | integer exponent
<characters> ::= ""
              | <character> <characters>
<character> ::= <any-Unicode-character-except-"-or-\-or-control-character>
<integer> ::= <digit> { <digit> }
<fraction> ::= "." <digits>
<exponent> ::= ("e" | "E") ["+" | "-"] <digits>
<digits> ::= <digit> { <digit> }
<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

以上是JSON的简化产生式表示形式。其中<json>是最顶层的规则可以是一个对象或一个数组。<object>表示一个对象由一对大括号包围内部包含零个或多个成员键值对。<members>表示成员列表每个成员之间用逗号分隔。<pair>表示一个键值对由键字符串和值组成。<array>表示一个数组由一对方括号包围内部包含零个或多个元素。<elements>表示元素列表每个元素之间用逗号分隔。<value>表示一个值可以是字符串、数值、对象、数组或者是预定义的字面量值true、false、null。<string>表示一个字符串由双引号包围。<number>表示一个数值可以是整数、带小数部分的数或指数形式的数。<characters>表示字符串中的字符序列<character>表示任意Unicode字符排除双引号、反斜杠和控制字符<integer>表示一个整数<fraction>表示小数部分<exponent>表示指数部分<digits>表示数字序列<digit>表示0到9之间的数字。

在产生式BNF中花括号{}表示其中的内容是可选的。具体来说{}用于表示一个重复出现零次或多次的语法元素。在<members><elements>和其他规则中使用花括号表示可以有零个或多个对应的成员、元素或其他语法元素。

例如在JSON的产生式中<members>的定义为<pair> { "," <pair> }其中"," <pair>部分被放在花括号中。这意味着在一个对象中可以包含零个或多个键值对并通过逗号进行分隔。当存在多个键值对时逗号后面必须跟着下一个键值对但末尾的逗号是可选的。如果没有键值对则花括号内部的内容为空即零次重复。

CBScript 自定义脚本语言(源代码官网)https://blog.csdn.net/zanfeng/article/details/116431758?spm=1001.2014.3001.5501 CBScript 为自己的软件增加脚本编写功能并自定义APIhttps://blog.csdn.net/zanfeng/article/details/120029090?spm=1001.2014.3001.5501

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: JavaScriptJava