什么是 JavaScriptAST,如何使用它?

抽象语法树. . 我总是听说在 Github 上编译到 spiderMonkey AST。
那么,这是 JS 语法树的实际标准吗?还有 V8引擎,V8引擎使用的是同样的 AST 吗?

我怎么玩啊?

45321 次浏览

SpiderMonkey 提供了 解析 api。这可能是获得语法对象的最简单方法。

还有像 埃斯普里马这样的开放式 Js-js解析器(实际上是 ECMAScript,但它正好适合这个领域)

1.你可以看看 AST 探测器。一个在线工具,用于探索由10多个解析器生成的 AST。它是学习语言的 AST 树的一个很好的工具。
来源: Github.com。

enter image description here


2. 还可以将 js 代码粘贴到 JavaScript AST 可视化工具中,点击“ show AST”按钮,就可以看到 AST 了。

Demo js code:

function foo(d) {
d += 3;
return d+999
}
function bar(d) {
return d*100
}

js ast demo

如果您想尝试 Marijnh 教授的 acron 解析器 Https://github.com/marijnh 请点击这个链接: http://astExplorer.net/rel = “ nofollow norefrer”> https://astexplorer.net/

这是一个小巧、快速的 JavaScript 解析器,完全用 JavaScript 编写。

上面提到的 JavaScript AST 可视化工具使用 Esprima 引擎,也是用 JavaScript 编写的。

在解析 AST 中,JavaScript 占主导地位,因为今天的 JavaScript 引擎已经进行了超级优化

JS 语法树的 AST 标准? V8使用的是同一种 AST 吗?

这两个 Web 浏览器引擎内部都有用 C + + 编写的 AST 处理。这就是为什么 JavaScript 代码在大多数情况下运行得很快,除了 eval

我只知道一种 Javascript AST 规范: https://github.com/estree/estree

它起源于 Mozilla 的 DaveHerman 的出版物,从那时起逐渐发展成为社区标准。所以它应该在某种程度上匹配蜘蛛猴,但我不确定 V8和 JSC。

如果有人能提供更多有关此事的信息,将不胜感激。

抽象语法树(AST)是程序源代码的树状表示。

有一些 JavaScript AST标准:

下面是 JavaScript 解析器的列表:

您可以在 天文探索者网站上找到更多的解析器,其中大多数与 estree兼容。

虽然大多数支持 estree的解析器可以很容易地互相替换,但是 babel具有非常广泛的基础设施,这是使用 AST进行舒适工作所必需的。 的确如此:

使用 AST最简单的方法之一是使用 不爽,它基于 babel,并支持借助 插件 API转换 JavaScript代码的简化方法。

下面是删除 DebuggerStatement节点的例子:

module.exports.replace = () => ({
'debugger': '',
});

如果你想切换变量的位置,改变声明的方式:

module.exports.replace = () => ({
'let __a = __b': 'const __b = __a'
});

如果你想把这段代码转换成 return x[0]:

for (const x of y) {
return x;
}

你可使用:

module.exports.replace = () => ({
'for (const __a of __b) {return __a}': 'return __a[0]',
});

putout的帮助下,您可以对 JavaScript代码进行最简单的转换,而无需直接使用 AST