Javascript语法中:和::和:::之间的区别是什么

Javascript语法中:和::和:::之间的区别是什么,javascript,grammar,Javascript,Grammar,在for Javascript中,有使用双冒号定义的块,如下所示: Literal :: NullLiteral BooleanLiteral NumericLiteral StringLiteral RegularExpressionLiteral PrimaryExpression : this Identifier Literal ArrayLiteral ObjectLiteral ( Expres

在for Javascript中,有使用双冒号定义的块,如下所示:

Literal ::
    NullLiteral
    BooleanLiteral
    NumericLiteral
    StringLiteral
    RegularExpressionLiteral
PrimaryExpression :
    this
    Identifier
    Literal
    ArrayLiteral
    ObjectLiteral
    ( Expression )
和使用单个冒号定义的块,如下所示:

Literal ::
    NullLiteral
    BooleanLiteral
    NumericLiteral
    StringLiteral
    RegularExpressionLiteral
PrimaryExpression :
    this
    Identifier
    Literal
    ArrayLiteral
    ObjectLiteral
    ( Expression )
而且,即使是带有三个冒号的块:

uriCharacter :::
    uriReserved
    uriUnescaped
    uriEscaped
单冒号、双冒号和三冒号之间有什么区别

JSON词汇语法用于将字符序列转换为标记,与ECMAScript词汇语法的某些部分类似。JSON语法描述了JSON词汇语法中的标记序列如何形成语法正确的JSON对象描述

标记的词汇规则(
“:”
)表示“语言的各个部分是什么样子的”。它定义的规则类似于“
5.5
是一个数字”

表达式的语法规则(
:“
)表示“各部分如何相互作用”。它定义了一些规则,比如“
5.5abc
没有意义”

三重冒号(
“:”
)似乎是专门为定义将字符串转换为数字的规则而保留的。字符串
“0x1235”
(带空格)是有效数字。三重冒号规则定义了这一点

三重冒号(
“:”
)似乎也用于uri字符串语法。最常用的用法如下:
“f%20o%20o”
解码为
“f%20o”
。这些规则定义字符串“数字”部分的结构。

请参见

5.1.1上下文无关语法

上下文无关语法由许多结果组成。每个 产品有一个称为非终结符的抽象符号作为其名称 左侧,以及零或更多非终结符和的序列 端子符号作为其右侧。对于每种语法 端子符号是根据指定的字母表绘制的

从一个由一个单独的句子组成的句子开始 非终结符,称为目标符号,是给定的上下文无关语法 指定一种语言,即(可能无限)可能的 重复使用可产生的端子符号序列 将序列中的任何非终结符替换为 非终结符位于左侧的产品

5.1.6语法符号

词法语法和字符串语法的末端符号以及句法语法的一些末端符号以固定宽度显示 字体,无论是在语法作品中还是在本书中 当文本直接指此类终端时,说明 象征。它们将完全按照编写的那样出现在程序中。全部的 应理解以这种方式指定的终端符号字符 作为ASCII范围内的适当Unicode字符,而不是 从其他Unicode范围复制到任何外观类似的字符

非终端符号以斜体显示。a的定义 nonterminal是由所定义的nonterminal的名称引入的 后跟一个或多个冒号(冒号的数量表示 产品属于哪种语法。)一个或多个备选方案 非终结符的右侧,然后跟随后续行。 例如,语法定义:

声明非终结符WhileStatement表示令牌,而, 后跟左括号标记,后跟表达式, 后跟右括号标记,后跟语句。这个 表达式和语句的出现本身就是非终结符。 另一个例子是,语法定义:


::

数字字符串语法的结果通过具有 三个冒号作为标点符号

词法语法和RegExp语法的结果通过 有两个冒号作为分隔标点的:“”。词汇和语法 RegExp语法共享一些产品

句法语法的产物通过仅包含 一个冒号:“作为标点符号

注意

5.1.5 JSON语法

JSON词汇语法的产物以 两个冒号::“作为分隔标点。JSON词汇语法 使用ECMAScript词汇语法中的某些结果。JSON 语法语法类似于ECMAScript语法部分 语法。JSON语法的产物是不同的 使用一个冒号“”:“作为分隔标点


如中所述。请参阅第5.1.1至5.1.5小节。@guest271314-我试图理解JS语法的一些细节,并认为冒号差异一定有什么意义。仅供参考,我研究JS语法的原因之一是这个问题和答案:刚刚意识到也有三个冒号(添加到问题中).虽然我确信这是正确的,但不清楚这种区别如何适用于给出的例子。你能澄清一下这些例子之间的区别吗?你能解释一下你所写的内容如何适用于我在问题中引用的三个例子吗?因为我没有按照你的解释来做。例如,为什么Literal会使用
后面列出的项目不是关于与部件交互的-它们是一个项目列表,这些项目本身都可以是文字。@jfriend00,你明白了吗?我相信
表示在词法分析过程中用于生成输入标记流的语法,而
语法在语法分析过程中用于生成解析树。那么“词法和RegExp语法的生成”、“语法语法的生成”和“数字字符串语法的产物”。我在规范中读过,不知道它们是什么。我正在找人解释