Как я могу преобразовать пользовательский 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
},


Другие вопросы по тегам