Scala的ANTLR语法?

Jus*_*s12 12 parsing antlr scala

我正在尝试为演示项目构建静态分析工具.我们可以自由选择要分析的语言.我从使用ANTLR编写Java代码分析器开始.我现在想对Scala代码做同样的事情.但是,我找不到Scala的ANTLR语法.它存在吗?Scala语法还有其他机器可读的形式吗?

Jör*_*tag 12

我不相信有这样的事情.

问题在于,对于任何语言,尤其是像Scala这样的库语言,词法分析和句法分析是静态分析中最不有趣和最微不足道的部分.为了做任何事情,甚至远程有趣,你需要执行的显著量语义分析:脱糖,类型推断,类型检查,善良检查,宏扩展,重载决议,含蓄的分辨率,名称绑定.简而言之:您需要重新实现或多或少的整个Scala编译器,以实际代码生成部分为模.请记住,Scala的宏系统和Scala的类型系统都是图灵完备的(实际上,Scala的宏系统 Scala!):可能会有大量的编译时和类型级计算,如果不实际执行宏扩展就无法分析,类型推断和类型检查.

这是一个巨大的任务,也有其实只有两个项目已经成功做到了:一个是Scala编译器本身,另一种是IntelliJ IDEA的斯卡拉插件.

我们甚至不谈论编译器插件,它们能够以几乎任意的方式改变Scala的语法和语义.

但是,有希望:Scala编译器本身提供了一个名为Presentation Compiler的API ,它专门设计用于IDE,代码高亮显示器和各种静态分析工具.它使您可以在编译期间,优化和代码生成阶段之前访问编译器所具有的全部信息.它由ScalaDoc,Scala REPL,Scala Eclipse插件,NetBeans Scala插件,SimplyScala.Com,Emacs的ENSIME插件,一些静态分析工具以及许多其他工具使用.