我有一个 C 头文件定义了几个结构,包含多个字符数组。
我想使用 Java 解析这些文件。是否有用于将 C 头文件读入结构的库,或者是否有理解 C 头文件的流解析器?
只是为了更多的背景(我只是在寻找一个 C 头解析器,而不是这个特定问题的解决方案):我有一个包含数据的文本文件和一个解释结构的 C 头文件。两者都有点动态,所以我不想生成Java类文件。
例子:
#define TYPE1
typedef struct type1
{
char name1[10];
char name2[5];
}
#endif
Type2、Type3 等类似。
数据结构:
type1ffffffffffaaaaa
您可以将现有的 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++ 解析器”,但它不再在线提供(仅作为缩短版)。