我有一个定义了几个结构的C-Header文件,其中包含多个char数组。
我想用Java来解析这些文件。是否有用于将C-Header文件读取到结构中的库,或者是否有能够理解C-Header文件的流解析器?
为了了解更多的背景知识(我只是在寻找一个C-Header解析器,而不是这个特殊问题的解决方案):我有一个包含数据的文本文件和一个解释结构的C-Header文件。两者都有一点动态,所以我不想生成Java类文件。
示例:
#define TYPE1
typedef struct type1
{
char name1[10];
char name2[5];
}
#endifType2、Type3等都是类似的。
数据结构:
type1ffffffffffaaaaa发布于 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.jar、org.eclipse.core.resources.jar、org.eclipse.equinox.common.jar和org.eclipse.osgi.jar。
编辑解析器:我找到了一篇文章,其中包含了以下内容的源代码片段:"Using the Eclipse C/C++ Development Tooling as a健壮,全功能,主动维护,开源C++解析器“,但它不再在线可用(仅作为简化版本)。
发布于 2014-12-16 10:41:27
使用只有2个jars的Eclipse CDT的示例。
示例中有一个将源文件的结构显示为树的类,另一个示例在api上进行交互...
一个细节是,使用此api(Eclipse CDT Parser),您可以从内存中的字符串执行解析。
另一个用法示例是:
https://github.com/ricardojlrufino/cplus-libparser
用于C/C ++源代码的元数据提取(有关类、方法、变量的信息)的库。
发布于 2015-10-15 23:13:03
如前所述,CDT非常适合这项任务。但与上面描述的不同,我在插件中使用它,并且能够使用IFiles。然后一切都变得更容易了。要获得"ITranslationUnit“,只需执行以下操作:
ITranslationUnit tu = (ITranslationUnit) CoreModel.getDefault().create(myIFile);
IASTTranslationUnit ias = tu.getAST();我正在寻找一个特殊的#定义,这样我就可以:
ppc = ias.getAllPreprocessorStatements();为了获得所有预处理的代码语句,每个语句都在array-element中。非常简单。
https://stackoverflow.com/questions/10300021
复制相似问题