---++ Description An asfix to asfix tool that reserves comments that were of the input source code by putting them in annotations of the AST. It is difficult to decide what a comment actually comments on. The tool uses the heuristic that a comment is usually about the next construct. Therefore, it adds the comment to the first term with a constructor in the the subtree of the next symbol in the production rule. If this next symbol is a literal, then the comment will not be preserved. ---++ Example This simple tool works remarkably well. Let me illustrate this with an example input that I used during the development of this tool. /** * Voodoo */ class Voodoo { /** * Bla bla */ public void foo(/*let me explain this */ int x) { // just return return /* foo */ x; } } An example fragment of the AST: Param([], Int, Id("x")){(Comment, "/*let me explain this */")} The [[Stratego.JavaFront][JavaFront]] pretty-printer has been extended to support these Comment annotations. The following pipe: sglr -2 -s CompilationUnit -p ~/wc/java-front/syn/v1.5/Java-15.tbl -i ~/Foo.java | ./asfix-anno-comments | implode-asfix | pp-java produces the following output: /** * Voodoo */ class Voodoo { /** * Bla bla */ public void foo(/*let me explain this */ int x) { // just return return /* foo */ x; } }