[cfe-dev] clang AST printer

Manuel Klimek klimek at google.com
Fri Sep 21 05:40:28 PDT 2012

On Fri, Sep 21, 2012 at 12:32 PM, Philip Craig <philipjcraig at gmail.com> wrote:
> On Fri, Sep 21, 2012 at 7:49 PM, Manuel Klimek <klimek at google.com> wrote:
>> Hi Philip,
>> we had a discussion around the strategy for handling ast dumping
>> fairly recently. I think the common agreement in the end was that
>> instead of having an extra tool, we want to make clang's -ast-dump
>> awesome.
> Was this discussion on the mailing list? Any chance you could point me to it?


>> I don't know what your ultimate goal is here, but from my
>> side any work that goes towards making clang -ast-dump better would be
>> highly appreciated :)
> My motivation was having some way of getting the structure of the AST
> for a given piece of source code, so that it is easier to correctly
> call the AST matchers to match that code. The issue with clang
> -ast-dump is that it pretty prints decls and types. So would the goal
> here be to add more command line options to clang to control how
> -ast-dump prints the AST?

No, I think the goal is to dump decls and types in a sensible way :)

> Are there any other areas where you think -ast-dump needs to be better?

As you said, decls and types need to be structured nicely. Also, a
while ago Richard proposed a patch to add coloring, no idea how far he
got (cc'ing him)


>> Cheers,
>> /Manuel
>> On Fri, Sep 21, 2012 at 1:17 AM, Philip Craig <philipjcraig at gmail.com> wrote:
>>> Hi,
>>> I've been writing a tool to print a clang AST. You can find it at
>>> https://github.com/philipc/clang-ast. I've been mostly writing this as
>>> a learning exercise, but I would like to see if there is any wider
>>> interest in the tool.
>>> I'm new to clang, and interested in working on tooling. For this task,
>>> it is important to have an understanding of the AST. I've found the
>>> documentation at http://clang.llvm.org/docs/InternalsManual.html and
>>> http://clang.llvm.org/docs/IntroductionToTheClangAST.html (is there
>>> any more?), but I think it would be helpful to be able to print the
>>> AST for source code to see how it is used in practice. I've found two
>>> ways to do this currently, which aren't quite what I wanted:
>>> clang --ast-dump
>>> - pretty prints some parts, has too much internal info, more suited
>>> for debugging use by clang developers
>>> clang --ast-dump-xml
>>> - incomplete and XML is too verbose for this purpose
>>> Since RecursiveASTVisitor seems to be the API that will be used by
>>> tool developers, I've been using RAV to print the AST. I've found a
>>> few minor bugs in RAV as a result of this, which I'm in the process of
>>> submitting.
>>> One limitation of RAV is that the Visit methods aren't given
>>> information about their relationship with their parent, so the tool
>>> can only list all the children of a node, without distinguishing
>>> between the LHS and RHS of an operator, for example. Is there any
>>> desire to extend RAV to be able to do this?
>>> I've been writing small code snippets to test printing the various
>>> parts of the AST. If you want to see examples of the output of the
>>> tool, this is included in the test cases. As a quick example, "void
>>> foo() {}" is printed as:
>>>   FunctionDecl
>>>     DeclarationName foo
>>>     FunctionNoProtoType
>>>       BuiltinType void
>>>     CompoundStmt
>>> Finally, I've been trying to give a textual description of the AST
>>> grammar in https://github.com/philipc/clang-ast/blob/master/ast.txt.
>>> This is an attempt to give something similar to
>>> http://docs.python.org/py3k/library/ast.html#abstract-grammar. I'm not
>>> sure if it is turning out to be that useful though.
>>> Any comments welcome!
>>> Thanks,
>>> Philip
>>> _______________________________________________
>>> cfe-dev mailing list
>>> cfe-dev at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev

More information about the cfe-dev mailing list