4

我正在寻找一个从抽象语法树生成 JavaScript 的 scala 库。我想在最后生成 JavaScript 的编译器中使用它,我不想自己实现漂亮的打印部分。

4

4 回答 4

7

我昨天花了一半时间研究这个。似乎没有标准的独立解决方案。我看过的每个项目都有自己的:

这些不同的类的独立性和可重用性如何?只是给代码一个视觉效果,在我看来 JScala 和 s2js 中的 AST 类是独立的,可以很容易地被另一个项目借用。Scala-JS AST 类似乎与周围环境更加纠缠不清;电梯,更是如此。(我欢迎改进我的非正式印象的编辑。)

这些不同的项目有多成熟和久经考验?我的非正式印象是它们按降序排列如下:Lift、Scala-JS、JScala、s2js。

对于我自己的项目,我想我将从 JScala 复制并粘贴两个源文件,看看它是如何进行的。

PS我还提到,为了完整起见:

于 2013-09-12T15:25:55.477 回答
2

StringTemplate(来自 ANTLR)对于代码生成非常好,我想说,它确实跟踪缩进并将嵌套语句的缩进保持在正确的级别。不是很漂亮的印刷,但总比没有好。(同时,我想知道为什么你想要漂亮的打印 JavaScript,如果最终它无论如何都会被缩小。)

StringTemplate 有一个 Scala 包装器(至少一个,我似乎记得我看到了更多):http ://software.clapper.org/scalasti/

Virtualized-scala 似乎不是您所需要的,我想说,因为它以 Scala 和 Scala AST 开头,而这似乎不是您所需要的。

但是,如果您也对这类事情感兴趣,您可能还想查看http://nescala.org/2013/talks#26(由 Alvaro Carrasco 撰写)。

于 2013-01-07T16:00:31.843 回答
2

Lift Web 框架从 AST 生成 JavaScript。但是,我从来没有看过它的世代结束。此处对 AST 进行了粗略的描述http://exploring.liftweb.net/master/index-10.html

于 2013-01-07T15:31:49.190 回答
1

有 Virtualized-Scala 项目,其中一个实例是从 Scala 代码js-scala生成 Javascript 。在那里你会找到项目的链接并讨论它。

于 2013-01-07T15:39:52.673 回答