您可以为 Java 使用现有的 C 解析器。当然,它不仅仅是解析头文件,但这不应该伤害你。
我们使用来自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++ 解析器”,但它不再在线提供(仅作为缩短版)。