2013-01-07 56 views
4

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

回答

2

Lift web框架从AST生成JavaScript。但是,我从来没有看过它的世代结束。 AST在这里是松散地描述的http://exploring.liftweb.net/master/index-10.html

+0

参见例如, http://stackoverflow.com/questions/11300263/is-there-a-jsand-or-jsor-when-generate-js-in-lift –

1

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

2

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

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

虚拟化scala似乎并不是你所需要的,我想说,因为Scala AST开始于Scala,而这并不是你所拥有的。

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

7

我昨天花了一半时间研究这个。看来没有标准,独立解决方案。每一个项目我看着推出自己:

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

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

对于我自己的项目,我想我要复制并粘贴JScala中的两个源文件并查看它是如何实现的。

P.S.我还提到,为了完整性:

+0

我深入了解了Lift,但据我记得的JavaScript ast不是为了表达全部的语言,所以我不能使用它。 我也将Rhino视为一种可能性,但它非常麻烦。请考虑一下,我在半年前看过两次,但我不记得所有细节。 然而,最后我写了自己的:https://github.com/choeger/sl2/blob/master/src/main/scala/modules/JsSyntax.scala – schlicht

+0

我认为JScala是最好的选择,但我'偏颇:)这只是一个发布到Maven Central的单个jar,因此很容易添加为一个库。如果您想将其复制粘贴到代码中,则只需要2个文件。简单。 – nau