javascript - NullLiteral 如何以树形式表示?

标签 javascript parsing tree ecma262 concrete-syntax-tree

根据ECMAScript specification7.8.1 节中,一个 NullLiteral 定义如下:

NullLiteral :: 
    null

我想了解的是,当 NullLiteral 包含在 7.6.1 节中的以下作品中时,它是如何以树形式表示的7.8.

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

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

InputElementDiv
    |
  Token
    |
IdentifierName
    |
ReservedWord 
    |
 Literal 
    |
NullLiteral 
    |
   null

不过这对我来说似乎不对。

注意

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

最佳答案

如图所示的树不在语法范围内,因为它不提供从 IdentifierNameReservedWord 的派生,也不提供派生 ReservedWordLiteral

ReservedWord 产生式实际上仅用于限制IdentifierName 的有效值,这应该在词法层面上看到。它不会进入 CST,在那里您只会看到 IdentifierName

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

   ...
    |
PrimaryExpression
    |
 Literal 
    |
NullLiteral 
    |
   null

关于javascript - NullLiteral 如何以树形式表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3247785/

相关文章:

c - C中B+树的简单实现

javascript - 为什么<tr/>元素的lastChild不是<td/>元素?

javascript - 有什么方法可以隐藏/禁用浏览器默认的垂直滚动条,但应该可以在全屏 View 中使用鼠标滚轮滚动

javascript - jquery如何获取ID和Title

C++:按制表符拆分字符串,但包含空格

algorithm - 平衡四叉树

javascript - 在 C# 中使用 javascript/jquery 函数在 5 秒后隐藏一个 div 和标签

从 HTML 页面中提取内容(不包括导航)的 python 方法

php - PHP 中是否有一个好的(独立的)PHPDoc 解析器类或函数?

java - BinTree 到 BinTree 的括号表示