根据7.8.1节中的ECMAScript specificationNullLiteral的定义如下:

NullLiteral ::
    空值


我想了解的是,当在7.6.1和7.8节中找到的以下产生式中包含NullLiteral时,如何以树形式表示它。

ReservedWord ::
    关键词
    未来保留字
    空文字
    布尔文字
文字::
    空文字
    布尔文字
    数值文学
    字符串字面量


关于它的外观,我最好的猜测是:

InputElementDiv
    |
  代币
    |
标识符名称
    |
保留字
    |
 文字
    |
空文字
    |
   空值


不过,这对我来说似乎并不正确。

注意

根据我的研究,似乎很少有编译器实际上从语言语法生成CST。我当然可以理解为什么,但是这对我来说是一个学习练习,因此我想在使用更专业的解析方法(例如使用解析器生成器)之前弄清楚这一点。

最佳答案

所示树没有被语法覆盖,因为它不提供从IdentifierNameReservedWord的派生,也没有提供从ReservedWordLiteral的派生。

实际上,ReservedWord生成仅用于限制IdentifierName的有效值,这应该在词汇层面上看到。它不会进入CST,您只能在其中看到IdentifierName

Literal的上下文是PrimaryExpression,因此实际CST的片段可能如下所示:

   ...
    |
PrimaryExpression
    |
 Literal
    |
NullLiteral
    |
   null

10-01 19:17