gpt4 book ai didi

javascript - 为什么在 `IdentifierName` 的产生式中递归使用 `IdentifierName` 符号

转载 作者:行者123 更新时间:2023-11-30 11:29:37 25 4
gpt4 key购买 nike

我正在查看词汇 EcmaScript grammarIdentifierName 符号的以下产生式:

IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart

我想知道为什么语法在产生式的第二行中使用 IdentifierName

我首先想到的是 IdentifierName 可以扩展为 IdentifierStart 因此对于 IdentifierName 我们可以获得以下内容:

IdentifierName -> IdentifierStart IdentifierPart

可是这样的话不就可以这么说吗?

IdentifierName ::
IdentifierStart
IdentifierStart IdentifierPart

^^^^
here `IdentifierStart` instead of `IdentifierName`

如何使用这个语法为变量名 git 构建解析树?

最佳答案

IdentifierStartIdentifierPart 都只匹配一个字符。因此,如果规则是 IdentifierName -> IdentifierStart IdentifierPart,它只会匹配长度恰好为 2 的标识符,而您的第二个建议会匹配长度为 1 或 2 的标识符。

递归是规则如何匹配任意长度的标识符。


这里是你如何推导出“git”:

                 IdentifierName
/ \
IdentifierName IdentifierPart
/ \ |
IdentifierName IdentifierPart 't'
| |
IdentiiferStart 'i'
|
'g'

关于javascript - 为什么在 `IdentifierName` 的产生式中递归使用 `IdentifierName` 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46734732/

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