您可以将现有的C解析器用于Java.当然,它比解析头文件要多得多,但这不应该伤害你.
我们使用Eclipse CDT项目中的解析器.这是一个Eclipse插件,但我们在Eclipse之外成功使用它,我们只需将Eclipse的3个JAR文件与解析器JAR捆绑在一起.
要使用CDT解析器,请从org.eclipse.cdt.core.model.ILanguage的实现开始,例如org.eclipse.cdt.core.dom.ast.gnu.c.GCCLanguage.您可以在其上调用getTranslationUnit,传递代码和一些帮助程序.代码文件由org.eclipse.cdt.core.parser.FileContent实例表示(至少在CDT7中,这似乎改变了很多).创建此类对象的最简单方法是FileContent.createForExternalFileLocation(filename)或FileContent.create(filename,content).这样您就不需要关心Eclipse IFile的东西了,这似乎只适用于项目和工作区.
你得到的IASTTranslationUnit表示文件的整个AST.其中的所有节点都是IASTSomething类型的实例,例如IASTDeclaration等.您可以使用访问者模式实现自己的org.eclipse.cdt.core.dom.ast.ASTVisitor子类来迭代AST.如果您需要进一步的帮助,请询问.
我们使用的JAR文件是org.eclipse.cdt.core.jar,org.eclipse.core.resources.jar,org.eclipse.equinox.common.jar和org.eclipse.osgi.jar.
编辑:我找到了一篇包含源代码片段的论文:“使用Eclipse C/C++开发工具作为一个强大,功能齐全,主动维护的开源C解析器”,但它已不再在线提供(仅作为缩短版本).