根据 ECMAScript 规范 在部分 7.8.1 A NullLiteral 定义如下:

NullLiteral :: 
    无效的

我想要理解的是,当 NullLiteral 包含在以下部分中的作品中 7.6.17.8.

ReservedWord :: 
    Keyword 
    FutureReservedWord 
    NullLiteral 
    BooleanLiteral 
Literal :: 
    NullLiteral 
    BooleanLiteral 
    NumericLiteral 
    StringLiteral 

我对其外观的最佳猜测是:

InputElementDiv
    |
  Token
    |
IdentifierName
    |
ReservedWord 
    |
 Literal 
    |
NullLiteral 
    |
   无效的

但这对我来说似乎不太合适。

笔记

根据我的研究,似乎很少有编译器真正从语言语法生成 CST。我当然可以理解为什么,但这对我来说是一个学习练习,所以我想在转向更专业的解析方法(例如使用解析器生成器)之前先解决这个问题。

有帮助吗?

解决方案

如图所示的树没有被语法覆盖,因为它没有提供从 IdentifierNameReservedWord, ,并且它不提供导出 ReservedWordLiteral 任何一个。

ReservedWord 事实上,生产仅用于限制有效值 IdentifierName, ,这应该从词汇层面来看。它不会进入 CST,在那里您只会看到 IdentifierName.

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

   ...
    |
PrimaryExpression
    |
 Literal 
    |
NullLiteral 
    |
   null
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top