在Javascript的ECMAScript grammar specification中,有一个用双冒号定义的块,如下所示:
Literal ::
NullLiteral
BooleanLiteral
NumericLiteral
StringLiteral
RegularExpressionLiteral
用单个冒号定义的块如下:
PrimaryExpression :
this
Identifier
Literal
ArrayLiteral
ObjectLiteral
( Expression )
而且,即使是带有三个冒号的块:
uriCharacter :::
uriReserved
uriUnescaped
uriEscaped
单冒号和双冒号之间有什么区别?
答案 0 :(得分:2)
JSON词法语法用于将字符序列转换为标记,类似于ECMAScript词法语法的部分。 JSON语法语法描述了JSON词法语法中的标记序列如何形成语法正确的JSON对象描述。
令牌的词法规则("::"
)表示"该语言的部分是什么样的"。它定义了类似&#34的规则; 5.5
是一个数字"。
表达式的句法规则(":"
)意味着"部件如何与彼此交互"。它定义了像#34; 5.5 abc
这样的规则没有意义"。
三重冒号(":::"
)似乎专门用于定义将字符串转换为数字的规则。字符串" 0x1235 "
(带有空格)是有效数字。三重冒号规则定义了这一点。
三重冒号(":::"
)似乎也用于uri字符串语法。最常用的方法如下:"f%20o%20o"
解码为"f o o"
。这些规则定义了"数字"的结构。部分字符串。
答案 1 :(得分:1)
请参阅Standard ECMA-262 5.1 Edition / June 2011/
5.1.1无上下文语法
无上下文语法由许多作品组成。每 生产有一个抽象的符号,称为非终结符号 左侧,以及零或更多非终结符号的序列 终端符号作为其右侧。对于每个语法, 终端符号是从指定的字母表中绘制的。
从包含单个区分的句子开始 非终结的,称为目标符号,给定的无上下文语法 指定一种语言,即(可能是无限的)可能的一组 可以重复产生的终端符号序列 用a的右边替换序列中的任何非终结符号 非终结者是左手边的生产。
5.1.6语法符号
词法和字符串语法的终端符号以及句法语法的一些终端符号以固定宽度显示 字体,在语法的制作和整个过程中 规范,只要文本直接引用这样的终端 符号。这些将完全按照书面形式出现在程序中。所有 应理解以这种方式指定的终端符号字符 作为ASCII范围内的相应Unicode字符,相反 来自其他Unicode范围的任何类似外观的字符。
非终结符号以斜体显示。 a的定义 非终结符是由定义的非终结符的名称引入的 然后是一个或多个冒号。 (冒号表示 生产属于哪种语法。)一种或多种替代方案 非终结者的右侧然后跟随后续行。 例如,句法定义:
WhileStatement :
while(Expression) Statement
表示非终结WhileStatement表示令牌,而 后跟左括号标记,后跟表达式, 后跟右括号标记,后跟一个Statement。该 Expression和Statement的出现本身就是非终结符号。 另一个例子是句法定义:
ArgumentList :
AssignmentExpression
ArgumentList , AssignmentExpression
<强> :::
强>
数字字符串语法的产生通过具有来区分 三个冒号&#34; :::&#34; 作为标点符号。
::
词法和RegExp语法的制作区别在于 有两个冒号&#34; ::&#34; 作为分隔标点符号。词汇和 RegExp语法共享一些产品。
:
语法语法的产生通过公正来区分 一个冒号&#34;:&#34; 作为标点符号。
请注意,
5.1.5 JSON语法
JSON词汇语法的制作通过具有 两个冒号&#34; ::&#34; 作为分隔标点符号。 JSON词法语法 使用ECMAScript词法语法中的一些产品。 JSON 句法语法类似于ECMAScript语法的部分 语法。 JSON语法语法的制作是有区别的 使用一个冒号&#34;:&#34; 作为分隔标点符号。