Как я могу преобразовать пользовательский AST в код JS
В настоящее время я создаю пользовательский AST из новой языковой спецификации, которую я разработал. Этот пользовательский AST содержит различные узлы, которые я разработал со всей необходимой мне информацией, чтобы теперь генерировать код JavaScript. Например:
Скажем, у меня есть customExpressionNode, который я хочу перевести в функцию JavaScript, которая содержит пару условий if.
В настоящее время я изучаю библиотеки, такие как Babylon и Esprima, для создания нового Javascript AST из моего Custom AST, но из того, что я видел, в AST довольно много сложностей, которые используют эти библиотеки. Я также хотел бы избежать распечатки js-кода в несколько файлов, а затем их синтаксического анализа и компиляции, поэтому мой вопрос:
Есть ли лучший способ программно генерировать AST, совместимый с JavaScript, который я могу использовать для генерации кода JavaScript?
1 ответ
Что-то вроде этого? https://github.com/estools/escodegen
Простой пример: программа
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
},