sch*_*cht 4 javascript code-generation scala abstract-syntax-tree
我在scala中寻找一个从抽象语法树生成JavaScript的库.我想在最终生成JavaScript的编译器中使用它,我不想自己实现漂亮的打印部分.
我花了一半时间研究这个.似乎没有标准的独立解决方案.我看过的每个项目都是自己的:
Scala-JS:SébastienDoeraene的Scala-JS项目中的JavaScript AST类在这里: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:Alexander Nemish的JScala项目中的JavaScript AST类在这里: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:Alvaro Carrasco的s2js项目中的JavaScript AST类在这里: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
Lift(参见@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复制并粘贴两个源文件,看看它是怎么回事.
PS我还提到,为了完整性:
js-scala直接从Scala 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 .
我没看过Scala-GWT.