来自C代码的AST

Sac*_*hot 22 c abstract-syntax-tree

我想对C源代码执行一些转换.我需要一个linux上的工具,它从源代码生成一个完整的AST,这样我就可以在这个AST上应用我的转换,然后将其转换回C源代码.我试过ELSA,但没有编译.(我使用的是Ubuntu 8.4).谁能建议更好的工具/应用程序?

Lou*_*arg 18

我会推荐clang.它有一个相当完整的C实现,大多数gcc扩展,代码是非常容易理解的.他们的C++实现是不完整的,但如果你只关心从C代码生成AST应该没问题.根据你想要做的事情你可以使用clang作为库并直接使用AST,或者让clang将它们转储到控制台.


Eli*_*sky 11

请参阅pycparser - 一个用于C的纯Python AST生成器.

  • 仅支持 C99。可能对很多人来说已经足够了。不是给我的。 (2认同)

Rem*_*o.D 5

我知道有两个项目,您可以找到有用的项目:

他们都解析标准的C源代码,以允许进一步的分析和转换.我没有使用它们,所以如果它们符合您的需要,您必须自己检查.

当然,使用GCC的建议也是有效的.我知道gcc的这方面文档不多.


Roe*_*oel -1

使用 gcc 并为其编写一个自定义后端怎么样?我从来没有这样做过,甚至没有研究过 gcc 源代码,所以我不知道它有多难。