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

How can I transform a custom AST into JS code

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

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

我目前正在研究 Babylon 和 Esprima 等库,以便从我的自定义 AST 生成新的 Javascript AST,但据我所知,这些库在 AST 中存在相当多的复杂性采用。我也想避免将js代码打印成几个文件然后解析和编译它们,所以我的问题是:

是否有更好的方法以编程方式生成我可以用来生成 JavaScript 代码的 JavaScript 兼容 AST?

是这样的吗? https://github.com/estools/escodegen

A simple example: the program

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

生成字符串 '40 + 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
},