我很少看到静态分析器的功能编程语言,比如Racket / Scheme,我甚至怀疑是否有。我想为函数式语言编写一个静态分析器,比如Scheme / Racket。我应该怎么做呢?
答案 0 :(得分:6)
是的,有一些关于动态语言(如Scheme)的静态分析的工作。例如,参见Olin Shivers(http://www.ccs.neu.edu/home/shivers/citations.html)和Manuel Serrano(http://www-sop.inria.fr/members/Manuel.Serrano/index-1.html)的作品。
答案 1 :(得分:5)
已经有例如打字的球拍:http://docs.racket-lang.org/ts-guide/index.html 由于有效的球拍代码是有效的类型球拍,您只需要更改您正在使用的语言。然后,对于具有类型版本的库,加载那些而不是非类型版本,并且某些类型错误可能已经静态捕获。可以将更多类型的注释添加到您自己的代码中,以获得超出该类型的类型正确性的保证...
答案 2 :(得分:3)
首先阅读Shivers的this paper,解释为什么Scheme中没有静态控制流图。
可以实施k-CFA in Scheme。 Matt Might的site和blog是探索高阶语言静态分析的良好起点。
我也在Java中为Scheme做了一些静态分析实现: