Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是JavaScript AST,如何使用它?_Javascript_Abstract Syntax Tree - Fatal编程技术网

什么是JavaScript AST,如何使用它?

什么是JavaScript AST,如何使用它?,javascript,abstract-syntax-tree,Javascript,Abstract Syntax Tree,抽象语法树。。我总是听说在Github上编译到SpiderMonkey AST。 那么,这是JS语法树的实际标准吗?还有V8,V8使用的是同一种AST吗 我该怎么玩呢?SpiderMonkey提供了。这可能是获得语法对象的最简单方法 还有一些开放的js解析器,比如(实际上是ECMAScript,但它很流行)1。您可以看看。一个在线工具,用于探索由10多个解析器生成的AST。这是学习一门语言的好工具。 2.您还可以将js代码粘贴到中,然后单击“show ast”按钮,您将看到ast 演示js

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

我该怎么玩呢?

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

还有一些开放的js解析器,比如(实际上是ECMAScript,但它很流行)

1。您可以看看。一个在线工具,用于探索由10多个解析器生成的AST。这是学习一门语言的好工具。


2.您还可以将js代码粘贴到中,然后单击“show ast”按钮,您将看到ast

演示js代码:

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

如果您想试用Marijnh教授的acron解析器 请尝试以下链接:

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

上面提到的使用Esprima引擎,也用JavaScrpt编写

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

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


<>这两种Web浏览器引擎都有C++内部写的AST处理。这就是为什么除了
eval
之外,JavaScrpt代码在大多数情况下都能快速运行的原因

我只知道Javascript AST的一个规范:

它起源于Mozilla的Dave Herman的出版物,并从那时起演变为社区标准。所以它应该在某种程度上与SpiderMonkey匹配,但我不确定V8和JSC

如果有人能提供更多信息,我们将不胜感激。

抽象语法树(AST),是程序源代码的树表示形式

有两个JavaScript
AST
标准:

  • -EcmaScript AST标准
  • -设计时考虑到转型
  • -支持尚未成为标准的语言功能,但具有
以下是JavaScript解析器列表:

  • 第一个
  • 非常受欢迎,快速稳定
  • 基于
    acorn
    ,用于
  • 基于
    acorn
    ,支持所有新的语言功能
  • 生成
    Shift AST
  • 可以解析JavaScript和TypeScript,并为此生成自己的AST格式
您可以在上找到更多的解析器,其中大多数是兼容的

虽然大多数支持
estree
的解析器可以很容易地相互替换,
babel
具有非常广泛的基础架构,可以轻松地使用
AST
。 它有:

  • 描述所有的工具和使用方法
  • -维护整体树状态,并负责替换、移除和添加节点
  • -从字符串创建
    AST
    -节点的最简单方法
  • -包含
    AST
    -节点的生成器和检查器
使用
AST
最简单的方法之一是使用,它基于
babel
,并支持借助的简化方式转换
JavaScript
代码

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

module.exports.replace=()=>({
“调试器”:“,
});
如果要切换变量的位置,请更改声明方式:

module.exports.replace=()=>({
'let uuu a=uuu b':'const uuu b=uuu a'
});
如果要将此代码转换为
返回x[0]

for(常数x/y){
返回x;
}
您可以使用:

module.exports.replace=()=>({
'对于{return}的(const{return}a:'return{a[0]',
});

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

这里有一个方便的JavaScript AST执行可视化:此图像的好处是什么?有帮助吗?视频链接无效谢谢@JuanPicado,我删除了链接。