[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [cdt-dev] Printing Code using ASTVisitor

That's very close to what I want. It seems like the code is not
complete though. It doesn't print out comments, includes, or #defines.
Am I using it wrong or is the code incomplete? I checked the master
branch on git and it's the same sources I'm using. A line with a
PreprocessorStatementWriter object on it is commented out.

Code:
NodeCommentMap m = new NodeCommentMap();
ASTWriterVisitor w = new ASTWriterVisitor(m);
ast.accept(w);
p(w.toString());

Input:
-------------------------------
#include <stdio.h>
#define Test "Works"
using namespace std;

//call foo
int foo() {
	// call printf
	printf(Test);
	return 0;
}
--------------------

Output:
------------------------------
using namespace std;

int foo()
{
    printf(Test);
    return 0;
}
------------------------


On Fri, Jun 22, 2012 at 1:33 PM, Sergey Prigogin
<eclipse.sprigogin@xxxxxxxxx> wrote:
> Take a look
> at org.eclipse.cdt.internal.core.dom.rewrite.astwriter.ASTWriter. Does it do
> what you need?
>
> -sergey
>
> On Fri, Jun 22, 2012 at 10:27 AM, Joseph Paul Cohen <jcccnet@xxxxxxxxx>
> wrote:
>>
>> Can anyone shed some light on how to print out a piece of C++ code
>> using an ASTVisitor? Eventually I want to be able to walk the AST and
>> print out or transform what I want.  I made this ASTVisitor but it
>> seems I have to override each visit method and even then I get
>> overlapping code. It will print out an entire function definition and
>> then later I will visit the expressions inside it and print those out.
>> Any suggestions?
>>
>> Output:
>> ...
>> CPPASTFunctionDefinition int called2(){
>>
>>     called3();
>>     return 9;
>> }
>> CPPASTFunctionCallExpression called3()
>> CPPASTIdExpression called3
>> CPPASTLiteralExpression 9
>> ...
>>
>>
>> Code:
>>
>> class CodePrintVisitor extends ASTVisitor {
>>     CodePrintVisitor() {
>>             shouldVisitExpressions= true;
>>             shouldVisitDeclarations = true;
>>     }
>>
>>     @Override
>>     public int visit(IASTExpression expression) {
>>
>>             String line = "";
>>
>>             line += expression.getClass().getSimpleName();
>>             line += " ";
>>             line += expression.getRawSignature();
>>
>>             print("Code", line);
>>             return PROCESS_CONTINUE;
>>     }
>>
>>     @Override
>>     public int visit(IASTDeclaration declaration) {
>>             String line = "";
>>
>>             line += declaration.getClass().getSimpleName();
>>             line += " ";
>>             line += declaration.getRawSignature();
>>
>>             print("Code", line);
>>             return PROCESS_CONTINUE;
>>     }
>> }
>> _______________________________________________
>> cdt-dev mailing list
>> cdt-dev@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/cdt-dev
>
>
>
> _______________________________________________
> cdt-dev mailing list
> cdt-dev@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/cdt-dev
>