当前位置: 首页 > 面试题库 >

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

陶琦
2023-03-14
问题内容

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

我想使用Java解析这些文件。是否存在用于将C-Header文件读入结构的库,或者是否存在可以理解C-Header文件的流解析器?

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

例:

#define TYPE1
typedef struct type1
{
char name1[10];
char name2[5];
}
#endif

Type2,Type3等类似。

数据结构:

type1ffffffffffaaaaa

问题答案:

您可以将现有的C解析器用于Java。当然,它比解析头文件做得多,但这不应该伤害您。

我们使用来自Eclipse
CDT
项目的解析器。这是一个Eclipse插件,但是我们在Eclipse之外成功使用了它,我们只需要将3个Eclipse的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.jar,和org.eclipse.osgi.jar

编辑 :我发现了一篇包含以下代码片段的论文:“使用Eclipse C / C 开发工具作为健壮的,功能齐全,活动维护的开源C

解析器”,但是它不再在线可用(仅适用于简化版)。



 类似资料:
  • 我正在尝试使用iText7库升级我的代码。以前我使用过iTextSharp库,但看起来iText7是全新的。我尝试阅读pdf文档,但在“未找到pdf标题”之间遇到了一个异常。这是我的密码 我做错了什么?

  • 本文向大家介绍java如何解析/读取xml文件,包括了java如何解析/读取xml文件的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java解析/读取xml文件的方法,供大家参考,具体内容如下 XML文件 Java 代码: 以上就是本文的全部内容,希望对大家的学习有所帮助。

  • 我正在使用Mule 4.4,并尝试读取文件,然后使用Dataweave转换为JSON。这是文件(它没有标头),文件中的最后一行为空白 在读取文件时,将mime类型设置为application/csv(尽管其管道分隔),这会是一个问题吗? 我遇到的问题是,我想将文件内容转换为json,如下所示: 然而,它显示如下:(重复第一行) 我认为这种情况正在发生,因为骡子假设第一行包含标题.这是我的数据编织:

  • 问题内容: 我必须要做一个Windows应用程序,该应用程序会不时访问Gmail帐户并检查是否有新电子邮件。如果有的话,它必须阅读电子邮件的正文和主题(简单的文本电子邮件,没有图像或附件)。 请不要使用付费库,如果使用了其他库,请提供下载路径。 而且我只需要电子邮件正文和主题。因此,如果可以解析来自Gmail的冗长而复杂的邮件,并且仅包含主题和正文的两个字符串,那将是完美的选择。 最后,我只需要使

  • 问题内容: HTTP服务器向我发送JSON响应(字符串),如下所示: 我想将此“远程文件夹的树”与本地文件夹树(例如,包含本地文件位置的字符串向量)进行比较,因此我想在(string,vector(map(string ,string)))(我不知道是否可行)。 我正在开发一种工具来在本地文件夹和远程文件夹之间同步文件,因此我正在使用boost列出本地文件夹,并且我想将本地列表与远程列表(JSON

  • 一个HTTP服务器发送给我一个JSON响应(一个字符串),如下所示: 我想将这个“远程文件夹的树”与本地文件夹树(例如包含我的本地文件的位置的字符串向量)进行比较,所以我想在(string,vector ( map(string,string))(我不知道这是否可能)的地图上转换这个JSON。 我正在开发一个工具来同步本地和远程文件夹之间的文件,因此我正在使用boost列出本地文件夹,并且我想将本