<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Sun, Sep 27, 2015 at 6:11 PM Bhargava Shastry via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
I am trying to export clang AST to a file, recreating the tree structure<br>
in a suitable format e.g., xml/json. I am using the RecursiveASTVisitor<br>
for this.<br></blockquote><div><br></div><div>You can already save the AST in a way that you can read it back into clang, but not in a way that is readable by a different tool.</div><div><br></div><div>So far the consensus has been that this would be a very hard project; there has been an XML output once, but the problem is that it was never up-to-date / complete enough to do anything useful with it.</div><div>Generally, if you want to have a full XML/JSON/whatever output, somebody would need to implement it, and then make sure it doesn't get out of date when the implementation changes.</div><div><br></div><div>So far we have build mostly clang-based tools that work directly on the C++ AST.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Question: What is the invariant for establishing parent-child<br>
relationship between AST nodes? I see that one potential invariant is<br>
``If two AST nodes have the same DeclContext pointer, then they are in<br>
the same scope i.e., siblings or parent-children.`` Is there a stronger<br>
invariant that establishes parent-child relationship? Sadly, the Decl<br>
class doesn't have a getParent() that returns its parent AST node.<br></blockquote><div><br></div><div>ASTContext has a getParents() method. Note that you can get multiple parents for a node (for example, non-type-dependent expressions often exist only once if they are part of multiple template instantiations).</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Also, is there a generic way I could ask the same question for nodes of<br>
Stmt and Type classes?<br>
<br>
P.S. I tried to infer the invariant by skimming through ASTDumper code.<br>
But, ASTDumper invents custom traversal different from what RAV<br>
provides, so it's non-trivial to map logic from/to two different models.<br></blockquote><div><br></div><div>Generally, AST traversal is non-trivial.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Thanks,<br>
Bhargava<br>
<br>
--<br>
Bhargava Shastry <<a href="mailto:bshastry@sec.t-labs.tu-berlin.de" target="_blank">bshastry@sec.t-labs.tu-berlin.de</a>><br>
Security in Telecommunications<br>
TU Berlin / Telekom Innovation Laboratories<br>
Ernst-Reuter-Platz 7, Sekr TEL 17 / D - 10587 Berlin, Germany<br>
phone: +49 30 8353 58235<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</blockquote></div></div>