As Fix Anno Comments
XT -- A Bundle of Program Transformation Tools
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
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;
}
}