基于Clang的AST提取结构体数据库插件的实现

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:pearl12345
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:在嵌入式系统调试环境下,需将大量的结构体变量输出到诊断软件,进行解析与呈现,而结构体数量庞大,且容易变化。在软件快速迭代开发阶段,迫切需要使结构体解析过程自动化。最关键的一步,是实现结构体定义数据库的提取。此文主要研究基于Clang编译器,实现从前端编译结构体定义文件生成的抽象语法树中提取结构体定义信息。实验结果表明,该方法能准确的实现从结构体定义文件提取结构体定义XML数据库。
  关键词: Clang编译器;抽象语法树;信息提取;结构体定义
  中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2017)06-0019-03
  Abstract: In the debugging environment of the embedded system, the structure variables which are very large in quantity and mutable, should be output to the diagnostic software to be parsed and presented. In the rapidly iteration development phase, it is an urgent need to make the structure parsing process automation. It is the most crucial step to realize the extraction of structure definition database. This paper mainly studies how to extract structure definition information from the abstract syntax tree generated by the fronted compiler Clang. The experimental results show that this method can realize the structure XML database form the definition files accurately.
  Key words:Clang compiler; abstract syntax tree (AST); information extraction; structure definition
  1 概述
  在嵌入式软件开发过程中,为了快速分析软件运行过程,定位问题,将系统运行中的各类诊断信息输出到诊断软件解析,而大量的诊断信息是基于结构体类型,在嵌入式系统开发前期,采用手工编写解析结构体的函数来实现。但结构体定义在开发调试过程中会经常发生变更,结构体解析库就需要同步更新维护,随着系统工程模块化程度提高,规模也越来越大,涉及的人员越来越多,结构体定义与解析库之间更新不同步的问题越来越频繁,维护成本越来越高,严重影响了软件开发迭代进度。
  本文在开源编译框架LLVM的前端编译器Clang的基础上,通过开发一个Clang前端插件,实现从抽象语法树AST(Abstract Syntax Tree)中进行结构体数据库提取。相比于手工编写解析函数,将繁重的开发和维护工作量降到0,大大提高了工作效率。
  本文第二节介绍Clang 前端插件的编写、编译与执行方法;给出结构体数据库提取插件的实现方法;第三节对本文進行总结。
  2 相关工作
  2.1 Clang 前端插件开发介绍
  Clang作为LLVM开源编译框架的一种前端编译器,实现编译过程中的词法分析,语法分析,类型检查,中间代码生成。Clang对用户进行前端插件的开发提供了很好的支持,前端操作的切入点是抽象类FrontendAction,此接口支持在前端编译过程中执行插件定制的操作。AST消费者的切入点是抽象类ASTConsumer,此接口支持对抽象语法树的访问。
  本文是研究在编译过程中从抽象语法树提取结构体定义相关的信息,面向AST消费者前端操作的抽象接口类为FrontendAction的子类ASTFrontendAction,插件中前端操作基类选择ASTFrontendAction的子类PluginASTAction。自定义的AST消费者基类选择ASTConsumer。
  2.1.1 编写Clang插件
  1) 定义继承自PluginASTAction的自定义类StructFrontendAction。重载三个成员函数:
  ①用于创建抽象语法树的Consumer类。
  ASTConsumer *CreateASTConsumer(CompilerInstance
其他文献
为了实现培养实践性、技能型人才的目标,达到应用型高校对本科人才培养模式的要求,就某学院计算机科学与技术专业嵌入式系统课程体系及实践教学模式进行了改革与研究。首先分
摘要:本文设计了一种基于无线网络的智能锁,它可以实现通过无线网络将锁的状态实时显示在手机上,本文采用的是CC2530芯片,详细介绍了智能锁硬件系统的设计,包括电源电路和各部分功能电路等。  关键词:智能锁;CC2530;硬件  中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)09-0265-02  1 引言  随着社会的发展,人们的生活条件日益提高,人们对生活的追求
随着海量非结构化数据的出现,关键词检索的方式逐渐不能满足用户的需要,为了提高检索的准确率,故提出使用HotRank算法来进行解决,并用实验证明之。
目的探讨DNA修复基因家族成员ERCCl、RRM1在非小细胞肺癌(NSCLC)中的表达及意义。方法应用免疫组织化学PV-9000法对30例NSCLC患者肿瘤组织中的ERCC1、RRM1蛋白表达进行检测。用
目的观察蛴螬提取物对人肺癌A549细胞增殖的影响及诱导凋亡的机制。方法采用MTr法检测蛴螬提取物对人肺癌A549细胞的增殖抑制率;运用免疫细胞化学sP法检测用药前后Bax和p21蛋