gpt4 book ai didi

javascript - 使用 Clojure 向 JavaScript 添加语法

转载 作者:行者123 更新时间:2023-12-03 04:51:05 25 4
gpt4 key购买 nike

我想向我的 JavaScript 文件添加新语法,就像 Sweet.js 一样,但使用 Clojure/ClojureScript 进行转换。

这是我想做的:

//original

specialFunction add(a, b) {
return a + b;
}


//transformed

function add(a, b) {
return a + b;
}
registerSpecialFunction({
name: "add",
args: ["a", "b"],
func: add
});

如果我错了,请纠正我,但我认为这样做效果最好:

  1. 将 JS 文件解析为 AST
  2. 进行转换
  3. 将生成的 AST 作为 JavaScript 打印出来

知道如何完成第 1 部分和第 3 部分吗?我的想法正确吗?

最佳答案

请注意,这可能是一项不平凡的任务,但可能是一次很好的学习练习。

如果您想从 Clojure 获得相同的控制,则必须重新实现 Sweet.js 中的概念或宏,或者重新实现 Babylon(Babel 解析器)中的自定义解析器扩展的想法。

无论哪种方式,您都需要编写一个能够理解 JavaScript 语法超集的解析器。您可能想查看解析器生成器,例如 instaparse (Clojure)peg.js (JavaScript) .

然后你需要决定是要对语言语法进行固定数量的添加(如 Babel)还是允许宏定义自己的语法扩展/替换规则(如 Sweet.js)。此时,您需要编写某种引擎来转换解析器生成的 AST。

宏可以通过多种方式实现,从replacement rules like you'd find in C and C++开始。到直接与 AST 一起使用的完整编译时评估函数 like you'd find in Clojure .

使用这个新工具解析和转换 AST 后,您需要将其转换为有效的 JavaScript AST。它将使事情更容易保持与ESTree specification的兼容性。因为这将允许您使用类似 escodegen 的工具实际从 AST 本身生成 JavaScript 代码。

当然,只有当您将工具编写为 ClojureScript 并针对 NodeJS 进行编译和运行时,才可能使用 peg.js 和 escodegen 等工具。另一种选择是在 JVM 生态系统中找到兼容的工具,并将它们与 JVM 编译的 Clojure 一起使用。

JavaScript 生态系统有一系列优秀的工具可用于解析、转换和生成 ES 代码(查看 Babel 包作为示例/灵感),但您必须记住,如果您正在编写 ClojureScript 并运行它在 Node 下,您实际上正在创建一个 JavaScript 可执行文件,而且一开始使用 JavaScript 可能会更容易。

关于javascript - 使用 Clojure 向 JavaScript 添加语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42656809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com