【发布时间】:2020-09-23 04:55:47
【问题描述】:
我对如何正确阅读 this syntax line 感到困惑。
- 为什么
IdentifierName是用IdentifierName定义的? - 为什么定义中间有一个换行?
如何阅读这个符号?
语法
标识符名称 :: 标识符开始 IdentifierName IdentifierPart
【问题讨论】:
标签: ecmascript-6 ecmascript-next
我对如何正确阅读 this syntax line 感到困惑。
IdentifierName 是用IdentifierName 定义的?如何阅读这个符号?
语法
标识符名称 :: 标识符开始 IdentifierName IdentifierPart
【问题讨论】:
标签: ecmascript-6 ecmascript-next
这是一个递归定义,在语法符号中并不少见。
IdentifierName 由IdentifierStart 或IdentifierName IdentifierPart 组成。如果我们再次在第二种选择中扩展IdentifierName,我们会得到 p>
IdentifierStart IdentifierPart
IdentifierName IdentifierPart IdentifierPart
等等。
以非正式的方式表达这一点:IdentifierName 由IdentifierStart 后跟任意数量的IdentifierParts 组成。
再举一个例子,句法定义:
ArgumentList: AssignmentExpression ArgumentList,AssignmentExpression表示
ArgumentList可以表示单个AssignmentExpression或ArgumentList,后跟逗号,再后跟AssignmentExpression。ArgumentList的这个定义是递归的,也就是说,它是根据自身定义的。结果是ArgumentList可以包含任何正数的参数,用逗号分隔,其中每个参数表达式都是一个AssignmentExpression。这种非终结符的递归定义很常见。
【讨论】:
IdentifierName IdentifierPart 扩展为 IdentifierStart IdentifierPart (IdentifierName -> IdentifierStart) 或 IdentifierName IdentifierPart IdentifierPart (IdentifierName -> IdentifierName IdentifierPart)。