首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Java解析/读取C-Header文件

使用Java解析/读取C-Header文件
EN

Stack Overflow用户
提问于 2012-04-24 22:28:15
回答 4查看 8.7K关注 0票数 7

我有一个定义了几个结构的C-Header文件,其中包含多个char数组。

我想用Java来解析这些文件。是否有用于将C-Header文件读取到结构中的库,或者是否有能够理解C-Header文件的流解析器?

为了了解更多的背景知识(我只是在寻找一个C-Header解析器,而不是这个特殊问题的解决方案):我有一个包含数据的文本文件和一个解释结构的C-Header文件。两者都有一点动态,所以我不想生成Java类文件。

示例:

代码语言:javascript
复制
#define TYPE1
typedef struct type1
{
char name1[10];
char name2[5];
}
#endif

Type2、Type3等都是类似的。

数据结构:

代码语言:javascript
复制
type1ffffffffffaaaaa
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-24 23:04:55

您可以使用现有的用于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.jarorg.eclipse.core.resources.jarorg.eclipse.equinox.common.jarorg.eclipse.osgi.jar

编辑解析器:我找到了一篇文章,其中包含了以下内容的源代码片段:"Using the Eclipse C/C++ Development Tooling as a健壮,全功能,主动维护,开源C++解析器“,但它不再在线可用(仅作为简化版本)。

票数 16
EN

Stack Overflow用户

发布于 2014-12-16 10:41:27

使用只有2个jars的Eclipse CDT的示例。

示例中有一个将源文件的结构显示为树的类,另一个示例在api上进行交互...

一个细节是,使用此api(Eclipse CDT Parser),您可以从内存中的字符串执行解析。

另一个用法示例是:

https://github.com/ricardojlrufino/cplus-libparser

用于C/C ++源代码的元数据提取(有关类、方法、变量的信息)的库。

请参阅文件:https://github.com/ricardojlrufino/cplus-libparser/blob/master/src/main/java/br/com/criativasoft/cpluslibparser/SourceParser.java

票数 6
EN

Stack Overflow用户

发布于 2015-10-15 23:13:03

如前所述,CDT非常适合这项任务。但与上面描述的不同,我在插件中使用它,并且能够使用IFiles。然后一切都变得更容易了。要获得"ITranslationUnit“,只需执行以下操作:

代码语言:javascript
复制
ITranslationUnit tu = (ITranslationUnit) CoreModel.getDefault().create(myIFile);
IASTTranslationUnit ias = tu.getAST();

我正在寻找一个特殊的#定义,这样我就可以:

代码语言:javascript
复制
ppc = ias.getAllPreprocessorStatements();

为了获得所有预处理的代码语句,每个语句都在array-element中。非常简单。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10300021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档