标签: babel-babylon

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

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

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

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

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

javascript code-generation abstract-syntax-tree esprima babel-babylon

7
推荐指数
1
解决办法
2837
查看次数

为什么Babel使用自上而下的解析器?

我正在研究编译器构造,我自然也在研究这些概念的现实世界.其中一个例子是巴贝尔的解析者:巴比伦.

我浏览了Babylon的代码,它似乎使用了带有嵌入式临时语义规则的Top Down解析器.SRC

我期待Babel使用LR解析器的成员,并且可能是一个定义文件,其中语法产生与语义规则耦合在一起.为什么?好吧,主要是因为一堆其他现实世界的langs使用lr解析器生成器,如Yacc,Bison等,它们为您提供了这个精确的界面,并且似乎是一种更清晰,更易于维护的方式来表示这些规则,甚至更多考虑到Babel生活在Javascript标准的边缘,一直在实现新的东西.

我也构建了自顶向下和自底向上(lr)解析器,我没有看到两者之间的实现难度差异很大(两者都同样困难:))

那么,为什么Babel的解析器使用自顶向下的ad hoc语法定向翻译而不是我认为更结构化的方法呢?背后的设计决策是什么?我错过了什么?

谢谢!

javascript compiler-construction parsing babeljs babel-babylon

3
推荐指数
1
解决办法
210
查看次数

如何用巴比伦创造“表情”?

我需要添加一个 objectProperty,但它需要键和值:

t.objectProperty(key, value, ...)

并且该值必须是“表达式”。我假设它必须是对象表达式:

t.objectExpression(属性)

其中“属性”必须是一个 ObjectMethod 数组 || 对象属性 || 传播属性。

但我想首先创建一个 ObjectProperty !那么什么是“表达式”以及如何创建它以创建 ObjectProperty?

javascript babeljs babel-babylon

1
推荐指数
1
解决办法
382
查看次数