我正在寻找一个scala中的库,它从抽象语法树中生成JavaScript。 我想在最后生成JavaScript的编译器中使用它,我不想自己实现漂亮的打印部分。scala的JavaScript源代码生成库
回答
Lift web框架从AST生成JavaScript。但是,我从来没有看过它的世代结束。 AST在这里是松散地描述的http://exploring.liftweb.net/master/index-10.html
有Virtualized-Scala项目,它的一个实例是从Scala代码生成Javascript,js-scala。在那里你会找到项目的链接和谈论它。
StringTemplate(来自ANTLR)非常适合代码生成,我会说,它确实跟踪缩进,并保持在正确的级别缩进嵌套语句。打印效果不是很好,但总比没有好。 (与此同时,我想知道为什么你要漂亮地打印JavaScript,如果最后它会被缩小。)
有一个用于StringTemplate的Scala包装(至少有一个,我似乎记得我看到更多):http://software.clapper.org/scalasti/
虚拟化scala似乎并不是你所需要的,我想说,因为Scala AST开始于Scala,而这并不是你所拥有的。
但是,如果您也对这些事情感兴趣,您可能还想检查http://nescala.org/2013/talks#26(by Alvaro Carrasco)。
我昨天花了一半时间研究这个。看来没有标准,独立解决方案。每一个项目我看着推出自己:
斯卡拉-JS:JavaScript的AST班塞巴斯蒂安Doeraene的斯卡拉-JS项目在这里:https://github.com/sjrd/scala-js/blob/master/compiler/src/main/scala/scala/tools/nsc/backend/js/JSTrees.scala和转换为字符串是在这里:https://github.com/sjrd/scala-js/blob/master/compiler/src/main/scala/scala/tools/nsc/backend/js/JSPrinters.scala
JScala:JavaScript的AST类在亚历山大Nemish的JScala项目在这里:https://github.com/nau/jscala/blob/master/jscala/src/main/scala/org/jscala/model.scala和转换为字符串是在这里:https://github.com/nau/jscala/blob/master/jscala/src/main/scala/org/jscala/JavascriptPrinter.scala
s2js:JavaScript的AST班阿尔瓦罗·卡拉斯科的s2js项目在这里:https://github.com/alvaroc1/s2js/blob/master/plugin/src/main/scala/com/gravitydev/s2js/Trees.scala和转换为字符串是在这里:https://github.com/alvaroc1/s2js/blob/master/plugin/src/main/scala/com/gravitydev/s2js/JsPrinter.scala
电梯(见@ thoredge的答案)在一个单一的融合AST类用绳子代文件,在这里:https://github.com/lift/framework/blob/master/web/webkit/src/main/scala/net/liftweb/http/js/JsCommands.scala
如何独立和可重用的可能,这些不同类别是什么?只要给代码一个可视化的代码,在我看来,JScala和s2js中的AST类是独立的,可以很容易地被另一个项目借用。 Scala-JS AST类似乎与周围环境更加纠结;举起,更是如此。 (我欢迎编辑改进我的非正式印象。)
这些不同的项目有多成熟和经过战斗考验?我的非正式印象是,它们按降序排列如下:Lift,Scala-JS,JScala,s2js。
对于我自己的项目,我想我要复制并粘贴JScala中的两个源文件并查看它是如何实现的。
P.S.我还提到,为了完整性:
JS-斯卡拉直接从斯卡拉AST的生成JavaScript字符串,而不是通过中间的JavaScript AST的打算。 (例如见https://github.com/js-scala/js-scala/blob/master/core/src/main/scala/scala/js/gen/js/Compile.scala)有一个非常好的博客文章比较js-scala和scala.js here。我不看Scala-GWT。
我深入了解了Lift,但据我记得的JavaScript ast不是为了表达全部的语言,所以我不能使用它。 我也将Rhino视为一种可能性,但它非常麻烦。请考虑一下,我在半年前看过两次,但我不记得所有细节。 然而,最后我写了自己的:https://github.com/choeger/sl2/blob/master/src/main/scala/modules/JsSyntax.scala – schlicht
我认为JScala是最好的选择,但我'偏颇:)这只是一个发布到Maven Central的单个jar,因此很容易添加为一个库。如果您想将其复制粘贴到代码中,则只需要2个文件。简单。 – nau
- 1. 的Java/Scala库生成Java源代码
- 2. 使用Scala代码生成
- 3. 生成Go源代码
- 4. SpringRoo @RooWebScaffold,生成源代码
- 5. 源代码生成药剂
- 6. 从AST生成源代码
- 7. C++ 11源代码生成
- 8. 使用Scala生成(PHP-)代码
- 9. 使用TreeHugger scala生成代码
- 10. 从Scala源生成UML图
- 11. Javascript QR代码生成器
- 12. 用Rails生成Javascript代码
- 13. Scala由代码完成库崩溃
- 14. 查看javascript生成的html页面的实际html源代码
- 15. 查看生成的源代码(后AJAX/JavaScript的),在C#
- 16. 由Rails生成的Ruby源代码?
- 17. 类图生成的源代码
- 18. 由rails生成的ruby源代码
- 19. 访问代码生成的TextView资源
- 20. 附加查看javascript生成的源代码?
- 21. 如何从javascript生成的源代码提取内容
- 22. 从Scala编译器插件生成Scala代码树
- 23. 有没有用于生成Python源代码的库?
- 24. 用于生成C++源代码的Java库
- 25. 用于生成数据库对象代码的资源
- 26. 从i18n资源包中生成干净代码的任何库?
- 27. 生成HTML代码JavaScript编码在C#
- 28. 从源代码生成类图
- 29. Devexpress在源代码中生成垃圾
- 30. 如何生成源代码名称?
参见例如, http://stackoverflow.com/questions/11300263/is-there-a-jsand-or-jsor-when-generate-js-in-lift –