如何将自定义AST转换为JS代码

时间:2018-04-03 12:04:09

标签: javascript code-generation abstract-syntax-tree esprima babel-babylon

我目前正在根据我设计的新语言规范生成自定义AST。这个自定义AST包含我设计的不同节点,其中包含我现在生成JavaScript代码所需的所有信息。例如:

假设我有一个customExpressionNode,我希望将其转换为包含几个if条件的JavaScript函数。

我目前正在研究像Babylon和Esprima这样的库来从我的自定义AST生成新的Javascript AST,但是从我所看到的这些库中使用的AST有很多复杂性。我还想避免将js代码打印成几个文件然后解析和编译它们,所以我的问题是:

是否有更好的方法以编程方式生成符合JavaScript的AST,我可以使用它来生成JavaScript代码?

2 个答案:

答案 0 :(得分:2)

安装@babel/generator

npm install --save-dev @babel/generator
const { default: generate } = require("@babel/generator");

Identifier(path) {
  console.log(generate(path.node).code); // code string
},


答案 1 :(得分:0)

这样的东西? https://github.com/estools/escodegen

  

一个简单的例子:程序

escodegen.generate({
    type: 'BinaryExpression',
    operator: '+',
    left: { type: 'Literal', value: 40 },
    right: { type: 'Literal', value: 2 }
})

生成字符串'40 + 2'