jiy*_*ong 51 javascript abstract-syntax-tree
抽象语法树..我总是听说在Github上编译为SpiderMonkey AST.
那么,这是JS语法树的实际标准吗?还有V8,是V8使用相同类型的AST吗?
我该怎么玩?
cui*_*ing 46
你可以看看AST探险家.一个在线工具,用于探索由10多个解析器生成的AST.它是学习语言AST树的好工具.
来自Github.com的AST资源管理器.
2.此外,您可以将您的js代码粘贴到JavaScript AST可视化工具中,然后单击"显示ast"按钮,您将看到AST可见.
演示js代码:
function foo(d) {
d += 3;
return d+999
}
function bar(d) {
return d*100
}
Run Code Online (Sandbox Code Playgroud)
cod*_*ser 15
抽象语法树(AST),是程序源代码的树表示。
有几个 JavaScriptAST
标准:
以下是 JavaScript 解析器的列表:
acorn
,用于eslint;acorn
,支持所有新的语言特性Shift AST
您可以在astexplorer.net上找到更多解析器,其中大多数都是estree
兼容的。
虽然大多数支持的解析器estree
可以轻松地相互替换,但babel
拥有非常丰富的基础设施来舒适地使用AST
. 它有:
AST
-从字符串创建节点的最简单方法。AST
节点的构建器和检查器。最简单的方法之一AST
是使用putout,它基于babel
并支持在插件 APIJavaScript
的帮助下转换代码的简化方法。
这是删除节点的示例DebuggerStatement
:
module.exports.replace = () => ({
'debugger': '',
});
Run Code Online (Sandbox Code Playgroud)
如果你想交换变量的位置,改变声明的方式:
module.exports.replace = () => ({
'let __a = __b': 'const __b = __a'
});
Run Code Online (Sandbox Code Playgroud)
如果您想将此代码转换为return x[0]
:
for (const x of y) {
return x;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用:
module.exports.replace = () => ({
'for (const __a of __b) {return __a}': 'return __a[0]',
});
Run Code Online (Sandbox Code Playgroud)
在它的帮助下,putout
您可以对JavaScript
代码进行最简单的转换,而无需直接处理AST
。