如何得到gcc的抽象语法树(AST) fdump-translation-unit

2009年4月6日星期一

 

无数论文上看到,gcc -fdump-transaltion-unit 就可以得到很具体的抽象语法树,可是我换了N多版本,得到最多信息的就算自定义函数的语句序列了,

也试验了N多的工具,能用(gcc 4.3下成功编译)的工具就不多,得出的信息更是不适合。
于是,自己写算了!!

折腾了半天,看了一个叫print_node的函数,结果却是gcc debug用的,发现不行,就没有深究。

问了下google, 找到这个比较有用的信息。


On Mon, Mar 23, 2009 at 10:17, Praveen D V <for.pdv@gmail.com> wrote:

> With the new version I'm not able to get those dumps.
> I just downloaded latest release and compiled it. ÂIt too doesn't dump
> those typedef trees.
> Any other pointers?

You will need to modify the GCC dump routines yourself to dump the
typedefs. Start with dump_node and the calls made to dump_begin
(TDI_tu,...).

As I said before, these routines change almost constantly and we don't
even try to keep the output consistent. They are just debug
instruments for us.

简单翻译下:
有人抱怨说,-fdump-translation-unit 写的信息不够!怎么办?

gcc的开发者说,呵呵,俺们本来没有打算保持输出信息的完整性,但是毛主
席他老人家说过,自己动手,丰衣足食,所以,你自己把dump_begin和
dump_node改吧改吧, 把你想要的都打出,不就得了。


呵呵,受教了

1 评论:

TAO of Programmer 说...

http://www.nabble.com/gcc---Dev-f1157.html

搜索fdump-translation-unit,得到很多和我想法差不多的人,即希望从dump的文件中得到抽象语法树之类的东西。而且大多数都是以前可以,GCC升级以后就不行了。

解决方案有很多,除了上边提到的,修改dump_node(这个貌似不行,后边会提到),方法总结如下:
1.修改dump_node
2.-fdump-tree-original(这个选项只适用于G++)
3.fdump-tree-original-raw
4.从http://gcc.gnu.org/wiki/GettingStarted/ 熟悉gcc入手。

1.难度太大,而且我怀疑是不可行的。我跟了近两天,修改了几处后,发现程序dump_node,dequeue_dump_tree完全没有略去对任何语句的处理,说不定是程序的flag控制了打印信息的详细程度。跟踪flag,对gcc这么一个庞大的工程,近似无解。

2.如后边小注解,只有g++有此选项,但是对我来说,是最好的方法了。

3.没有外部变量。

4.路漫漫其修远,等我全部看完这个档案,我肯定被老板推迟毕业了......

不过,看了两天的代码和文档,感觉学习了很多....,欣慰