是否有解析 Scala 并创建抽象语法树(AST) 的 Scala 库?
理想情况下,我对 Scala 库感兴趣。计划 B 将是一个 Java 库。
(我知道我可以利用Scala Syntax Summary中的 EBNF 。)
是否有解析 Scala 并创建抽象语法树(AST) 的 Scala 库?
理想情况下,我对 Scala 库感兴趣。计划 B 将是一个 Java 库。
(我知道我可以利用Scala Syntax Summary中的 EBNF 。)
一些现有的解析器:
PsiBuilder
如果使用规范中的 EBNF,请小心,显然有:
“附录和内联语法之间的不匹配,以及由 scalac 编译的语言(并在 scala 源代码中使用)与语法声明的语言之间的不匹配”——Scala Trac 错误 #1826。
您不能仅从语法为 Scala 构建 AST。有隐含需要考虑,并且,要考虑它们,需要考虑类型推断器。
但是,您可以调用编译器本身——毕竟它只是一个 jar 文件。尤其是 Scala 2.8,有很多钩子可供其他程序使用——Miles Sabin 的工作,他正是这样做的,以便 Scala 的 Eclipse 插件可以以这种方式利用编译器。
我建议您访问 Scala Tools 邮件列表,并与那里的人取得联系。
如果要生成一段代码的 AST。您可以使用 scala 反射:
showRaw(reify{
//your code here like:
print(2)
})
上面的代码将生成一个 AST:
Expr(Apply(Select(Ident(scala.Predef), TermName("print")), List(Literal(Constant(2)))))
参考:
http://docs.scala-lang.org/overviews/reflection/symbols-trees-types.html
这是编译器提交者之一的项目http://github.com/paulp/scala-lang-combinators