如何将自定义 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
},
我目前正在根据我设计的新语言规范生成自定义 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
},