[racket] structural program comparison tool in Racket
Hello,
I'm developing a tool for "diffing" program by parse trees and not
text. It is written in Racket and can process Lisp family languages,
C++, JavaScript and Python. It has a JavaScript based interactive UI
for browsing the diff results.
You can find a demo of it (diffing two Emacs Lisp programs) here:
http://www.cs.indiana.edu/~yw21/demos/paredit20-paredit22.html
(Try scrolling down the program, and click on the code in white boxes.)
If you are interested in trying it out on Racket programs, please
check it out from GitHub:
https://github.com/yinwang0/ydiff
An introductory article can be found on my blog:
http://yinwang0.wordpress.com/2012/01/03/ydiff
It is still in pretty early stage so probably only the Lisp part is
robust enough for daily use. I'm proceeding to design a "unified
interchange format" for ASTs. The motivation is that compiler writers
for various languages can output this format, so that this kind of
structural diff can be extended to new languages quickly.
I would be happy to get feedback and suggestions about it so that I
can work to improve it. If you would like volunteer adding support for
more languages, please let me know.
Thanks.
-- Yin